web-dev-qa-db-fra.com

Quelle commande puis-je utiliser pour renommer ou déplacer de manière récursive un fichier dans Windows?

Quelle commande sous Windows émule la commande récursive move/rename d’Unix?

39
javamonkey79

Utilisez la commande for de XP. Par exemple, à partir de la ligne de commande (dans un fichier de commandes, utilisez plutôt %%x) pour effectuer un déplacement récursif, procédez comme suit:

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

Pour faire un changement de nom récursif, faites:

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

Exemple de lot:

for /r "< DIR >" %%x in (*.c) do ren "%%x" *.cpp
55
Rob Kam

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).
3
Lance Miller

Je viens de lancer un petit exemple dans ma boîte Windows XP SP2 avec la commande move et tout a fonctionné. Tous les fichiers et répertoires ont été déplacés de la source vers la destination. source et dest sont des noms de répertoire.

 déplacer la destination source 
 contre 
 
 Microsoft Windows XP [Version 5.1.2600] 
 move /?[.____._rev[.____.unset Déplace les fichiers et les renomme. 
 
 Pour déplacer un ou plusieurs fichiers: 
 MOVE [/Y |/-Y] [lecteur:] [chemin] nom_fichier1 [ ...] destination 
 
 Pour renommer un répertoire: 
 MOVE [/ Y |/-Y] [lecteur:] [chemin] dirname1 dirname2 
 
 [Lecteur:] [chemin] nomfichier1 Spécifie l'emplacement et le nom du fichier 
 Ou des fichiers à déplacer. . 
 destination Spécifie le nouvel emplacement du fichier. La destination 
 Peut consister en une lettre de lecteur et deux points, un nom de répertoire 
 Ou une combinaison des deux. Si vous ne déplacez qu'un seul fichier 
, Vous pouvez également inclure un nom de fichier si 
 Vous souhaitez renommer le fichier lorsque vous le déplacez. 
 [Lecteur:] [chemin] dirname1 Spécifie le répertoire que vous souhaitez renommer. 
 dirname2 Spécifie le nouveau nom du répertoire. 
 
/Y Supprime l'invite à confirmer que vous souhaitez que 
 écrase un fichier de destination existant. . 
/-Y Provoque une invite à confirmer que vous souhaitez écraser 
 Un fichier de destination existant. 
 
 Le commutateur/Y peut être présent dans la variable d'environnement COPYCMD. 
 Ceci peut être remplacé par/-Y sur la ligne de commande. La valeur par défaut est 
 Pour demander des écrasements à moins que la commande MOVE ne soit exécutée à partir de 
 Dans un script batch. 
2
Jorge Ferreira

La commande XCOPY intégrée est fermée. Cela fera une copie récursive, mais je ne pense pas que cela supporte le changement de nom.

1
Clayton

J'ai créé un script VB qui effectuera une recherche et remplacera les noms de répertoire ... J'ai aussi une version des fichiers, mais je pense que cela suffit pour vous permettre de démarrer avec votre propre script. J'utilise ce script de la manière suivante: j'ai un fileandreplacedirs.vbs et le place dans le même dossier que les dossiers que je souhaite renommer. En outre, il ne rentre pas nécessairement dans le dossier, mais pourrait avec un peu de modification

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
1
Roy Rico
for /r %%x in (%1) do ren "%%x" %2

cela renommera le fichier récursivement :-)

enregistrer dans un fichier donne 2 arguments d’extension et d’extension.

ex: le nom du fichier est test.bat commande: test * .avi * .bmp

il renomme tous les fichiers avec l'extension avi en bmp (dans tous les sous-dossiers :))

Note: Ceci est une correction pour le message répondu le 26 octobre à 13h20 par Rob Kam. Il a donné pour

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

où il devrait avoir %% au lieu de %

1
satya

Il existe des ports Windows pour la plupart des commandes UNIX:

1
Orrin

J'ai trouvé ce script en python qui fonctionne aussi:

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)

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

J'ai ajouté Python à mon chemin et ai placé le script Python ci-dessus dans un dossier 'utils'. J'ai ensuite créé ce script batch simple pour l'exécuter: rn.bat:

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

J'ai également mis à jour le script python ci-dessus pour prendre ses arguments à partir de la ligne de commande. 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)

Enfin, tout ce qu’il faut faire maintenant ressemble à ceci:

>rn . .foo .bar

ou

>rn \ .exe .txt

Amusez-vous avec le second :)

0
javamonkey79

Utilisez une simple commande DOS.

  1. allez dans le répertoire source où vous souhaitez renommer les extensions de fichier de manière récursive.

  2. Tapez cette commande:

    ren *.[CurrentFileExtension] *.[DesiredFileExtension]
    
0
Madhu Kumar

Powershell est votre ami. Pas de fichiers de commandes ou de scripts nécessaires. Par exemple, pour renommer de manière récurrente tous les fichiers .tiff en .tif dans un répertoire distant, vous pouvez exécuter la commande suivante à partir de Powershell:

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

0
Reba

J'ai ajouté if exist pour éviter les retours d'erreur (c'est important dans Jenkins pour que ça ne casse pas une construction) quand le fichier n'existe pas dans tous les dossiers:

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

Pour faire un changement de nom récursif, faites:

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

Exemple de lot:

for /r "< DIR >" %%x in (*.c) do if exist "%%x" ren "%%x" *.cpp
0
Akira Yamamoto