मुझे लोअरकेस में फ़ोल्डर्स और सबफ़ोल्डर्स में सभी फ़ाइलों का नाम बदलने का एक तरीका चाहिए।
मैं जानना चाहता हूं कि क्या ऐसा करने का कोई तरीका है जो केवल विंडोज़ (XP या 7) का उपयोग कर रहा है
मुझे लोअरकेस में फ़ोल्डर्स और सबफ़ोल्डर्स में सभी फ़ाइलों का नाम बदलने का एक तरीका चाहिए।
मैं जानना चाहता हूं कि क्या ऐसा करने का कोई तरीका है जो केवल विंडोज़ (XP या 7) का उपयोग कर रहा है
जवाबों:
निर्देशिका पर जाएं और निम्न कमांड चलाएँ:
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 के लिए पैरामीटर) निर्देशिकाओं को सूचीबद्ध न करें । ( के लिए खड़ा है , के लिए खड़ा है और के लिए खड़ा है ) ।a
attribute
-
not
d
directory
rename "%f" "%f"
- फ़ाइल को अपने नाम से बदलें, जो वास्तव में dir
कमांड और /l
संयोजन द्वारा नीचा है ।for /f "Tokens=*" %f in ('dir /l/b/a-d/s') do (rename "%f" "%f")
(जोड़ा गया / आर से डीआईआर)।
spacetornado Renamer एक विंडोज़ प्रोग्राम है जो बैचों में बड़ी मात्रा में फ़ाइलों का नाम बदल देता है। आप पाठ को खोज और बदल सकते हैं, एक निश्चित संख्या में वर्णों को हटा सकते हैं, मामले को निचले, ऊपरी या पहले पत्र की राजधानी में बदल सकते हैं, और प्रत्येक फ़ाइल नाम के आरंभ या अंत (परिशिष्ट / पूर्व-पाठ) में पाठ जोड़ सकते हैं।
विंडोज 7 के बाद से आप उन कार्यों के लिए PowerShell का उपयोग कर सकते हैं
Get-ChildItem "C:\path\to\folder" -recurse |
Where {-Not $_.PSIsContainer} |
Rename-Item -NewName {$_.FullName.ToLower()}
- अपना रूट फ़ोल्डर चुनें
- रूट फ़ोल्डर और सबफ़ोल्डर्स के अंदर सभी फ़ाइलों का नाम बदल दिया जाता है
- फ़ोल्डर नामों को बाहर रखा गया है Where {-Not $_.PSIsContainer} |
यहां केवल मूल 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
/a-d
स्विच को हटा दें और यह फ़ोल्डर के नाम को भी कम कर देगा।
" D"') was unexpected at this time.
इसे डायरेक्ट कमांड के रूप में चलाना ठीक काम करता है, जब बैच फाइल के रूप में चलाया जाता है तो यह काम नहीं करता है। निश्चित नहीं है कि इसे एक बैच फ़ाइल के रूप में कैसे काम किया जाए, लेकिन मुझे लगा कि मैं इस मुद्दे को उठाऊंगा।
%D
करने के लिए परिवर्तन करना होगा %%D
, और %F
करने के लिए %%F
यदि आप एक बैच स्क्रिप्ट के भीतर आदेश डाल दिया।
मेरे व्यक्तिगत पसंदीदा बैच फ़ाइल का नाम बदलने की उपयोगिता साइलॉग वाइल्डनेम है । कई अन्य विशेषताओं में, यह फ़ाइल नाम के मामले को बदल सकता है। WildRename के बारे में सबसे अच्छी बात यह है कि यह नियमित अभिव्यक्ति का समर्थन करता है!
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
? यह पूरी तरह से अनावश्यक है।
echo %cd%
वर्तमान फ़ोल्डर को निरपेक्ष पथों की सूची में जोड़ने के लिए है ; और कमांड को संयोजित करने के लिए काम cmd /c
करता है &
। मैं विंडोज बैच पटकथा के बारे में कुल noob हूँ ; यदि आप एक बेहतर तरीका जानते हैं, तो उत्तर को बेहतर बनाने के लिए स्वतंत्र महसूस करें!
http://www.dostips.com/DtCodeCmdLib.php#Function.toLower एक सरल फ़ंक्शन देता है जिसे आपको बैच फ़ाइल से शामिल करने और कॉल करने में सक्षम होना चाहिए।
इसलिए फ़ोल्डर / फ़ाइल नाम पर बैच फ़ाइल पुनरावृति है, और नाम के निचले संस्करण को उत्पन्न करने के लिए इस फ़ंक्शन को कॉल करें।
से 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
विंडोज में ऐसा करने के लिए सबसे अच्छा प्रोग्राम बल्क रिनेम यूटिलिटी है । यह एक मैन्स टूल है। आप फ़ाइलों और / या फ़ोल्डरों का नाम बदलने के लिए भी regex का उपयोग कर सकते हैं। इसमें शेल इंटीग्रेशन भी है (ताकि आप एक राइट क्लिक से एक्सप्लोरर से निष्पादित कर सकें) जो बहुत अच्छा है। 64 बिट और 32 बिट संस्करण उपलब्ध हैं।
लॉफ्टिस्नेक द्वारा इस प्रश्न का स्वीकृत उत्तर , वर्तमान निर्देशिका के लिए काम करता है लेकिन सबफ़ोल्डर्स को नहीं खोजता है ।
सावनी ने
इसे पुनरावर्ती बनाने के लिए लॉफ्टिस्नेक के उत्तर के लिए एक सरल संशोधन का सुझाव दिया , लेकिन यह काम नहीं करता है, क्योंकि, जबकि 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
, लेकिन मैं इसे अब नहीं ढूंढ सकता।
शक्ति कोशिका
Dir पर जाएं और चलाएँ:
dir | Rename-Item -NewName { $_.Name.ToLowerInvariant() }
मैंने सत्यापित किया है कि यह काम करता है। यहाँ पाया गया: http://www.hanselman.com/blog/PennyPinchingVideoMovingMyWebsitesImagesToTheAzureCDNAndUsingACustomDomain.aspx