Saya perlu cara untuk mengubah nama semua file dalam folder dan subfolder menjadi huruf kecil.
Saya ingin tahu apakah ada cara untuk melakukannya dengan hanya menggunakan windows (XP atau 7)
Saya perlu cara untuk mengubah nama semua file dalam folder dan subfolder menjadi huruf kecil.
Saya ingin tahu apakah ada cara untuk melakukannya dengan hanya menggunakan windows (XP atau 7)
Jawaban:
Pergi ke direktori dan jalankan perintah berikut:
for /f "Tokens=*" %f in ('dir /l/b/a-d') do (rename "%f" "%f")
Berikut ini rincian jika seseorang ingin memodifikasi / meningkatkan:
for /f
- Untuk setiap baris"Tokens=*"
- Memproses setiap item di setiap baris.%f in (...)
- %f
adalah nama variabel Anda untuk setiap item.dir
- daftar setiap file dan subdirektori dalam direktori./l
- (parameter untuk dir) Menggunakan huruf kecil./b
- (parameter untuk dir) Menggunakan format telanjang, hanya nama file / direktori, tanpa ukuran, tanpa header./a-d
- (parameter untuk dir) Jangan tidak daftar direktori . ( a
singkatan attribute
, -
singkatan not
dan d
singkatan directory
) .rename "%f" "%f"
- ganti nama file dengan namanya sendiri, yang sebenarnya ditulis dengan huruf kecil dengan dir
perintah dan /l
kombinasi.for /f "Tokens=*" %f in ('dir /l/b/a-d/s') do (rename "%f" "%f")
(ditambahkan / r ke dir).
spacetornado Renamer adalah program Windows yang mengubah nama sejumlah besar file dalam batch. Anda dapat mencari dan mengganti teks, menghapus sejumlah karakter tertentu, mengubah huruf besar-kecil, huruf besar atau Pertama, dan menambahkan teks ke awal atau akhir (tambahkan / tambahkan) dari setiap nama file
Sejak Windows 7 Anda dapat menggunakan PowerShell untuk tugas-tugas itu
Get-ChildItem "C:\path\to\folder" -recurse |
Where {-Not $_.PSIsContainer} |
Rename-Item -NewName {$_.FullName.ToLower()}
- Pilih folder root Anda
- semua file di dalam folder root dan subfolder diganti namanya
- nama folder dikecualikan dengan Where {-Not $_.PSIsContainer} |
Berikut ini adalah solusi baris perintah rekursif yang tepat menggunakan hanya perintah cmd.exe asli yang benar-benar berfungsi. Saya percaya ini adalah solusi asli yang paling sederhana:
for /r %D in (.) do @for /f "eol=: delims=" %F in ('dir /l/b/a-d "%D"') do @ren "%D\%F" "%F"
Jika Anda mau melampaui perintah cmd.exe asli, maka opsi lain adalah utilitas penggantian nama reguler JREN.BAT saya yang mendukung opsi untuk mengonversi nama menjadi huruf besar atau kecil. Ini adalah skrip murni (hybrid JScript / batch) yang berjalan secara native pada mesin Windows dari XP dan seterusnya - tidak diperlukan file exe pihak ketiga. Dokumentasi lengkap dibangun - diakses dari baris perintah melalui jren /?
, atau jren /??
jika Anda ingin keluaran halaman.
Dengan JREN, solusi rekursif semudah:
jren "^" "" /s /l
/a-d
sakelar dan juga akan merender nama folder juga.
" D"') was unexpected at this time.
Menjalankannya sebagai perintah langsung berfungsi dengan baik, tidak berfungsi ketika dijalankan sebagai file batch. Tidak yakin bagaimana cara membuatnya berfungsi sebagai file batch, tetapi saya pikir saya akan membahas masalah ini.
%D
harus berubah untuk %%D
, dan %F
untuk %%F
jika Anda menempatkan perintah dalam batch script.
Utilitas penggantian nama file batch favorit pribadi saya adalah WildRename Cylog . Di antara banyak fitur lainnya, itu dapat mengubah kasus nama file. Hal terbaik tentang WildRename mungkin mendukung ekspresi reguler!
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"')
Mendapat daftar jalur absolut dari semua direktori di dalam saat ini (termasuk itu):
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")
Mendapat daftar semua nama file (atau nama file dan direktori jika Anda mengeluarkan /a-d
sakelar) di dalam setiap jalur absolut yang ditemukan oleh loop pertama , dan mengonversi nama file-file ini menjadi huruf kecil.
C: \ Foo \ TO.txt
C: \ Foo \ Bar \ LOWER.txt
C: \ Foo \ Bar \ Baz \ CASE.txt
* Perlu dua loop karena argumen kedua rename
harus berupa nama file dan bukan path absolut (seperti yang diperoleh oleh /s
switch).
cmd /c "echo %cd%&
yang pertama for
? Ini sama sekali tidak perlu.
echo %cd%
ada di sana untuk menambahkan folder saat ini ke daftar jalur absolut ; dan cmd /c
membuat &
pekerjaan untuk menggabungkan perintah. Saya benar-benar noob tentang Windows Batch Scripting ; jika Anda mengetahui cara yang lebih baik, silakan meningkatkan jawabannya!
http://www.dostips.com/DtCodeCmdLib.php#Function.toLower memberikan fungsi sederhana yang harus dapat Anda sertakan dan panggil dari file batch.
Jadi mintalah file batch iterate di atas folder / nama file, dan panggil fungsi ini untuk menghasilkan versi huruf kecil dari nama tersebut.
Dari http://windowsitpro.com/articles/index.cfm?articleid=81612 :
Hanya menggunakan perintah standar, saya telah menulis LwrCase.bat dan LwrCase_Folder.bat, untuk mengubah nama nama file menjadi huruf kecil, atau mengubah nama semua nama file dalam folder ke huruf kecil.
Untuk mengganti nama file menjadi huruf kecil, gunakan:
[call] LwrCase FullyQualifiedFileName
Di mana FullyQualifiedFileName adalah nama file yang sepenuhnya memenuhi syarat untuk diganti namanya.
Untuk mengganti nama semua nama file dalam direktori, gunakan:
[call] LwrCase_Folder FullyQualifiedDirectoryName [/S]
di mana FullyQualifiedDirectoryName adalah jalur folder yang sepenuhnya memenuhi syarat, dan / S adalah parameter opsional yang juga akan mengganti nama nama file di semua sub-folder.
CATATAN: LwrCase.bat menggunakan saklar / L dari perintah DIR, yang mengembalikan nama huruf kecil.
LwrCase.bat berisi:
@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 berisi:
@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
Program terbaik untuk melakukan ini di Windows adalah Bulk Rename Utility . Ini adalah alat pria. Anda bahkan dapat menggunakan regex untuk mengganti nama file dan / atau folder. Ini juga memiliki integrasi shell (sehingga Anda dapat mengeksekusi dari explorer dengan klik kanan) yang sangat bagus. Tersedia versi 64 bit dan 32 bit.
Jawaban yang diterima untuk pertanyaan ini, oleh loftysnake , berfungsi untuk direktori saat ini tetapi tidak mencari subfolder.
Sawny menyarankan modifikasi sederhana untuk jawaban loftysnake
untuk membuatnya rekursif, tetapi tidak bekerja, karena, sementara rename
perintah memungkinkan Anda untuk menentukan drive dan path dengan nama file1 (sumber), nama file2 (tujuan) harus hanya nama file . Mengutip pesan help ( /?
),
... Anda tidak dapat menentukan drive atau jalur baru untuk file tujuan Anda.
Tetapi move
berfungsi jika rename
tidak, sehingga Anda dapat mengubah nama file menjadi huruf kecil dengan perintah ini secara rekursif:
for /f "Tokens=*" %f in ('dir /l/b/a-d/s') do (move /y "%f" "%f")
karena ternyata itu Move
bisa mengatasi jalur direktori.
Perintah di atas berfungsi ketika diketik langsung ke Command Prompt ( CMD.EXE
). Jika Anda ingin melakukan ini dari dalam file batch ( .BAT
), Anda harus menggandakan %
karakter:
for /f "Tokens=*" %%f in ('dir /l/b/a-d/s') do (move /y "%%f" "%%f")
Dan Anda mungkin dapat meninggalkan tanda kurung dan /y
dan mengatakan adil do move …
.
move
bekerja di mana rename
tidak, dan saya pikir saya satu-satunya yang telah menyarankan penggunaan move
perintah di sini. Saya hanya mengambil saran @loftysnake dan @snyny, dan semoga sedikit memperbaikinya.
move
, tetapi saya tidak dapat menemukannya sekarang.
Powershell
Arahkan ke dir dan jalankan:
dir | Rename-Item -NewName { $_.Name.ToLowerInvariant() }
Saya telah memverifikasi bahwa ini berfungsi. Ditemukan di sini: http://www.hanselman.com/blog/PennyPinchingVideoMovingMyWebsitesImagesToTheAzureCDNAndUsingACustomDomain.aspx