Quale comando posso usare per rinominare in modo ricorsivo o spostare un file in Windows?


Risposte:


56

Usa il forcomando di XP . Ad esempio dalla riga di comando (in un file batch utilizzare %%xinvece) 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

Questa è di gran lunga la soluzione più semplice, grazie mille!
— javamonkey79,

Per utilizzare il comando FOR in un programma batch, specificare la variabile %% anziché la variabile%.
— Tom Robinson,

Come si fa a farlo in una directory di origine diversa senza cwd'ing?
— Evan Carroll,

Sto cercando di utilizzare questo per sostituire ogni file '% 20' in ogni file con un semplice ''. Come faccio a fare questo?
— Mike Warren,

@RobKam, in realtà eseguo il ciclo for per funzionare ma rinomina solo 1 file .. come posso impostare il carattere jolly per riconoscere che funzioneranno più estensioni di file *.*?
— 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).

2

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.

Sto davvero cercando una ridenominazione ricorsiva, mi dispiace di aver incluso la mossa come parte della domanda.
— javamonkey79,

1

Il comando XCOPY integrato è vicino. Farà una copia ricorsiva, ma non credo che supporti la ridenominazione.


1
non dimenticare che xcopy ignorerà i file nascosti per impostazione predefinita.
— Richard Harrison,

1
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 %


%% è necessario solo per i file batch.
— paradroid



1

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.vbse 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

0

Utilizzare un semplice comando DOS.

  1. cd nella directory di origine in cui si desidera rinominare le estensioni dei file in modo ricorsivo.

  2. Digita questo comando:

    ren *.[CurrentFileExtension] *.[DesiredFileExtension]
    

1
Funziona bene per la CWD, ma non per le sottodirectory, quindi non è ricorsivo. Grazie comunque :)
— javamonkey79,

0

Ho aggiunto if existper 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

1
Invece di creare una nuova risposta, devi semplicemente modificare la risposta a cui hai aggiunto.
— LostBalloon,

0

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") }


0

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)

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

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 :)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.