programacion por lotes hacer espacios ejemplos como comandos blanco batch bat avanzados autoejecutable archivos archivo batch-file path variables cmd space

batch-file - por - espacios en blanco en cmd



Establecer una variable de ruta con espacios en la ruta en un archivo.cmd de Windows o archivo de proceso por lotes (8)

Soy nuevo en la escritura de guiones y no puedo hacer que funcione. Podría si moviera los archivos a una ruta sin espacio, pero me gustaría que funcione con el espacio si pudiera.

Quiero extraer un montón de actualizaciones de Office en una carpeta con un archivo .cmd. Para hacer que el archivo por lotes se pueda usar en cualquier computadora, configuro una variable de ruta que solo tengo que cambiar en un lugar para ejecutarla en otra máquina. El problema es que la ruta tiene un espacio. Si pongo comillas alrededor de la ruta en la definición, cmd.exe los coloca alrededor de la ruta antes de agregar el nombre de archivo y cambia y el lote falla con "Error de sintaxis en la línea de comando". Sin comillas, falla con "no se reconoce como un comando interno o externo, programa operable o archivo por lotes".

Para las pruebas, estoy usando el interruptor de ayuda hasta o si puedo hacerlo funcionar. Puedo hacerlo usando un nombre de archivo / carpeta 8.3 (por ejemplo, Mis documentos como MyDocu ~ 1), pero ¿se puede hacer de otra manera?


Aquí hay dos opciones. Primero, puede almacenar la ruta sin comillas y simplemente citarla más adelante:

set MyPath=C:/Program Files/Foo "%MyPath%/foo with spaces.exe" something

Otra opción que puede usar es una subrutina que permite anotar cadenas (pero en este caso no es una buena idea ya que está agregando comillas, quitándolas y volviéndolas a agregar sin beneficio):

set MyPath="C:/Program Files/Foo" call :foo %MyPath% goto :eof :foo "%~1/foo.exe" goto :eof

El %~1 quita comillas alrededor del argumento. Esto es útil al pasar los nombres de las carpetas citadas, pero, como dije antes, en este caso particular no es la mejor idea :-)


La forma correcta de hacer esto es así:

@ECHO off SET MY_PATH=M:/Dir/^ With Spaces/Sub Folder^ /Dir/Folder :: calls M:/Dir/With Spaces/Sub Folder/Dir/Folder/hello.bat CALL "%MY_PATH%/hello.bat" pause


La forma más fácil de solucionar este problema es poner el nombre de la carpeta entre comillas:

(cd/New Folder/...) --> (cd/"New Folder"/...)

Espera que esto ayude.


Prueba esto;

  1. crea una variable como abajo

    SET "SolutionDir=C:/Test projects/Automation tests/bin/Debug"**

  2. Luego reemplace la ruta con variable. Asegúrese de agregar comillas para comenzar y terminar

    vstest.console.exe "%SolutionDir%/Automation.Specs.dll"


Pruebe algo como esto:

SET MY_PATH=C:/Folder with a space "%MY_PATH%/MyProgram.exe" /switch1 /switch2


Si necesita almacenar una ruta permanente (la ruta no se cambia cuando se reinicia cmd)

  1. Ejecute el símbolo del sistema como administrador (haga clic con el botón derecho en cmd.exe y seleccione ejecutar como administrador)

  2. En la setx path "%path%;your new path" cmd setx path "%path%;your new path" , ingresa

  3. Compruebe si la ruta se toma correctamente escribiendo la ruta y presionando Enter


Siempre coloco la ruta entre comillas dobles cuando estoy creando un archivo .bat. (Acabo de agregar la PAUSA para que no cierre la pantalla).

Por ejemplo:

"C:/Program Files/PageTech/PCLReader64_131/PCLReader64.exe" PAUSE


yo suelo

set "VAR_NAME=<String With Spaces>"

al actualizar la ruta:

set "PATH=%UTIL_DIR%;%PATH%"