ฉันต้องการวิธีเปลี่ยนชื่อไฟล์ทั้งหมดในโฟลเดอร์และโฟลเดอร์ย่อยเป็นตัวพิมพ์เล็ก
ฉันต้องการทราบว่ามีวิธีการทำเช่นนั้นโดยใช้เฉพาะ 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