2009-12-05 24 views
76

Soy nuevo en la escritura de scripts 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.Establecer una variable de ruta con espacios en la ruta en un archivo .cmd de Windows o un archivo por lotes

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 probar, estoy usando el interruptor de ayuda hasta que pueda hacerlo funcionar. Puedo hacerlo utilizando un nombre de archivo/carpeta 8.3 (por ejemplo, Mis documentos como MyDocu ~ 1), pero ¿se puede hacer de otra manera?

+0

Las comillas deben contener la ruta con el nombre del archivo y deben seguir los parámetros de la línea de comando. ¿Puedes dar más detalles sobre cómo se crea la línea de comando? Exactamente ¿qué quieres decir con> 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 a – vladhorby

Respuesta

79

intentar algo como esto:

SET MY_PATH=C:\Folder with a space 

"%MY_PATH%\MyProgram.exe" /switch1 /switch2 
+0

Eso es lo que hice al usar Reemplazar en el Bloc de notas. Gracias. – marcerickson

+3

Me alegro de que haya ayudado. Sería bueno si votas y aceptas cualquier respuesta que sientas que te ayudó. – aphoria

+0

¿Por qué esto no funciona para mí? Tengo que usar MY_PATH en una sentencia if si no existe "% dest_fold% \ %% a \" mkdir "% dest_fold%" \ %% a \, pero no está funcionando –

25

Hay dos opciones aquí. En primer lugar, se puede almacenar la ruta no indicada y solo citar más adelante:

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

Otra opción que podría utilizar es una subrutina que alles para las cadenas de la ONU-citando (pero en este caso no es en realidad una muy buena idea, ya que 're añadiendo comillas, despojando a la basura y volver a agregarlos de nuevo 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 :-)

+0

Utilicé el primer método, usando Reemplazar en el Bloc de notas. El segundo parecía innecesariamente complicado. Gracias. – marcerickson

+1

Tengo un archivo por lotes que obtiene los parámetros. Usar 'set LALA =% ~ 1' fue lo que funcionó para mí. – JCH2k

+0

El método 2 funcionó para mí en un ciclo complicado. – Noumenon

0

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

  1. Ejecutar el símbolo del sistema como administrador (clic derecho en cmd.exe y seleccione Ejecutar como administrador)

  2. en cmd setx path "%path%;your new path" a continuación, introduzca

  3. Comprobar si la ruta se toma correctamente escribiendo ruta y pulsar enter

+1

Creo que la pregunta no es sobre * la variable PATH *, sino sobre la variable * a path *. El OP aparentemente quiere almacenar una ruta particular en una variable y usar el valor en la secuencia de comandos por lotes. –

6

Siempre coloque 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 
5

La forma correcta de hacerlo 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 
30

utilizo

set "VAR_NAME=<String With Spaces>" 

al actualizar ruta:

set "PATH=%UTIL_DIR%;%PATH%" 
+0

gracias, finalmente una respuesta que funciona –

9

Pruebe esto;

  1. crear una variable de la siguiente manera

    SET "SolutionDir=C:\Test projects\Automation tests\bin\Debug"** 
    
  2. A continuación, sustituir la ruta con la variable. Asegúrese de añadir las citas para el comienzo y al final

    vstest.console.exe "%SolutionDir%\Automation.Specs.dll" 
    
1

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 esta ayuda.

Cuestiones relacionadas