Utilice el lote de DOS para mover todos los archivos a 1 directorio

Utilice el lote de DOS para mover todos los archivos a 1 directorio

He creado un archivo por lotes para ejecutarlo a través del menú contextual en Win7. Cuando hago clic derecho en una carpeta, me gustaría que el archivo por lotes mueva todos los archivos (excluyendo las carpetas) hasta 1 directorio. Tengo esto hasta ahora:

PUSHHD %1
MOVE "%1\*.*"  ..\

Esto parece funcionar siempre que la carpeta desde la que muevo archivos no tenga espacios. Cuando la carpeta tiene espacios, aparece un mensaje de error:"La sintaxis del comando es incorrecta".

Entonces mi lote funciona en una carpeta titulada PULLTESTpero no en una carpeta titulada PULL TEST.

Nuevamente, no lo necesito para mover carpetas, solo archivos. Y me gustaría que funcionara en cualquier directorio de cualquier unidad. No habrá directorios específicos en los que trabajaré. Será aleatorio.


A continuación se muestra el archivo de registro que hice si es necesario como referencia.

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Directory\shell\PullFiles]
@="PullFilesUP"

[HKEY_CLASSES_ROOT\Directory\shell\PullFiles\command]
@="\"C:\\Program Files\\MyBatchs\\PullFiles.bat\" \"%1\""

Respuesta1

El lote podría ser tan simple como este:

@move "%~1\*" "%~1\.."

La tilde elimina las comillas adjuntas que ya puedan estar presentes en el valor del argumento. El conjunto adicional de comillas fue la fuente de su problema.

EDITAR- No dices lo que quieres que suceda si ya existe un archivo con el mismo nombre en el directorio principal. Dado que el comando MOVE está en un archivo por lotes, el valor predeterminado es sobrescribir automáticamente el archivo en la carpeta principal. Si desea que el script solicite instrucciones, dándole la oportunidad de evitar la sobrescritura, entonces necesita la /-Yopción.

@move /-y "%~1\*" "%~1\.."

Respuesta2

Escribiste pushdmal el comando, tienes dos h.

Y hay que quitarlo %1del movemando. Si el directorio tiene espacios, moveel comando no funciona.

Suponga que su lote se llama MoveFiles.bat. Se llama así:

MoveFiles.bat "C:\Test\With Spaces"

Después de la sustitución de parámetros dentro del lote, queda de esta manera:

PUSHD "C:\Test\With Spaces"
MOVE ""C:\Test\With Spaces"*.*" ..\

El segundo comando tiene un error de sintaxis debido a comillas anidadas.


Esta versión del lote funciona para mí:

PUSHD %1
MOVE *.* ..\

Respuesta3

La razón por la que arroja ese error es por los espacios. pushdfunciona con espacios, pero moveno lo hace. Intente incluir su segundo argumento, ..\entre comillas:

PUSHD %1
MOVE "%1*.*" "..\"

información relacionada