Bagaimana saya bisa mengubah nama file secara massal?

119

Saya punya banyak file dengan pola 99 - DescriptiveName.txt Dan saya ingin menghapus nomor dari depan jadi saya hanya perlu DescriptiveName.txt.

Bagaimana saya bisa melakukan ini? Bisakah saya melakukannya dari baris perintah atau apakah ada utilitas yang dapat melakukan ini?

CodeSlave
sumber

Jawaban:

93

Saya tahu dalam judul Anda Anda mengatakan "dalam dos" tetapi saya mendapat kesan Anda hanya mencari cara untuk melakukan ini dan bertanya-tanya apakah itu cara terbaik.

Alat terbaik mutlak yang saya temukan untuk ini adalah Utilitas Ubah Nama Massal .

Bulk Rename Utility

Itu bukan alat baris perintah, tetapi mereka memiliki versi baris perintah jika Anda benar-benar ingin menggunakannya dengan cara itu.

Saya sudah sering menggunakan versi GUI, dan sangat kuat, sangat cepat dan sangat mudah digunakan.

Oh, benar BEBAS untuk penggunaan pribadi.

Jim McKeeth
sumber
Sayangnya alat ini tidak gratis untuk penggunaan komersial :(
AntonK
Itu sebabnya saya mengatakan itu gratis untuk penggunaan pribadi.
Jim McKeeth
1
Ini adalah alat super cepat. Ini memecahkan masalah 6.000 file saya dalam hitungan detik, menggunakan beberapa pencarian dan ganti logika. Ini seperti menggunakan Notepad ++ tetapi mengedit ribuan file. Solusi yang bagus, terima kasih!
Peanuts
55

Skrip PowerShell kecil:

$args | Rename-Item -NewName { $_.Name.ToLower() -replace '\d+ - ' }

Dikombinasikan dengan ekspresi reguler yang lebih kompleks, ini mungkin menjadi sesuatu seperti:

ls | Rename-Item -NewName {$_ -replace '(\d+) - (.*).mp3', '$2 - $1.mp3' }

Yang mengubah hal-hal seperti '01 - Beginning.mp3 'menjadi' Beginning - 01.mp3 '.

Menggunakan -WhatIf parameter aktif Rename-Item untuk memeriksa nama sebelum Anda mengeluarkannya.

sysrqb
sumber
1
@sysrqb, silakan riset sedikit lagi.
Joey
Apakah penggantian tidak memerlukan dua ekspresi string? Yang kedua memiliki dua, yang pertama tidak. ... -replace '\d+ - ',''. Juga, saya percaya yang pertama lebih baik, cukup menanggalkan awal menggunakan regex. Meskipun saya percaya Anda harus menyertakan jangkar ^ di awal ekspresi sehingga hanya cocok dengan nama yang dimulai dengan angka.
Xalorous
1
@Xororous: Ya, Anda bisa mencobanya. -replace dapat memiliki hanya satu argumen di sisi kanan, dalam hal yang kedua secara implisit adalah string kosong.
Joey
Ini menyelamatkan saya .. Bulk Rename Utility baru saja crash sekarang dan saya mencoba banyak solusi lainnya. Ini jauh lebih baik bagi orang-orang yang nyaman dengan regexp. Terima kasih banyak !!
Inkh Su Tesou
24

Jika Anda benar-benar ingin menggunakan baris perintah windows (jika Anda tidak ingin mengunduh sesuatu), Anda dapat melakukannya seperti ini:

dir /B > fileList.txt
for /f "tokens=1,2,3" %i in (fileList.txt) DO ren "%i %j %l" %l

Baris pertama menampilkan daftar file ke file bernama fileList.txt. Baris kedua memisahkan masing-masing nama dalam daftar menjadi 3 bagian, #, "-" dan sisa nama. Untuk masing-masing dari mereka melakukan perintah ganti nama.

zdan
sumber
2
Hapus baris pertama untuk menyederhanakannya dan lakukan: for /f "tokens=1,2,3" %i in ('dir /B') DO ren "%i %j %l" %l
Saya tahu ini sudah lama tetapi masih merupakan jawaban yang solid - hanya% l (% L) yang harus% k (% K) [peningkatan token dari% i (% I) jadi saya, J, K ...]
ongle
24

Ant Renamer membuatnya cukup mudah untuk menentukan pola penggantian nama; ada banyak yang sudah disiapkan (dan memberikan preview tindakan):

AntRenamer

Gratis untuk penggunaan pribadi dan komersial.

Gnoupi
sumber
19

sekolah tua:

Anda dapat melakukan DIR dan mengarahkan output ke file, seperti pada DIR * .TXT & gt; TEMP.BAT

Kemudian gunakan editor untuk mengambil apa yang tidak Anda butuhkan dan memodifikasi bagian yang Anda butuhkan. Tambahkan "@echo off" sebagai baris teratas, simpan dan jalankan.

WireGuy
sumber
Saya mendapat referensi halaman ini dari seorang doktor sekolah tua dalam hal ini: dostips.com/DosCommandIndex.htm ; Sungguh menakjubkan apa yang dapat Anda lakukan dengan DOS lama (bagus?)!
nik
16

Pilihan lain: Pembuat File Massive

Ini memungkinkan untuk dengan mudah ganti nama berganda file dan ekstensi file . Ini sangat cepat dan sederhana!

Untuk pengguna dan pengembang tingkat lanjut, dimungkinkan untuk digunakan ekspresi reguler .

Lihat dalam aksi:

enter image description here

IvanRF
sumber
1
Bagaimana cara kita memilihnya untuk membuka semua file di dalam subfolder? Saya punya folder root dengan sekitar 50 subfolder (secara rekursif) dan beberapa file di dalamnya.
Pacerier
1
@Pacerier Saya pikir pemilih file Java tidak mengizinkan itu. Saya punya ide untuk memungkinkan memilih folder dan pencarian rekursif dapat dimasukkan. Saya akan mencatatnya dan menambahkannya di rilis mendatang!
IvanRF
13

saya menggunakan Komandan Total Alat multi-ganti nama (ctrl + M) untuk hal-hal seperti ini. Alat bermanfaat mereka, salah satu dari terlalu banyak untuk dihitung, mudah digunakan, dan juga dapat menggunakan ekspresi dan templat reguler jika perlu. Oh, dan itu jelas memberi Anda pratinjau sebelum melakukan perubahan.

Ini adalah pertanyaan ketiga atau keempat yang saya jawab merekomendasikan Total Commander ... Saya harus mendapat komisi dari mereka ;-)

Yuval
sumber
11

Alat yang saya puasi adalah ReNamer . Ini juga mendukung penghematan aturan penggantian nama, yang bermanfaat bagi saya, karena saya berkali-kali melakukan penggantian nama yang sama.

Di bawah ini adalah contoh cara menghapus teks sebelum tanda hubung pertama, tetapi ada banyak aturan lain yang dapat Anda tetapkan.

enter image description here

Esko Luontola
sumber
5

Saya sudah menggunakan Komandan Gratis Portable (freeware) agar ini berfungsi:

  1. Pilih atau Navigasikan ke file atau direktori untuk diubah namanya
  2. Tekan [Ctrl-M] (atau File & gt; Multi-rename)
  3. isi bidang yang masuk akal untuk keadaan Anda
  4. verifikasi pratinjau menunjukkan apa yang Anda harapkan
  5. Pergi!
matt wilkie
sumber
4

Untuk pengguna dan pengembang tingkat lanjut, saya sarankan RegexRenamer .

RegexRenamer screenshot

Pro:

  • UI yang sangat sederhana;
  • Ekspresi reguler yang akrab dengan pengembang;
  • GPLv2;

Con's:

  • Itu bukan baris perintah! :)
bytebuster
sumber
Tidak dapat membuatnya berfungsi secara rekursif untuk semua subfolder dari folder yang dipilih!
Luckylooke
3

Ini a garis komando solusi --- program Java yang saya tulis khusus untuk membuatnya mudah untuk bekerja dengan "pola" dalam nama file. Ini gratis dan open source, jadi jangan ragu untuk memodifikasinya:

RenameWand
http://renamewand.sourceforge.net/

Beberapa contoh penggunaan yang relevan:

Jatuhkan semuanya sebelum "-" dalam nama file:

java -jar RenameWand.jar  "<a> - <b>"  "<b>"

Tambahkan nomor 3 digit ke nama file, urutkan berdasarkan waktu yang terakhir diubah:

java -jar RenameWand.jar  "<a>"  "<3|#FT> <a>"

Atur ulang bagian nama file, dan ubah huruf besar-kecil:

java -jar RenameWand.jar  "<album> - <artist> - <song>.<ext>" 
                          "<artist.upper> <album.title> - <song>.<ext.lower>"
Zach Scrivena
sumber
3

saya menemukan RenPhoric sekitar sebulan yang lalu. Hebat. Dan itu bebas .

Tidak ada antarmuka yang rumit dan saya dengan cepat dapat mengubah nama persis seperti yang saya inginkan. Ekspresi Reguler mampu. Belum menggunakan hal lain sejak itu.

Umber Ferrule
sumber
2

Saya suka Cylog WildRename . Ini kuat, namun mudah digunakan, dan memiliki banyak fitur:

  1. cepat
  2. manipulasi string
  3. counter
  4. wildcard
  5. ekspresi reguler
  6. pengganti
  7. konversi kasus
  8. logging
  9. simulasi (tampilkan hasilnya tanpa benar-benar menerapkannya)

enter image description here

Synetech
sumber
2

Seperti @zdan di atas, saya melakukan ini dengan command line (menggunakan "cmd.exe" di Windows). Butuh waktu untuk mengutak-atik kasus khusus saya, tetapi sedikit penelitian menyelesaikannya.

Seperti zdan, saya menampilkan daftar ke file TXT, lalu digunakan tokens dan delims untuk mengubah nama file sesuai. Dalam kasus saya, saya mulai dengan daftar file bernama seperti ini:

name-01-02-2012.csv

Saya ingin bagian tanggal file berada dalam urutan y / m / d, dengan bagian "nama" di bagian akhir sehingga akan terbaca seperti ini:

2012-01-02-name.csv

Untuk melakukan ini secara massal, saya menggunakan kode berikut. Perhatikan bahwa ketika melakukannya dengan cara ini, SEMUA bagian dari nama file dipertimbangkan, termasuk ekstensi ".csv". Itu membuat saya kesalahan pertama kali di sekitar.

dir /B > fileList.txt
for /f "tokens=1,2,3,4,5 delims=-." %i in (fileList.txt) DO ren "%i-%j-%k-%l.%m" %l-%j-%k-%i.%m

Itu tokens adalah "bagian" dari nama file, delims adalah pemisah. Perhatikan bahwa dalam kasus saya, saya memiliki 2 pembatas (tanda hubung dan tanda titik).

Saya pribadi tidak peduli dengan aplikasi "Ganti Nama Massal". Seperti yang disebutkan orang lain, GUI mengerikan dan tidak terlalu intuitif. Dengan sedikit riset dan pengkodean sederhana, hal-hal ini dapat dilakukan jauh lebih efisien dan cepat.

gtr1971
sumber
2

Nama lucu dan alat baris perintah sangat kuat, sangat cepat dan sangat mudah digunakan. "Temukan Dan Ganti Teks" FART http://fart-it.sourceforge.net/ BEKERJA HEBAT! dapat mengubah nama kata dalam file txt juga.

PEMAKAIAN

Usage: FART [options] [--] <wildcard>[,...] [find_string] [replace_string]

Options:
 -h --help          Show this help message (ignores other options)
 -q --quiet         Suppress output to stdio / stderr
 -V --verbose       Show more information
 -r --recursive     Process sub-folders recursively
 -c --count         Only show filenames, match counts and totals
 -i --ignore-case   Case insensitive text comparison
 -v --invert        Print lines NOT containing the find string
 -n --line-number   Print line number before each line (1-based)
 -w --word          Match whole word (uses C syntax, like grep)
 -f --filename      Find (and replace) filename instead of contents
 -B --binary        Also search (and replace) in binary files (CAUTION)
 -C --c-style       Allow C-style extended characters (\xFF\0\t\n\r\\ etc.)
    --cvs           Skip cvs dirs; execute "cvs edit" before changing files
 -a --adapt         Adapt the case of replace_string to found string
 -b --backup        Make a backup of each changed file
 -p --preview       Do not change the files but print the changes
slm
sumber
Lebih detail? Melakukannya ganti nama file ?
vonbrand
Iya nih, -f opsi, seperti yang tercantum.
user1016274
2
@echo off
setlocal enabledelayedexpansion
set X=5
set FOLDER_PATH=.
pushd %FOLDER_PATH%
for %%f in (*) do if %%f neq %~nx0 (
    set "filename=%%~nf"
    set "filename=!filename:~%X%!"
    ren "%%f" "!filename!%%~xf"
)
popd

simpan ini dalam file batch dan jalankan

bbm123
sumber
Ini bagus, tapi bagaimana saya bisa membuat variabel X sebagai (lulus sebagai parameter)?
Kangkan
@Kangkan seperti ini: set /p "X=Enter the value for X: "
Kidquick
1

Saya menggunakan Papan Tulis untuk menyelenggarakan kursus di suatu Universitas. Ketika saya mengunduh tugas secara massal (di Blackboard, klik bagian atas kolom penilaian, lalu "assign file file" Blackboard menambahkan banyak hal tambahan ke nama file -sering membuat nama file terlalu lama untuk valid pada Windows.

Seperti apa bentuknya:

Recitation20Assignment_studentname_attempt_2013-03-01-20-03-09_Exercise28129.docx

Dan inilah yang saya inginkan

studentname.docx

Jadi saya menggunakan pendekatan yang disarankan oleh @zdan dan @ gtr1971, dengan membuka jendela perintah pada folder dengan file di dalamnya (CMD.EXE). Kemudian jalankan perintah ini untuk memasukkan semua nama file dalam dokumen.

dir /b >filelist.txt

Edit dokumen dan hapus nama folder, dll.

Gunakan perintah ini untuk mengganti Blackboard menambahkan nama file hanya dengan nama pengguna dan ekstensi file.

for /f "tokens=1,2,3,4,5,6 delims=_." %i in (filelist.txt) do ren "%i _%j_%k_%l_%m.%n" %j.%n

Semoga ini bisa membantu orang lain juga.

Webmentorman
sumber
1

Saya telah mengembangkan utilitas JScript / batch command line hybrid yang disebut JREN.BAT yang dapat mengganti nama file atau folder dengan melakukan pencarian ekspresi reguler dan mengganti namanya. Ini adalah skrip murni yang akan berjalan secara asli pada mesin Windows apa pun dari XP ke depan. Dokumentasi lengkap tertanam dalam skrip.

Dengan asumsi JREN.BAT ada di direktori Anda saat ini, atau lebih baik lagi, di suatu tempat dalam jalur Anda, maka tugas mengubah nama Anda menjadi sepele.

jren "^\d+[ -]+(.+)\.txt$" "$1" /i

atau

jren "^\d+[ -]+(?=.+\.)" "" /fm "*.txt"

Ada banyak opsi, termasuk /S opsi yang secara rekursif melakukan penggantian nama pada sub-direktori.

dbenham
sumber
0

Jika Anda membutuhkan kekuatan serius dan bersedia mengeluarkan uang ... PowerGrep adalah salah satu alat paling kuat dan serbaguna di pasar ... Anda dapat mengubah nama hampir semua hal dengan PowerGrep ... bahkan pencarian biner dan ganti ... itu diciptakan oleh RegEx Guru, Jan Goyvaerts .

enter image description here

Eddie B
sumber
Utilitas ini sangat mahal ...
Wizard79
Anda dapat menggunakannya gratis tanpa batas waktu ... namun, nilainya ... saya menggunakannya setiap saat.
Eddie B