क्या लोअरकेस में फ़ाइलों का नाम बदलने का एक तरीका है?


63

मुझे लोअरकेस में फ़ोल्डर्स और सबफ़ोल्डर्स में सभी फ़ाइलों का नाम बदलने का एक तरीका चाहिए।

मैं जानना चाहता हूं कि क्या ऐसा करने का कोई तरीका है जो केवल विंडोज़ (XP या 7) का उपयोग कर रहा है


विंडोज़ छोटे और ऊपरी कैप के बीच अंतर नहीं करती जैसा कि यूनिक्स करता है। शायद, अगर आपने कहा कि आपको इसकी आवश्यकता क्यों है, तो समस्या को हल करने में मदद मिलेगी।
रूक

1
@Idigas। क्षमा करें, लेकिन NTFS के बाद से, फ़ाइल नाम संवेदनशील हैं। Support.microsoft.com/kb/100625
डेविपैरिलो

सिर्फ महान। एक बुरा विचार लो और इसे और फैलाओ। जब कोई व्यक्ति किसी फ़ाइल को भेजता है और एक उंगली की गलती का समर्थन करता है तो दुःस्वप्न का क्या मतलब है कि उन्होंने "Answers.dat" भेजा है और आने वाली प्रक्रिया "answer.dat" की अपेक्षा करती है। उन दो नामों को 'अलग' मानने का कोई अच्छा कारण नहीं है।
डेविड

2
@ डेविड, उदाहरण के लिए जावा को वास्तव में केस-संवेदी फ़ाइल नामों की आवश्यकता है। यह गैर-केस-संवेदी फ़ाइल सिस्टम पर बहुत परेशानी पैदा कर सकता है।
अर्जन

10
मुझे पता है कि यह पुराना है, लेकिन मैं यहां एक गलत धारणा को स्पष्ट करना चाहता था। जबकि NTFS केस सेंसिटिविटी का समर्थन करता है, Windows OS अलग नहीं होता है!
जियो

जवाबों:


122

निर्देशिका पर जाएं और निम्न कमांड चलाएँ:

for /f "Tokens=*" %f in ('dir /l/b/a-d') do (rename "%f" "%f")

किसी को संशोधित / सुधारने के मामले में यहाँ ब्रेक-डाउन है:

  • for /f - हर लाइन के लिए
  • "Tokens=*" - प्रत्येक पंक्ति में प्रत्येक आइटम को संसाधित करें।
  • %f in (...)- %fहर आइटम के लिए आपका चर नाम है।
  • dir - एक निर्देशिका में हर फ़ाइल और उपनिर्देशिका को सूचीबद्ध करता है।
  • /l- (dir के लिए पैरामीटर) लोअरकेस का उपयोग करता है।
  • /b- (dir के लिए पैरामीटर) नंगे प्रारूप का उपयोग करता है, केवल फ़ाइल / निर्देशिका नाम, कोई आकार, कोई हेडर नहीं है।
  • /a-d- (dir के लिए पैरामीटर) निर्देशिकाओं को सूचीबद्ध करें । ( के लिए खड़ा है , के लिए खड़ा है और के लिए खड़ा है )aattribute-notddirectory
  • rename "%f" "%f"- फ़ाइल को अपने नाम से बदलें, जो वास्तव में dirकमांड और /lसंयोजन द्वारा नीचा है ।

7
पुनरावर्ती संस्करण: for /f "Tokens=*" %f in ('dir /l/b/a-d/s') do (rename "%f" "%f")(जोड़ा गया / आर से डीआईआर)।
सवा

3
यह सिर्फ ब्रिलियंट है
शिर गन्स

4
पुनरावर्ती संस्करण ने मेरे लिए काम नहीं किया - नाम बदलकर एक अवैध प्रारूप में कमांड के बारे में शिकायत की। दूसरी फ़ाइल को निरपेक्ष पथ के रूप में सूचीबद्ध करने के लिए / s फ़ाइल को चालू करने से फ़ाइल एक्सटेंशन के विस्तार (% ~ nxf) ने मुझे मूल, अपरकेस फ़ाइल नाम दिया। बस मैन्युअल रूप से आवर्ती समाप्त हो गया।
डॉगमैटिक्सड

3
यह एक बहुत अच्छा जवाब है; इस बिंदु पर, किसी भी बाहरी कार्यक्रमों की जरूरत नहीं है, अच्छा और छोटा कमांड, कोई बैच फ़ाइल जटिल-नेस की जरूरत नहीं है।
जेफ विल्बर्ट

2
क्या इसे अपरकेस से निचले हिस्से में बदलने के लिए संशोधित किया जा सकता है?
चंकी

18

spacetornado Renamer एक विंडोज़ प्रोग्राम है जो बैचों में बड़ी मात्रा में फ़ाइलों का नाम बदल देता है। आप पाठ को खोज और बदल सकते हैं, एक निश्चित संख्या में वर्णों को हटा सकते हैं, मामले को निचले, ऊपरी या पहले पत्र की राजधानी में बदल सकते हैं, और प्रत्येक फ़ाइल नाम के आरंभ या अंत (परिशिष्ट / पूर्व-पाठ) में पाठ जोड़ सकते हैं।

यहाँ छवि विवरण दर्ज करें


1
कृपया मुझे डाउन वोट का कारण बताएं?
जो

5
लोग शायद ही कभी समझाते हैं, दुर्भाग्य से: /
Gnoupi

7
मुझे लगता है कि गिरावट का कारण यह था कि ओपी एक समाधान चाहता था जो बिना किसी अतिरिक्त सॉफ्टवेयर के काम करता था। और मुझे लगता है कि डाउनवोट की व्याख्या नहीं की गई क्योंकि कुछ लोग बदला लेने वाले डाउनवोट से निपटने के लिए प्रवण हैं।
इन्नाएम

जीयूआई थोड़ा कायरतापूर्ण है लेकिन यह कई अन्य रेनमैर्स की तुलना में बेहतर काम करता है जो मैंने वहां देखा है।
२२:४६ पर jcollum

1
जब मैंने लिनक्स एफ़टीपी सर्वर से फ़ाइलों को साफ़ करने के लिए पुनरावर्ती नामकरण की आवश्यकता होती है, तो यह किया था ... हालांकि, इसे ठीक से काम करने से पहले इसे व्यवस्थापक के रूप में चलाने की आवश्यकता थी। एक पुराने बनाए हुए कार्यक्रम की तरह लगता है :)
नेल्सन

12

विंडोज 7 के बाद से आप उन कार्यों के लिए PowerShell का उपयोग कर सकते हैं

Get-ChildItem "C:\path\to\folder" -recurse | 
  Where {-Not $_.PSIsContainer} | 
  Rename-Item -NewName {$_.FullName.ToLower()}

- अपना रूट फ़ोल्डर चुनें
- रूट फ़ोल्डर और सबफ़ोल्डर्स के अंदर सभी फ़ाइलों का नाम बदल दिया जाता है
- फ़ोल्डर नामों को बाहर रखा गया है Where {-Not $_.PSIsContainer} |


7

यहां केवल मूल cmd.exe आदेशों का उपयोग करके एक उचित पुनरावर्ती कमांड लाइन समाधान है जो वास्तव में काम करता है। मेरा मानना ​​है कि यह सबसे सरल संभव देशी समाधान है:

for /r %D in (.) do @for /f "eol=: delims=" %F in ('dir /l/b/a-d "%D"') do @ren "%D\%F" "%F"

यदि आप मूल cmd.exe आदेशों से आगे जाने के इच्छुक हैं, तो एक और विकल्प मेरा JREN.BAT नियमित अभिव्यक्ति नामकरण उपयोगिता है जो नामों को ऊपरी या निचले मामले में परिवर्तित करने के लिए विकल्पों का समर्थन करता है। यह शुद्ध स्क्रिप्ट (हाइब्रिड JScript / बैच) है जो किसी भी विंडोज़ मशीन को XP से आगे की ओर चलाता है - कोई 3 पार्टी एक्साई फ़ाइलों की आवश्यकता नहीं है। पूर्ण दस्तावेज़ बनाया गया है - कमांड लाइन से एक्सेस किया गया है jren /?, या jren /??यदि आप पृष्ठांकित आउटपुट चाहते हैं।

JREN के साथ, पुनरावर्ती समाधान उतना ही सरल है:

jren "^" "" /s /l

1
बहुत अच्छा काम करता है। FYI करें /a-dस्विच को हटा दें और यह फ़ोल्डर के नाम को भी कम कर देगा।
कीथ

इसे एक बैच फ़ाइल के रूप में सहेजने की कोशिश की और इसे system32 में पॉपअप किया ताकि मैं इसे किसी भी कमांड के साथ कभी भी चला सकूं। इसमें परिणाम: " D"') was unexpected at this time.इसे डायरेक्ट कमांड के रूप में चलाना ठीक काम करता है, जब बैच फाइल के रूप में चलाया जाता है तो यह काम नहीं करता है। निश्चित नहीं है कि इसे एक बैच फ़ाइल के रूप में कैसे काम किया जाए, लेकिन मुझे लगा कि मैं इस मुद्दे को उठाऊंगा।
डॉन कुलेन

1
@DonCullen - यह मानक वाक्यविन्यास है कि बैच स्क्रिप्ट के लिए फॉरवर्ड का उपयोग करते समय चर प्रतिशत को दोगुना किया जाना चाहिए। तो %Dकरने के लिए परिवर्तन करना होगा %%D, और %Fकरने के लिए %%Fयदि आप एक बैच स्क्रिप्ट के भीतर आदेश डाल दिया।
डेबनहम

हमेशा कुछ न कुछ नया सीखना। धन्यवाद!
डॉन कुलेन

6

मेरे व्यक्तिगत पसंदीदा बैच फ़ाइल का नाम बदलने की उपयोगिता साइलॉग वाइल्डनेम है । कई अन्य विशेषताओं में, यह फ़ाइल नाम के मामले को बदल सकता है। WildRename के बारे में सबसे अच्छी बात यह है कि यह नियमित अभिव्यक्ति का समर्थन करता है!


यह 10 सेकंड में स्थापना के बाद सही ऐप है। मैंने कॉन्फ़िगर किया और नाम बदलकर एक दूरस्थ फ़ोल्डर (सुविधा के लिए मैप किया गया) का नाम बदल दिया।
मट्टियो कोंटा

5

स्वीकृत उत्तर का "पुनरावर्ती" संस्करण (जो * काम करता है)

for /f "Tokens=*" %f in ('cmd /c "echo %cd%& dir /l/b/ad/s"') do (for /f "Tokens=*" %g in ('dir /l/b/a-d "%f"') do (rename "%f"\"%g" "%g"))


पहला लूप

for /f "Tokens=*" %f in ('cmd /c "echo %cd%& dir /l/b/ad/s"')

वर्तमान (इसके सहित) के अंदर सभी निर्देशिकाओं के निरपेक्ष रास्तों की सूची प्राप्त करता है :

C: \ फू>

  • C: \ Foo \ TO.txt

  • C: \ Foo \ Bar \ LOWER.txt

  • C: \ Foo \ Bar \ Baz \ CASE.txt


दूसरा पाश

for /f "Tokens=*" %g in ('dir /l/b/a-d "%f"') do (rename "%f"\"%g" "%g")

पहले लूप द्वारा पाए गए प्रत्येक पूर्ण पथ के अंदर सभी फ़ाइल नामों (या यदि आप स्विच को निकालते हैं तो फ़ाइल और निर्देशिका नाम /a-d) की एक सूची प्राप्त करता है , और इन फ़ाइलों के नाम को निचले हिस्से में परिवर्तित करता है।

  • C: \ Foo \ TO.txt

  • C: \ Foo \ Bar \ LOWER.txt

  • C: \ Foo \ Bar \ Baz \ CASE.txt


* इसे दो छोरों की आवश्यकता है क्योंकि दूसरा तर्क renameएक फ़ाइल नाम होना चाहिए और एक पूर्ण पथ नहीं होना चाहिए (जैसा कि /sस्विच द्वारा प्राप्त किया गया है )।


आपके पास cmd /c "echo %cd%& पहले क्यों है for? यह पूरी तरह से अनावश्यक है।
DavidPostill

@DavidPostill echo %cd%वर्तमान फ़ोल्डर को निरपेक्ष पथों की सूची में जोड़ने के लिए है ; और कमांड को संयोजित करने के लिए काम cmd /cकरता है &। मैं विंडोज बैच पटकथा के बारे में कुल noob हूँ ; यदि आप एक बेहतर तरीका जानते हैं, तो उत्तर को बेहतर बनाने के लिए स्वतंत्र महसूस करें!
wmatmato

एक noob के लिए उत्कृष्ट नौकरी। तुम्हारा पहला मूल cmd। एक सरल उत्तर के लिए मेरा उत्तर देखें जो अग्रणी स्थान या अर्धविराम के साथ भी काम करता है।
डेबनहम

क्या यह निचली कैप को बदलने के लिए संशोधित किया जा सकता है?
रिशव

3

आप एक "चरित्र प्रतिस्थापन" रणनीति का उपयोग कर सकते हैं ...

set Name=%Name:A=a%
set Name=%Name:B=b%
set Name=%Name:C=c%

... और इतने पर, पत्र AZ के लिए। आप शायद इसे एक लूप के रूप में लागू कर सकते हैं।


1

http://www.dostips.com/DtCodeCmdLib.php#Function.toLower एक सरल फ़ंक्शन देता है जिसे आपको बैच फ़ाइल से शामिल करने और कॉल करने में सक्षम होना चाहिए।

इसलिए फ़ोल्डर / फ़ाइल नाम पर बैच फ़ाइल पुनरावृति है, और नाम के निचले संस्करण को उत्पन्न करने के लिए इस फ़ंक्शन को कॉल करें।


1

से http://windowsitpro.com/articles/index.cfm?articleid=81612 :

केवल मानक आदेशों का उपयोग करते हुए, मैंने किसी फ़ाइल का नाम लोअर केस में दर्ज करने के लिए LwrCase.bat और LwrCase_Folder.bat को स्क्रिप्ट किया है, या किसी फाइल को कम करने के लिए फ़ोल्डर में सभी फ़ाइल नामों का नाम बदला है।

निम्न स्थिति में फ़ाइल का नाम बदलने के लिए, उपयोग करें:

[call] LwrCase FullyQualifiedFileName

जहां फुली क्वॉलिफाइडफाइलनेम का पूरी तरह से योग्य फ़ाइल नाम है।

निर्देशिका में सभी फ़ाइलों के नाम बदलने के लिए, उपयोग करें:

[call] LwrCase_Folder FullyQualifiedDirectoryName [/S]

जहाँ फुली क्वॉलिफाइडडायरेक्टरीनाम पूरी तरह से योग्य फ़ोल्डर पथ है, और / S एक वैकल्पिक पैरामीटर है जो सभी उप-फ़ोल्डरों में फ़ाइलों के नाम भी बदलेगा।

नोट: LwrCase.bat डीआईआर कमांड के / L स्विच का उपयोग करता है, जो निचले मामलों के नाम लौटाता है।

LwrCase.bat में शामिल हैं:

@echo off
if {%1}=={} @echo Syntax: LwrCase FullyQualifiedFileName&goto :EOF
if not exist %1 @echo LwrCase - %1 NOT found.&goto :EOF
setlocal
for /f "Tokens=*" %%a in ('@echo %~a1') do (
 set file=%%a
)
if /i "%file:~0,1%" EQU "d" @echo LwrCase - %1 is NOT a file.&endlocal&goto :EOF
for /f "Tokens=*" %%f in ('dir %1 /L /b /a /a-d') do (
 Rename %1 "%%f"
)
endlocal

LwrCase_Folder.bat में शामिल हैं:

@echo off
if {%1}=={} @echo Syntax: LwrCase_Folder FullyQualifiedDirectoryName&goto :EOF
if not exist %1 @echo LwrCase_Folder - %1 NOT found.&goto :EOF
setlocal
for /f "Tokens=*" %%a in ('@echo %~a1') do (
 set folder=%%a
)
if /i "%folder:~0,1%" NEQ "d" @echo LwrCase_Folder - %1 is NOT a folder.&endlocal&goto :EOF
pushd %1
set sw=/B /A /A-D
if /i {%2}=={/S} set sw=%sw% %2
for /f "Tokens=*" %%f in ('dir %sw%') do (
 call LwrCase "%%f"
)
popd
endlocal

1

विंडोज में ऐसा करने के लिए सबसे अच्छा प्रोग्राम बल्क रिनेम यूटिलिटी है । यह एक मैन्स टूल है। आप फ़ाइलों और / या फ़ोल्डरों का नाम बदलने के लिए भी regex का उपयोग कर सकते हैं। इसमें शेल इंटीग्रेशन भी है (ताकि आप एक राइट क्लिक से एक्सप्लोरर से निष्पादित कर सकें) जो बहुत अच्छा है। 64 बिट और 32 बिट संस्करण उपलब्ध हैं।


1

लॉफ्टिस्नेक द्वारा इस प्रश्न का स्वीकृत उत्तर , वर्तमान निर्देशिका के लिए काम करता है लेकिन सबफ़ोल्डर्स को नहीं खोजता है ।  सावनी ने इसे पुनरावर्ती बनाने के लिए लॉफ्टिस्नेक के उत्तर के लिए एक सरल संशोधन का सुझाव दिया , लेकिन यह काम नहीं करता है, क्योंकि, जबकि renameकमांड आपको filename1 (स्रोत), filename2 के साथ एक ड्राइव और पथ निर्दिष्ट करने की अनुमति देता है (गंतव्य केवल एक फ़ाइल नाम होना चाहिए । मदद ( /?) संदेश को उद्धृत करने के लिए ,

... आप अपने गंतव्य फ़ाइल के लिए एक नई ड्राइव या पथ निर्दिष्ट नहीं कर सकते।

लेकिन moveकाम renameनहीं करता है, तो आप इस आदेश के साथ कम करने के लिए फ़ाइलों का नाम बदल सकते हैं:

for /f "Tokens=*" %f in ('dir /l/b/a-d/s') do (move /y "%f" "%f")

क्योंकि यह पता चला है कि Moveनिर्देशिका पथ के साथ सामना कर सकते हैं।

उपरोक्त कमांड तब काम करता है जब सीधे कमांड प्रॉम्प्ट ( CMD.EXE) में टाइप किया जाता है । यदि आप इसे एक बैच ( .BAT) फ़ाइल के भीतर से करना चाहते हैं , तो आपको %वर्णों को दोगुना करना होगा :

for /f "Tokens=*" %%f in ('dir /l/b/a-d/s') do (move /y "%%f" "%%f")

और आप शायद कोष्ठकों को छोड़ सकते हैं /y और कह सकते हैं do move …


यदि आप ऐसी जानकारी फिर से पोस्ट करने जा रहे हैं जो अन्य लोग पहले ही पोस्ट कर चुके हैं, तो आपको मूल लेखक (ओं) की पहचान करनी चाहिए और उनके पोस्ट (लिंक) को लिंक करना चाहिए।
स्कॉट

क्षमा करें, लेकिन मैं इंगित कर रहा था कि moveकाम किया है जहां renameनहीं करता है, और मुझे लगता है कि मैं केवल एक ही हूं जिसने moveयहां कमांड के उपयोग का सुझाव दिया है। मैंने सिर्फ़ @loftysnake और @sawny के सुझाव लिए, और उम्मीद है कि उन्हें एक बिट में सुधार होगा।
एड्रियन

वह अजीब है; मैंने सोचा था कि किसी और ने उल्लेख किया था move, लेकिन मैं इसे अब नहीं ढूंढ सकता।
स्कॉट

0

पुनरावर्ती समाधान। इसे एक recursiverename.cmd फ़ाइल में डालें।

for /f "Tokens=*" %%f in ('dir /l/b/a-d') do (rename "%%f" "%%f")
for /r /d %%x in (*) do (
    pushd "%%x"
    for /f "Tokens=*" %%f in ('dir /l/b/a-d') do (rename "%%f" "%%f")
    popd
)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.