Quelle commande sous Windows émule la commande récursive move / rename d’Unix?
Quelle commande sous Windows émule la commande récursive move / rename d’Unix?
Réponses:
Utilisez la for
commande de XP . Par exemple, à partir de la ligne de commande (utilisez %%x
plutôt un fichier de commandes ) 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
*.*
fonctionnera?
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 d'exécuter un petit exemple dans ma boîte Windows XP SP2 avec la commande move et cela 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
ver Microsoft Windows XP [Version 5.1.2600]
bouge toi /? Déplace les fichiers et renomme les fichiers et les répertoires. Pour déplacer un ou plusieurs fichiers: DÉMÉNAGER [/ Y | / -Y] [lecteur:] [chemin] nom_fichier1 [, ...] destination Pour renommer un répertoire: DÉMÉNAGER [/ Y | / -Y] [lecteur:] [chemin] dirname1 dirname2 [lecteur:] [chemin] nom_fichier1 Spécifie l'emplacement et le nom du fichier. ou les fichiers que vous souhaitez déplacer. destination Spécifie le nouvel emplacement du fichier. Destination peut consister en une lettre de lecteur et deux points, un nom du répertoire ou une combinaison. Si vous déménagez 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 pour confirmer que vous souhaitez écraser un fichier de destination existant. / -Y Provoque l’incitation à confirmer que vous souhaitez écraser un fichier de destination existant. Le commutateur / Y peut être présent dans la variable d’environnement COPYCMD. Cela peut être annulé avec / -Y sur la ligne de commande. La valeur par défaut est pour inviter les écrasements à moins que la commande MOVE ne soit exécutée 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.
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 %
Cela a mieux fonctionné pour moi:
FOR /R "C:\folder1\folder2\" %i in (.,*) DO MOVE /Y "%i" "C:\folder1\"
Source: http://www.islamadel.com/index.php/notes/6-computer/10-windows-command-line
Il existe des ports Windows pour la plupart des commandes UNIX:
J'ai créé un script VB qui effectuera une recherche et remplacera les noms de répertoires ... J'ai aussi une version de fichier, mais je pense que cela suffit pour vous permettre de démarrer avec votre propre script. La façon dont j'utilise ce script est que j'ai fileandreplacedirs.vbs
, et le place dans le même dossier que les dossiers que je veux 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
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]
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
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 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é à l' adresse : 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 :)