
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 PULLTEST
pero 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 /-Y
opción.
@move /-y "%~1\*" "%~1\.."
Respuesta2
Escribiste pushd
mal el comando, tienes dos h
.
Y hay que quitarlo %1
del move
mando. Si el directorio tiene espacios, move
el 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. pushd
funciona con espacios, pero move
no lo hace. Intente incluir su segundo argumento, ..\
entre comillas:
PUSHD %1
MOVE "%1*.*" "..\"