Apakah ada cara untuk batch mengubah nama file menjadi huruf kecil?

63

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 tidak
sumber
windows tidak membedakan antara tutup kecil dan atas seperti yang dilakukan unix. mungkin, jika Anda berkata, mengapa Anda membutuhkan ini, itu akan membantu dalam menyelesaikan masalah.
Rook
1
@Idigas. Maaf, tapi sejak NTFS, nama file peka terhadap huruf besar-kecil. Lihat support.microsoft.com/kb/100625
DaveParillo
Bagus sekali. Ambil ide yang buruk dan sebarkan lebih lanjut. Apa mimpi buruk dukungan ketika seseorang mengirim file dan kesalahan jari gemuk berarti mereka mengirim "Answers.dat" dan proses masuk mengharapkan "answer.dat". Tidak ada alasan bagus untuk kedua nama itu dianggap 'berbeda'.
David
2
@ David, misalnya Java sebenarnya membutuhkan nama file case-sensitive. Itu dapat menghasilkan banyak masalah pada sistem file non-case-sensitive.
Arjan
10
Saya tahu ini sudah tua, tetapi saya ingin mengklarifikasi kesalahpahaman di sini. Sementara NTFS mendukung sensitivitas kasus, OS Windows TIDAK BERBEDA!
geo

Jawaban:

122

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 (...)- %fadalah 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 . ( asingkatan attribute, -singkatan notdan dsingkatan directory) .
  • rename "%f" "%f"- ganti nama file dengan namanya sendiri, yang sebenarnya ditulis dengan huruf kecil dengan dirperintah dan /lkombinasi.
loteng
sumber
7
Versi rekursif: for /f "Tokens=*" %f in ('dir /l/b/a-d/s') do (rename "%f" "%f")(ditambahkan / r ke dir).
Sawny
3
ini hanya brilian
Shir Gans
4
Versi rekursif tidak berfungsi untuk saya - ganti nama mengeluh tentang perintah yang berada dalam format yang tidak valid. Ternyata / s menyebabkan file kedua terdaftar sebagai path absolut dan menggunakan ekspansi nama file (% ~ nxf) memberi saya nama file asli, huruf besar. Berakhir hanya secara manual berulang.
Dogmatixed
3
Ini jawaban yang sangat bagus; to the point, tidak ada program eksternal yang diperlukan, perintah bagus dan kecil, tidak ada file batch kerumitan yang dibutuhkan.
Jeff Wilbert
2
Bisakah itu diubah untuk mengubah huruf kecil menjadi huruf besar?
Chucky
18

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

masukkan deskripsi gambar di sini

joe
sumber
1
Tolong beri saya alasan untuk memilih?
joe
5
Orang-orang jarang menjelaskan, sayangnya: /
Gnoupi
7
Saya kira downvote itu karena OP menginginkan solusi yang berfungsi tanpa perangkat lunak tambahan. Dan saya kira downvote tidak dijelaskan karena beberapa orang cenderung untuk membalas dendam.
innaM
GUI sedikit funky tetapi melakukan pekerjaan lebih baik daripada beberapa peramal lain yang pernah saya lihat di sana.
jcollum
1
Itu melakukan apa yang dilakukannya, ketika saya perlu penggantian nama secara rekursif untuk membersihkan file dari server FTP Linux ... namun, perlu menjalankannya sebagai Admin sebelum bekerja dengan benar. Terasa seperti program yang lama dan tidak dikelola :)
Nelson
12

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} |

nixda
sumber
7

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
dbenham
sumber
1
Bagus sekali. FYI menghapus /a-dsakelar dan juga akan merender nama folder juga.
Keith
Mencoba menyimpannya sebagai file batch dan muncul di system32 sehingga saya bisa menjalankannya kapan saja dengan satu perintah. Hasil dalam ini: " 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.
Don Cullen
1
@DonCullen - Ini adalah sintaks standar bahwa persentase variabel FOR harus digandakan ketika menggunakan FOR dalam skrip batch. Jadi %Dharus berubah untuk %%D, dan %Funtuk %%Fjika Anda menempatkan perintah dalam batch script.
dbenham
Selalu belajar sesuatu yang baru setiap hari. Terima kasih!
Don Cullen
6

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!

Synetech
sumber
INI adalah aplikasi yang tepat, setelah instalasi dalam 10 detik. Saya mengonfigurasi dan mengganti nama folder jarak jauh secara rekursif (dipetakan untuk kenyamanan).
Matteo Conta
5

Versi "Rekursif" dari jawaban yang diterima (yang berfungsi *)

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"))


Loop pertama

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


Loop kedua

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-dsakelar) 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 renameharus berupa nama file dan bukan path absolut (seperti yang diperoleh oleh /sswitch).

wc.matteo
sumber
Mengapa Anda memiliki cmd /c "echo %cd%& yang pertama for? Ini sama sekali tidak perlu.
DavidPostill
@DavidPostill echo %cd%ada di sana untuk menambahkan folder saat ini ke daftar jalur absolut ; dan cmd /cmembuat &pekerjaan untuk menggabungkan perintah. Saya benar-benar noob tentang Windows Batch Scripting ; jika Anda mengetahui cara yang lebih baik, silakan meningkatkan jawabannya!
wc.matteo
Pekerjaan luar biasa untuk pemula. Milik Anda adalah solusi baris perintah cmd.exe asli pertama yang benar-benar berfungsi, kecuali gagal ketika nama dimulai dengan spasi atau titik koma. Jawaban yang diterima akan mengalami masalah yang sama. Lihat jawaban saya untuk jawaban yang lebih sederhana yang juga berfungsi dengan memimpin ruang atau titik koma.
dbenham
Apakah ini dapat diubah untuk mengkonversi lebih rendah menjadi huruf besar?
Rishav
3

Anda dapat menggunakan strategi "penggantian karakter" ...

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

... dan seterusnya, untuk surat AZ. Anda mungkin bisa mengimplementasikannya dalam bentuk loop FOR.

DednDave
sumber
1

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.

Kevin Haines
sumber
1

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
Bahkan Mien
sumber
1

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.

ubiquibacon
sumber
1

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 renameperintah 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 moveberfungsi jika renametidak, 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 Movebisa 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 ….

Adrian
sumber
Jika Anda akan memposting ulang informasi yang sudah diposkan orang lain, Anda harus mengidentifikasi penulis asli dan menautkan ke posting mereka.
Scott
Maaf, tapi aku menunjukkan bahwa movebekerja di mana renametidak, dan saya pikir saya satu-satunya yang telah menyarankan penggunaan moveperintah di sini. Saya hanya mengambil saran @loftysnake dan @snyny, dan semoga sedikit memperbaikinya.
Adrian
Itu aneh; Saya pikir orang lain telah menyebutkan move, tetapi saya tidak dapat menemukannya sekarang.
Scott
0

Solusi rekursif. Masukkan ini ke file 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
)
Mick
sumber