Welcher Befehl in Windows emuliert den rekursiven Befehl zum Verschieben / Umbenennen von Unix?
Welcher Befehl in Windows emuliert den rekursiven Befehl zum Verschieben / Umbenennen von Unix?
Antworten:
Verwenden Sie den for
Befehl von XP . Zum Beispiel über die Befehlszeile (in einer Batch-Datei verwenden Sie %%x
stattdessen), um eine rekursive Verschiebung durchzuführen, gehen Sie wie folgt vor :
for /r %x in (foo) do move "%x" "drive:\path\bar"
So führen Sie eine rekursive Umbenennung durch:
for /r %x in (*.c) do ren "%x" *.cpp
Beispielcharge:
for /r "< DIR >" %%x in (*.c) do ren "%%x" *.cpp
*.*
funktionieren?
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).
Ich habe gerade ein kleines Beispiel in meiner Windows XP SP2-Box mit dem Befehl move ausgeführt und es hat funktioniert. Alle Dateien und Verzeichnisse wurden von der Quelle zum Ziel verschoben. source und dest sind Verzeichnisnamen.
Quellenziel verschieben
ver Microsoft Windows XP [Version 5.1.2600]
Bewegung /? Verschiebt Dateien und benennt Dateien und Verzeichnisse um. So verschieben Sie eine oder mehrere Dateien: MOVE [/ Y | / -Y] [Laufwerk:] [Pfad] Dateiname1 [, ...] Ziel So benennen Sie ein Verzeichnis um: MOVE [/ Y | / -Y] [Laufwerk:] [Pfad] Verzeichnisname1 Verzeichnisname2 [Laufwerk:] [Pfad] Dateiname1 Gibt den Speicherort und den Namen der Datei an oder Dateien, die Sie verschieben möchten. Ziel Gibt den neuen Speicherort der Datei an. Ziel kann aus einem Laufwerksbuchstaben und einem Doppelpunkt bestehen Verzeichnisname oder eine Kombination. Wenn Sie umziehen Nur eine Datei, Sie können auch einen Dateinamen einfügen, wenn Sie möchten die Datei beim Verschieben umbenennen. [Laufwerk:] [Pfad] Verzeichnisname1 Gibt das Verzeichnis an, das Sie umbenennen möchten. dirname2 Gibt den neuen Namen des Verzeichnisses an. / Y Unterdrückt die Aufforderung zur Bestätigung Überschreiben einer vorhandenen Zieldatei. / -Y Verursacht die Aufforderung zum Bestätigen des Überschreibens eine vorhandene Zieldatei. Der Schalter / Y kann in der Umgebungsvariablen COPYCMD vorhanden sein. Dies kann mit / -Y in der Befehlszeile überschrieben werden. Standard ist um zum Überschreiben aufzufordern, es sei denn, der Befehl MOVE wird ausgeführt von innerhalb eines Batch-Skripts.
Der integrierte XCOPY-Befehl ist geschlossen. Es wird eine rekursive Kopie erstellt, aber ich glaube nicht, dass es das Umbenennen unterstützt.
for /r %%x in (%1) do ren "%%x" %2
das wird die Datei rekursiv umbenennen :-)
Speichern Sie in einer Datei und geben Sie 2 Argumente von der Erweiterung bis zur Erweiterung an.
Beispiel: Dateiname ist test.bat Befehl: test * .avi * .bmp
benennt alle Dateien mit der Endung avi in bmp um (in allen Unterordnern :))
Hinweis: Dies ist eine Korrektur für den Beitrag, der am 26. Oktober um 13:20 von Rob Kam beantwortet wurde. Er gab für
/r %x in (*.c) do ren "%x" *.cpp
wo wie es hieß %% statt %
Das hat bei mir besser funktioniert:
FOR /R "C:\folder1\folder2\" %i in (.,*) DO MOVE /Y "%i" "C:\folder1\"
Quelle: http://www.islamadel.com/index.php/notes/6-computer/10-windows-command-line
Für die meisten UNIX-Befehle gibt es Windows-Ports:
Ich habe ein VB-Skript erstellt, das nach Verzeichnisnamen sucht und diese ersetzt. Ich habe auch eine Dateiversion. Ich denke jedoch, dass dies ausreicht, um mit Ihrem eigenen Skript zu beginnen. Die Art und Weise, wie ich dieses Skript verwende, ist, dass ich ein habe fileandreplacedirs.vbs
und es in denselben Ordner lege wie die Ordner, die ich umbenennen möchte. Außerdem muss es nicht unbedingt in den Ordner zurückkehren, könnte aber mit einer kleinen Modifikation
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
Verwenden Sie einen einfachen DOS-Befehl.
Wechseln Sie in das Quellverzeichnis, in dem Sie die Dateierweiterungen rekursiv umbenennen möchten.
Geben Sie diesen Befehl ein:
ren *.[CurrentFileExtension] *.[DesiredFileExtension]
Ich habe hinzugefügt if exist
, um Fehlerrückgaben zu vermeiden (dies ist in Jenkins wichtig, damit kein Build unterbrochen wird), wenn die Datei nicht in jedem Ordner vorhanden ist:
for /r %x in (foo) do if exist "%x" move "%x" "drive:\path\bar"
So führen Sie eine rekursive Umbenennung durch:
for /r %x in (*.c) do if exist "%x" ren "%x" *.cpp
Beispielcharge:
for /r "< DIR >" %%x in (*.c) do if exist "%%x" ren "%%x" *.cpp
Powershell ist dein Freund. Keine Batch-Dateien oder Skripte erforderlich. Um beispielsweise alle .tiff-Dateien in einem Remote-Verzeichnis rekursiv in .tif umzubenennen, können Sie in Powershell den folgenden Befehl ausführen:
get-childitem "\\\servername\d$\path" -recurse -Include *.tiff | Rename-Item -NewName {
$_.Name.replace(".tiff",".tif") }
Ich habe dieses Python-Skript gefunden, das auch funktioniert:
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)
Gefunden unter: http://gomputor.wordpress.com/2008/09/29/change-the-extension-of-multiple-files-in-a-chosen-directory-with-python/
Ich habe meinem Pfad Python hinzugefügt und das Python-Skript oben in einen 'utils'-Ordner gestellt. Ich habe dann dieses einfache Batch-Skript erstellt, um es auszuführen: rn.bat:
python \utils\rn.py %1 %2 %3
Ich habe auch das Python-Skript oben aktualisiert, um die Argumente von der Befehlszeile zu übernehmen. 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)
Schließlich muss man jetzt nur noch so etwas tun:
>rn . .foo .bar
oder
>rn \ .exe .txt
Viel Spaß mit dem zweiten :)