web-dev-qa-db-fra.com

Définir une variable de chemin avec des espaces dans le chemin dans un fichier .cmd ou un fichier de commandes Windows

Je suis nouveau dans l'écriture de scénario et je ne parviens pas à faire fonctionner celui-ci. Je pourrais le faire si je déplaçais les fichiers vers un chemin sans espace, mais j'aimerais que cela fonctionne avec cet espace s'il le pouvait.

Je souhaite extraire un ensemble de mises à jour Office dans un dossier contenant un fichier .cmd. Pour que le fichier de commandes puisse être utilisé sur n’importe quel ordinateur, j’ai défini une variable de chemin que je ne dois modifier qu’à un endroit donné pour l’exécuter sur une autre machine. Le problème est que le chemin contient un espace. Si je mets des guillemets autour du chemin dans la définition, cmd.exe les met autour du chemin avant d'ajouter le nom de fichier et les commutateurs et que le lot échoue avec une "erreur de syntaxe de ligne de commande". Sans guillemets, il échoue avec, "n'est pas reconnu comme une commande interne ou externe, un programme utilisable ou un fichier de commandes."

Pour tester, j'utilise le commutateur d'aide jusqu'à ou si je peux le faire fonctionner. Je peux le faire en utilisant un nom de fichier/dossier 8.3 (par exemple, Mes documents en tant que MyDocu ~ 1), mais cela peut-il être fait différemment?

98
marcerickson

Essayez quelque chose comme ça:

SET MY_PATH=C:\Folder with a space

"%MY_PATH%\MyProgram.exe" /switch1 /switch2
91
aphoria

J'utilise

set "VAR_NAME=<String With Spaces>"

lors de la mise à jour du chemin:

set "PATH=%UTIL_DIR%;%PATH%"
59
koko

Il y a deux options ici. Tout d'abord, vous pouvez stocker le chemin non-cité et le citer plus tard:

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

Une autre option que vous pouvez utiliser est un sous-programme qui permet de ne pas faire de guillemets (mais dans ce cas, ce n’est pas une très bonne idée puisque vous ajoutez des guillemets, que vous les supprimez et que vous les rajoutez à nouveau sans avantage):

set MyPath="C:\Program Files\Foo"
call :foo %MyPath%
goto :eof

:foo
"%~1\foo.exe"
goto :eof

Le %~1 supprime les guillemets autour de l'argument. Cela est pratique pour passer des noms de dossiers cités, mais, comme indiqué précédemment, dans ce cas particulier, ce n'est pas la meilleure idée :-)

31
Joey

Essaye ça;

  1. créer une variable comme ci-dessous

    SET "SolutionDir=C:\Test projects\Automation tests\bin\Debug"**
    
  2. Puis remplacez le chemin par variable. Assurez-vous d'ajouter des guillemets pour les débuts et les fins

    vstest.console.exe "%SolutionDir%\Automation.Specs.dll"
    
15
Shiran Jayawardena

Je place toujours le chemin entre guillemets lorsque je crée un fichier .bat. (Je viens d'ajouter la pause afin qu'elle ne ferme pas l'écran.)

Par exemple:

"C:\Program Files\PageTech\PCLReader64_131\PCLReader64.exe"
PAUSE
7
JoBaxter

La bonne façon de faire est la suivante:

@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
6
djangofan

Le moyen le plus simple de résoudre ce problème consiste à mettre le nom du dossier entre guillemets:

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

J'espère que cela aide.

4
user5528279

Si vous devez stocker le chemin permanent (le chemin n'est pas modifié lorsque cmd est redémarré)

  1. Exécutez l'invite de commande en tant qu'administrateur (cliquez avec le bouton droit de la souris sur cmd.exe et sélectionnez Exécuter en tant qu'administrateur).

  2. Dans cmd setx path "%path%;your new path" puis entrez

  3. Vérifiez si le chemin est pris correctement en tapant chemin et en appuyant sur entrée.

1
mpmpeiris