Quelle commande sous Windows émule la commande récursive move/rename d’Unix?
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
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).
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.
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.
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
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 %
Il existe des ports Windows pour la plupart des commandes UNIX:
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)
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 :)
Utilisez une simple commande DOS.
allez dans le répertoire source où vous souhaitez renommer les extensions de fichier de manière récursive.
Tapez cette commande:
ren *.[CurrentFileExtension] *.[DesiredFileExtension]
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") }
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