Perintah mana yang bisa saya gunakan untuk secara berulang mengubah nama atau memindahkan file di Windows?

40

Perintah apa di Windows yang mengemulasi perintah pindah / ganti nama rekursif dari Unix?

javamonkey79
sumber

Jawaban:

56

Gunakan forperintah XP . Misalnya dari baris perintah (dalam penggunaan file batch %%xsebagai gantinya) untuk melakukan langkah rekursif lakukan:

for /r %x in (foo) do move "%x" "drive:\path\bar"

Untuk melakukan pengubahan nama secara rekursif, lakukan:

for /r %x in (*.c) do ren "%x" *.cpp

Batch contoh:

for /r "< DIR >" %%x in (*.c) do ren "%%x" *.cpp
Rob Kam
sumber
Sejauh ini ini adalah solusi paling sederhana, terima kasih banyak!
javamonkey79
Untuk menggunakan perintah FOR dalam program batch, tentukan %% variabel daripada% variabel.
Tom Robinson
Bagaimana Anda melakukan ini ke direktori sumber yang berbeda tanpa cwd'ing?
Evan Carroll
Saya mencoba menggunakan ini untuk mengganti setiap file '% 20' di setiap file dengan polos ''. Bagaimana saya melakukan ini?
Mike Warren
@RobKam, saya benar-benar menjalankan loop untuk bekerja tetapi hanya mengganti nama 1 file .. bagaimana cara mengatur wild card untuk mengenali beberapa ekstensi file akan *.*berfungsi?
DJ KRAZE
3

robocopy "C:\Source Folder" "C:\Destination Folder" /E /COPYALL /XJ


Description of parameters:
/E - copy subdirectories, including Empty ones (/S to exclude empty ones)
/COPYALL - COPY ALL file info (equivalent to /COPY:DATSOU)
/XJ - eXclude Junction points and symbolic links. (normally included by default).
Lance Miller
sumber
2

Saya hanya menjalankan contoh kecil di kotak Windows XP SP2 saya dengan perintah pindah dan itu berhasil. Semua file dan direktori dipindahkan dari sumber ke dest. source dan dest adalah nama direktori.

pindahkan sumber dest
ver

Microsoft Windows XP [Versi 5.1.2600]
pindah /?

Memindahkan file dan mengganti nama file dan direktori.

Untuk memindahkan satu atau lebih file:
PINDAHKAN [/ Y | / -Y] [drive:] [path] filename1 [, ...] tujuan

Untuk mengganti nama direktori:
PINDAHKAN [/ Y | / -Y] [drive:] [path] dirname1 dirname2

  [drive:] [path] filename1 Menentukan lokasi dan nama file
                          atau file yang ingin Anda pindahkan.
  destination Menentukan lokasi baru file. Tujuan
                          dapat terdiri dari huruf drive dan titik dua, a
                          nama direktori, atau kombinasi. Jika Anda bergerak
                          hanya satu file, Anda juga dapat memasukkan nama file jika
                          Anda ingin mengganti nama file saat Anda memindahkannya.
  [drive:] [path] dirname1 Menentukan direktori yang ingin Anda ganti namanya.
  dirname2 Menentukan nama baru direktori.

  / Y Menekan bisikan untuk mengonfirmasi bahwa Anda ingin
                          menimpa file tujuan yang ada.
  / -Y Penyebab diminta untuk mengkonfirmasi Anda ingin menimpa
                          file tujuan yang ada.

Switch / Y dapat hadir dalam variabel lingkungan COPYCMD.
Ini mungkin ditimpa dengan / -Y pada baris perintah. Defaultnya adalah
untuk meminta overwrites kecuali perintah MOVE dijalankan
dalam skrip batch.
Jorge Ferreira
sumber
Saya benar-benar mencari nama rekursif, maaf saya memasukkan langkah sebagai bagian dari pertanyaan.
javamonkey79
1

Perintah XCOPY bawaan sudah dekat. Itu akan melakukan salinan rekursif, tapi saya tidak berpikir itu mendukung penggantian nama.


sumber
1
jangan lupa bahwa xcopy akan mengabaikan file tersembunyi secara default.
Richard Harrison
1
for /r %%x in (%1) do ren "%%x" %2

ini akan mengganti nama file secara rekursif :-)

simpan dalam file berikan 2 argumen dari ekstensi dan ke ekstensi.

mis: nama file adalah perintah test.bat: test * .avi * .bmp

itu mengganti nama semua file dengan ekstensi avi ke bmp (di semua subfolder :))

Catatan: Ini adalah koreksi untuk posting yang dijawab 26 Okt pukul 13:20 oleh Rob Kam. Dia memberi untuk

/r %x in (*.c) do ren "%x" *.cpp

di mana seperti itu harus %% bukan %


sumber
%% diperlukan hanya untuk file batch.
paradroid
1

Saya telah membuat VB Script yang akan melakukan pencarian dan mengganti nama direktori ... Saya juga memiliki versi file, namun, saya pikir ini sudah cukup untuk Anda mulai dengan skrip Anda sendiri. Cara saya menggunakan skrip ini adalah saya punya fileandreplacedirs.vbs, dan meletakkannya di folder yang sama dengan folder yang ingin saya rename. Selain itu, tidak harus berulang ke folder, tetapi bisa dengan sedikit modifikasi

search1  = InputBox("Search for...", "", "")
replace1 = InputBox("replace with...", "", "")

Dim MyFile
MyFiles = GetFileArray(".")

For Each MyFile In MyFiles
    NewFilename = Replace(MyFile.Name, search1, replace1)
    If InStr( MyFile.Name, search1 ) Then MyFile.Name = NewFilename
Next

MsgBox "Done..."

function GetFileArray(ByVal vPath)
    'Get our objects...
    Set FSO = CreateObject("Scripting.FileSystemObject")
    Set Folder = FSO.Getfolder(vPath)
    Set Files = Folder.SubFolders

    'Resize the local array
    'Arrays are 0 based but Files collection is 1 based.
    if Files.count = 0 then
        GetFileArray = array()
        Exit Function
    Else
        Index = 0
        Redim FileList(Files.Count-1)
        For Each File In Files
            set FileList(Index) = File
            Index = Index + 1
        Next
        GetFileArray = FileList
    End If

    'Always good practice to explicitly release objects...
    Set FSO = Nothing
    Set Folder = Nothing
    Set Files = Nothing

End function
Roy Rico
sumber
0

Gunakan perintah DOS sederhana.

  1. cd ke direktori sumber tempat Anda ingin mengganti nama ekstensi file secara rekursif.

  2. Ketikkan perintah ini:

    ren *.[CurrentFileExtension] *.[DesiredFileExtension]
    
Taji
sumber
1
Itu berfungsi dengan baik untuk cwd, tetapi tidak subdirektori, sehingga tidak rekursif. Terima kasih :)
javamonkey79
0

Saya menambahkan if existuntuk menghindari pengembalian kesalahan (itu penting di Jenkins sehingga tidak merusak build) ketika file tidak ada di setiap folder:

for /r %x in (foo) do if exist "%x" move "%x" "drive:\path\bar"

Untuk melakukan pengubahan nama secara rekursif, lakukan:

for /r %x in (*.c) do if exist "%x" ren "%x" *.cpp

Batch contoh:

for /r "< DIR >" %%x in (*.c) do if exist "%%x" ren "%%x" *.cpp
Akira Yamamoto
sumber
1
Alih-alih membuat jawaban baru, Anda harus mengedit jawaban yang sudah Anda tambahkan.
LostBalloon
0

Powershell adalah temanmu. Tidak perlu file batch atau skrip. Misalnya, untuk mengubah nama file .tiff menjadi .tif di direktori jauh secara berulang, Anda dapat menjalankan perintah berikut dari Powershell:

get-childitem "\\\servername\d$\path" -recurse -Include *.tiff | Rename-Item -NewName { $_.Name.replace(".tiff",".tif") }

Reba
sumber
0

Saya menemukan skrip python ini yang berfungsi juga:

for root, dirs, files in os.walk(cur_dir):  
    for filename in files:  
        file_ext = os.path.splitext(filename)[1]  
        if old_ext == file_ext:  
            oldname = os.path.join(root, filename)  
            newname = oldname.replace(old_ext, new_ext)  
            os.rename(oldname, newname)

Ditemukan di: http://gomputor.wordpress.com/2008/09/29/change-the-extension-of-multiple-files-in-a-chosen-directory-with-python/

Saya menambahkan Python ke jalur saya dan meletakkan skrip Python di atas dalam folder 'utils'. Saya kemudian membuat skrip kumpulan sederhana ini untuk menjalankannya: rn.bat:

python \utils\rn.py %1 %2 %3

Saya juga memperbarui skrip python di atas untuk mengambil argumennya dari baris perintah. rn.py:

import sys
import os

cur_dir = sys.argv[1]
old_ext = sys.argv[2]
new_ext = sys.argv[3]

#print cur_dir, old_ext, new_ext
for root, dirs, files in os.walk(cur_dir):  
    for filename in files:  
        file_ext = os.path.splitext(filename)[1]

        if old_ext == file_ext:  
            oldname = os.path.join(root, filename)  
            newname = oldname.replace(old_ext, new_ext)  
            os.rename(oldname, newname)

Akhirnya semua yang perlu dilakukan sekarang adalah sesuatu seperti ini:

>rn . .foo .bar

atau

>rn \ .exe .txt

Bersenang-senang dengan yang kedua :)

javamonkey79
sumber