Quale comando di Windows emula il comando ricorsivo sposta / rinomina da Unix?
Quale comando di Windows emula il comando ricorsivo sposta / rinomina da Unix?
Risposte:
Usa il for
comando di XP . Ad esempio dalla riga di comando (in un file batch utilizzare %%x
invece) per eseguire uno spostamento ricorsivo:
for /r %x in (foo) do move "%x" "drive:\path\bar"
Per fare una ridenominazione ricorsiva, fare:
for /r %x in (*.c) do ren "%x" *.cpp
Lotto di esempio:
for /r "< DIR >" %%x in (*.c) do ren "%%x" *.cpp
*.*
?
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).
Ho appena eseguito un piccolo esempio nella mia casella di Windows XP SP2 con il comando move e ha funzionato. Tutti i file e le directory sono stati spostati dal sorgente al dest. source e dest sono nomi di directory.
sposta sorgente dest
ver Microsoft Windows XP [Versione 5.1.2600]
mossa /? Sposta i file e rinomina file e directory. Per spostare uno o più file: SPOSTA [/ Y | / -Y] [unità:] [percorso] nomefile1 [, ...] destinazione Per rinominare una directory: SPOSTA [/ Y | / -Y] [drive:] [percorso] dirname1 dirname2 [unità:] [percorso] nomefile1 Specifica la posizione e il nome del file o file che si desidera spostare. destinazione Specifica la nuova posizione del file. Destinazione può essere costituito da una lettera di unità e due punti, a nome della directory o una combinazione. Se ti stai muovendo solo un file, puoi anche includere un nome file se vuoi rinominare il file quando lo sposti. [unità:] [percorso] dirname1 Specifica la directory che si desidera rinominare. dirname2 Specifica il nuovo nome della directory. / Y Elimina la richiesta di conferma sovrascrivere un file di destinazione esistente. / -Y Fa sì che venga richiesto di confermare la sovrascrittura un file di destinazione esistente. L'opzione / Y può essere presente nella variabile d'ambiente COPYCMD. Questo può essere sovrascritto con / -Y sulla riga di comando. L'impostazione predefinita è per richiedere la sovrascrittura a meno che non venga eseguito il comando MOVE all'interno di uno script batch.
Il comando XCOPY integrato è vicino. Farà una copia ricorsiva, ma non credo che supporti la ridenominazione.
for /r %%x in (%1) do ren "%%x" %2
questo rinominerà il file in modo ricorsivo :-)
salvare in un file dare 2 argomenti dall'estensione e all'estensione.
es: il nome del file è comando test.bat: test * .avi * .bmp
rinomina tutti i file con estensione avi in bmp (in tutte le sottocartelle :))
Nota: questa è la correzione per il post con risposta il 26 ottobre alle 13:20 di Rob Kam. Ha dato per
/r %x in (*.c) do ren "%x" *.cpp
dove come shud ha %% invece di %
Questo ha funzionato meglio per me:
FOR /R "C:\folder1\folder2\" %i in (.,*) DO MOVE /Y "%i" "C:\folder1\"
Fonte: http://www.islamadel.com/index.php/notes/6-computer/10-windows-command-line
Esistono porte Windows per la maggior parte dei comandi UNIX:
Ho creato uno script VB che eseguirà una ricerca e sostituirà i nomi di directory ... Ho anche una versione di file, tuttavia, penso che questo sia sufficiente per iniziare con il tuo script. Il modo in cui utilizzo questo script è che ne ho uno fileandreplacedirs.vbs
e lo inserisco nella stessa cartella delle cartelle che voglio rinominare. Inoltre, non si ricorre necessariamente alla cartella, ma potrebbe con una piccola modifica
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
Utilizzare un semplice comando DOS.
cd nella directory di origine in cui si desidera rinominare le estensioni dei file in modo ricorsivo.
Digita questo comando:
ren *.[CurrentFileExtension] *.[DesiredFileExtension]
Ho aggiunto if exist
per evitare ritorni di errori (è importante in Jenkins, quindi non rompe una build) quando il file non esiste in ogni cartella:
for /r %x in (foo) do if exist "%x" move "%x" "drive:\path\bar"
Per fare una ridenominazione ricorsiva, fare:
for /r %x in (*.c) do if exist "%x" ren "%x" *.cpp
Lotto di esempio:
for /r "< DIR >" %%x in (*.c) do if exist "%%x" ren "%%x" *.cpp
Powershell è tuo amico. Nessun file batch o script necessari. Ad esempio, per rinominare in modo ricorsivo tutti i file .tiff in .tif in una directory remota, è possibile eseguire il seguente comando da Powershell:
get-childitem "\\\servername\d$\path" -recurse -Include *.tiff | Rename-Item -NewName {
$_.Name.replace(".tiff",".tif") }
Ho trovato questo script Python che funziona anche:
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)
Ho aggiunto Python al mio percorso e ho inserito lo script Python sopra in una cartella 'utils'. Ho quindi creato questo semplice script batch per eseguirlo: rn.bat:
python \utils\rn.py %1 %2 %3
Ho anche aggiornato lo script Python sopra per prendere i suoi argomenti dalla riga di comando. 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)
Finalmente tutto ciò che bisogna fare ora è qualcosa del genere:
>rn . .foo .bar
o
>rn \ .exe .txt
Divertiti con il secondo :)