ฉันต้องการวิธีเปลี่ยนชื่อไฟล์ทั้งหมดในโฟลเดอร์และโฟลเดอร์ย่อยเป็นตัวพิมพ์เล็ก
ฉันต้องการทราบว่ามีวิธีการทำเช่นนั้นโดยใช้เฉพาะ windows (XP หรือ 7)
ฉันต้องการวิธีเปลี่ยนชื่อไฟล์ทั้งหมดในโฟลเดอร์และโฟลเดอร์ย่อยเป็นตัวพิมพ์เล็ก
ฉันต้องการทราบว่ามีวิธีการทำเช่นนั้นโดยใช้เฉพาะ windows (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")(เพิ่ม / r ไปยัง dir)
spacetornado Renamerเป็นโปรแกรม Windows ที่เปลี่ยนชื่อไฟล์จำนวนมากเป็นชุด คุณสามารถค้นหาและแทนที่ข้อความลบจำนวนอักขระเปลี่ยนตัวพิมพ์เล็กหรือใหญ่และเพิ่มข้อความไปยังจุดเริ่มต้นหรือสิ้นสุด (ต่อท้าย / เสริม) ของชื่อไฟล์ทุกชื่อ

ตั้งแต่ Windows 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 / แบทช์) ที่ทำงานบนเครื่อง Windows ใด ๆ จาก XP เป็นต้นไป - ไม่จำเป็นต้องมีไฟล์ exe ของบุคคลที่สาม เอกสารแบบเต็มถูกสร้างขึ้นใน - เข้าถึงได้จากบรรทัดคำสั่งผ่านjren /?หรือjren /??ถ้าคุณต้องการเอาท์พุทเพจ
ด้วย JREN โซลูชันแบบเรียกซ้ำนั้นง่ายเหมือน:
jren "^" "" /s /l
/a-dสวิทช์ออกและจะทำให้ชื่อโฟลเดอร์เล็กลงด้วย
" D"') was unexpected at this time.รันเป็นคำสั่งโดยตรงทำงานได้ดี แต่จะไม่ทำงานเมื่อทำงานเป็นไฟล์แบตช์ ไม่แน่ใจว่าจะทำงานเป็นแบตช์ไฟล์ได้อย่างไร แต่คิดว่าฉันจะแก้ปัญหานี้ได้
%Dจะต้องเปลี่ยนไป%%Dและ%Fไป%%Fถ้าคุณใส่คำสั่งภายในสคริปต์ชุด
ยูทิลิตี้ชุดที่ชื่นชอบการเปลี่ยนชื่อไฟล์ส่วนตัวของฉันคือWildRename Cylog ของ ท่ามกลางคุณสมบัติอื่น ๆ มันสามารถเปลี่ยนกรณีของชื่อไฟล์ สิ่งที่ดีที่สุดเกี่ยวกับ 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: \ Foo>
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 ทั้งหมดเกี่ยวกับWindows Batch Scripting ; ถ้าคุณรู้วิธีที่ดีกว่าอย่าลังเลที่จะปรับปรุงคำตอบ!
คุณสามารถใช้กลยุทธ์ "การแทนที่อักขระ" ...
set Name=%Name:A=a%
set Name=%Name:B=b%
set Name=%Name:C=c%
... และอื่น ๆ สำหรับตัวอักษร AZ คุณอาจจะนำไปใช้ในรูปแบบของวงวน FOR
http://www.dostips.com/DtCodeCmdLib.php#Function.toLowerมีฟังก์ชั่นง่าย ๆ ที่คุณควรจะสามารถรวมและเรียกจากแบตช์ไฟล์
ให้แบตช์ไฟล์วนซ้ำตามโฟลเดอร์ / ชื่อไฟล์และเรียกใช้ฟังก์ชั่นนี้เพื่อสร้างชื่อรุ่นตัวพิมพ์เล็ก
จากhttp://windowsitpro.com/articles/index.cfm?articleid=81612 :
ใช้คำสั่งมาตรฐานเท่านั้นฉันมีสคริปต์ LwrCase.bat และ LwrCase_Folder.bat เพื่อเปลี่ยนชื่อไฟล์เป็นตัวพิมพ์เล็กหรือเปลี่ยนชื่อชื่อไฟล์ทั้งหมดในโฟลเดอร์เป็นตัวพิมพ์เล็ก
ในการเปลี่ยนชื่อไฟล์เป็นตัวพิมพ์เล็กให้ใช้:
[call] LwrCase FullyQualifiedFileName
โดยที่ FullyQualifiedFileName เป็นชื่อไฟล์แบบเต็มที่จะถูกเปลี่ยนชื่อ
ในการเปลี่ยนชื่อชื่อไฟล์ทั้งหมดในไดเรกทอรีให้ใช้:
[call] LwrCase_Folder FullyQualifiedDirectoryName [/S]
โดยที่ FullyQualifiedDirectoryName เป็นพา ธ โฟลเดอร์ที่ผ่านการรับรองโดยสมบูรณ์และ / S เป็นพารามิเตอร์ทางเลือกที่จะเปลี่ยนชื่อชื่อไฟล์ในโฟลเดอร์ย่อยทั้งหมด
หมายเหตุ: LwrCase.bat ใช้สวิตช์ / L ของคำสั่ง DIR ซึ่งส่งคืนชื่อตัวพิมพ์เล็ก
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
คำตอบที่ยอมรับสำหรับคำถามนี้โดยloftysnake ใช้งานได้กับไดเรกทอรีปัจจุบัน แต่ไม่ค้นหาโฟลเดอร์ย่อย
Sawnyแนะนำการแก้ไขแบบง่าย ๆ กับคำตอบของ loftysnake
เพื่อให้สามารถเรียกซ้ำได้ แต่มันไม่ทำงานเพราะในขณะที่renameคำสั่งอนุญาตให้คุณระบุไดรฟ์และเส้นทางด้วยชื่อไฟล์ 1 (แหล่งที่มา) ชื่อไฟล์ 2 (ปลายทาง) ต้องเป็นชื่อไฟล์ . ในการพูดข้อความ help ( /?)
... คุณไม่สามารถระบุไดรฟ์หรือเส้นทางใหม่สำหรับไฟล์ปลายทางของคุณ
แต่ใช้moveงานrenameไม่ได้ดังนั้นคุณสามารถเปลี่ยนชื่อไฟล์ซ้ำเป็นตัวพิมพ์เล็กด้วยคำสั่งนี้:
for /f "Tokens=*" %f in ('dir /l/b/a-d/s') do (move /y "%f" "%f")
เพราะปรากฎว่าMoveสามารถรับมือกับเส้นทางไดเรกทอรี
คำสั่งดังกล่าวจะทำงานเมื่อพิมพ์ลงในพร้อมท์คำสั่ง ( CMD.EXE) โดยตรง หากคุณต้องการทำสิ่งนี้จากภายใน.BATไฟล์batch ( ) คุณต้องเพิ่ม%อักขระเป็นสองเท่า:
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แต่ฉันหามันไม่เจอในตอนนี้
โซลูชันแบบเรียกซ้ำ ใส่สิ่งนี้ลงในไฟล์ 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
)
Powershell
นำทางไปยัง dir และเรียกใช้:
dir | Rename-Item -NewName { $_.Name.ToLowerInvariant() }
ฉันได้ตรวจสอบแล้วว่ามันใช้งานได้ พบได้ที่นี่: http://www.hanselman.com/blog/PennyPinchingVideoMovingMyWebsitesImagesToTheAzureCDNA และUsingACustomDomain.aspx