Perintah apa di Windows yang mengemulasi perintah pindah / ganti nama rekursif dari Unix?
Perintah apa di Windows yang mengemulasi perintah pindah / ganti nama rekursif dari Unix?
Jawaban:
Gunakan for
perintah XP . Misalnya dari baris perintah (dalam penggunaan file batch %%x
sebagai 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
*.*
berfungsi?
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).
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.
Perintah XCOPY bawaan sudah dekat. Itu akan melakukan salinan rekursif, tapi saya tidak berpikir itu mendukung penggantian nama.
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 %
Ini bekerja lebih baik untuk saya:
FOR /R "C:\folder1\folder2\" %i in (.,*) DO MOVE /Y "%i" "C:\folder1\"
Sumber: http://www.islamadel.com/index.php/notes/6-computer/10-windows-command-line
Ada port Windows untuk sebagian besar perintah UNIX:
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
Gunakan perintah DOS sederhana.
cd ke direktori sumber tempat Anda ingin mengganti nama ekstensi file secara rekursif.
Ketikkan perintah ini:
ren *.[CurrentFileExtension] *.[DesiredFileExtension]
Saya menambahkan if exist
untuk 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
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") }
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 :)