¿Qué comando en Windows emula el comando recursivo mover / renombrar de Unix?
¿Qué comando en Windows emula el comando recursivo mover / renombrar de Unix?
Respuestas:
Usa el for
comando XP . Por ejemplo, desde la línea de comando (en su %%x
lugar, use un archivo por lotes ) para hacer un movimiento recursivo:
for /r %x in (foo) do move "%x" "drive:\path\bar"
Para hacer un cambio de nombre recursivo:
for /r %x in (*.c) do ren "%x" *.cpp
Ejemplo de lote:
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).
Acabo de ejecutar un pequeño ejemplo en mi cuadro de Windows XP SP2 con el comando mover y funcionó. Todos los archivos y directorios se movieron de origen a destino. fuente y dest son nombres de directorio.
mover origen dest
ver Microsoft Windows XP [Versión 5.1.2600]
mover /? Mueve archivos y renombra archivos y directorios. Para mover uno o más archivos: MOVER [/ Y | / -Y] [unidad:] [ruta] nombre de archivo1 [, ...] destino Para cambiar el nombre de un directorio: MOVER [/ Y | / -Y] [unidad:] [ruta] dirname1 dirname2 [unidad:] [ruta] filename1 Especifica la ubicación y el nombre del archivo o archivos que desea mover. destino Especifica la nueva ubicación del archivo. Destino puede consistir en una letra de unidad y dos puntos, un nombre del directorio, o una combinación. Si te estas moviendo solo un archivo, también puede incluir un nombre de archivo si desea cambiar el nombre del archivo cuando lo mueva. [unidad:] [ruta] dirname1 Especifica el directorio al que desea cambiar el nombre. dirname2 Especifica el nuevo nombre del directorio. / Y Suprime las indicaciones para confirmar que desea sobrescribe un archivo de destino existente. / -Y Provoca que se confirme que desea sobrescribir un archivo de destino existente El modificador / Y puede estar presente en la variable de entorno COPYCMD. Esto puede anularse con / -Y en la línea de comando. El valor predeterminado es para solicitar sobrescrituras a menos que el comando MOVE se ejecute desde dentro de un script por lotes.
El comando XCOPY incorporado está cerca. Hará una copia recursiva, pero no creo que sea compatible con renombrar.
for /r %%x in (%1) do ren "%%x" %2
esto cambiará el nombre del archivo de forma recursiva :-)
guardar en un archivo dar 2 argumentos de extensión y extensión.
Ej: el nombre del archivo es test.bat comando: test * .avi * .bmp
renombra todos los archivos con extensión avi a bmp (en todas las subcarpetas :))
Nota: Esta es una corrección para la publicación respondida el 26 de octubre a las 13:20 por Rob Kam. Él dio por
/r %x in (*.c) do ren "%x" *.cpp
donde como debería tener %% en lugar de %
Esto funcionó mejor para mí:
FOR /R "C:\folder1\folder2\" %i in (.,*) DO MOVE /Y "%i" "C:\folder1\"
Fuente: http://www.islamadel.com/index.php/notes/6-computer/10-windows-command-line
Hay puertos de Windows para la mayoría de los comandos de UNIX:
He creado un script VB que buscará y reemplazará los nombres de directorio ... También tengo una versión de archivos, sin embargo, creo que esto es suficiente para que pueda comenzar con su propio script. La forma en que uso este script es que tengo un fileandreplacedirs.vbs
, y lo pongo en la misma carpeta que las carpetas que quiero renombrar. Además, no necesariamente se repite en la carpeta, pero podría con una pequeña modificación
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
Use un comando simple de DOS.
cd al directorio de origen donde desea cambiar el nombre de las extensiones de archivo de forma recursiva.
Escriba este comando:
ren *.[CurrentFileExtension] *.[DesiredFileExtension]
Agregué if exist
para evitar devoluciones de error (es importante en Jenkins para que no rompa una compilación) cuando el archivo no existe en todas las carpetas:
for /r %x in (foo) do if exist "%x" move "%x" "drive:\path\bar"
Para hacer un cambio de nombre recursivo:
for /r %x in (*.c) do if exist "%x" ren "%x" *.cpp
Ejemplo de lote:
for /r "< DIR >" %%x in (*.c) do if exist "%%x" ren "%%x" *.cpp
Powershell es tu amigo. No se necesitan archivos por lotes ni scripts. Por ejemplo, para renombrar recursivamente todos los archivos .tiff a .tif en un directorio remoto, puede ejecutar el siguiente comando desde Powershell:
get-childitem "\\\servername\d$\path" -recurse -Include *.tiff | Rename-Item -NewName {
$_.Name.replace(".tiff",".tif") }
Encontré este script de Python que también funciona:
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)
Encontrado en: http://gomputor.wordpress.com/2008/09/29/change-the-extension-of-multiple-files-in-a-chosen-directory-with-python/
Agregué Python a mi ruta y puse el script de Python arriba en una carpeta 'utils'. Luego creé este script por lotes simple para ejecutarlo: rn.bat:
python \utils\rn.py %1 %2 %3
También actualicé el script de Python anterior para tomar sus argumentos de la línea de 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, todo lo que hay que hacer ahora es algo como esto:
>rn . .foo .bar
o
>rn \ .exe .txt
Diviértete con el segundo :)