2009-12-05 12 views
76

Je ne connais pas encore l'écriture de scripts et je ne peux pas la faire fonctionner. Je pourrais le faire si je déplaçais les fichiers dans un chemin sans espace, mais je voudrais que cela fonctionne avec l'espace s'il le pouvait.Définir une variable de chemin avec des espaces dans le chemin d'accès dans un fichier Windows .cmd ou un fichier de commandes

Je veux extraire un tas de mises à jour Office dans un dossier avec un fichier .cmd. Pour rendre le fichier séquentiel utilisable sur n'importe quel ordinateur, je définis une variable de chemin que je n'ai qu'à changer à un endroit pour l'exécuter sur une autre machine. Le problème est que le chemin a un espace dedans. Si je place des guillemets autour du chemin dans la définition, cmd.exe les place autour du chemin avant d'ajouter le nom de fichier et les commutateurs et le lot échoue avec "Erreur de syntaxe de ligne de commande". Sans guillemets, il échoue avec, "n'est pas reconnu comme une commande interne ou externe, un programme ouvrable, ou un fichier séquentiel."

Pour les tests, j'utilise le bouton d'aide jusqu'à ce que je puisse le faire fonctionner. Je peux le faire en utilisant un nom de fichier/dossier 8.3 (par exemple My Documents comme MyDocu ~ 1), mais peut-il être fait d'une manière différente?

+0

Les guillemets doivent contenir le chemin d'accès au nom de fichier et les paramètres de ligne de commande doivent suivre. Pouvez-vous donner plus de détails sur la façon dont la ligne de commande est créée? Exactement waht voulez-vous dire par> 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 – vladhorby

Répondre

79

Essayez quelque chose comme ceci:

SET MY_PATH=C:\Folder with a space 

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

C'est ce que j'ai fait en utilisant Replace dans le Bloc-notes. Je vous remercie. – marcerickson

+3

Heureux que cela a aidé. Ce serait bien si vous upvotez et acceptez n'importe quelle réponse que vous sentez vous a aidé. – aphoria

+0

Pourquoi cela ne fonctionne-t-il pas pour moi? Je dois utiliser MY_PATH dans une instruction if s'il n'existe pas "% dest_fold% \ %% a \" mkdir "% dest_fold%" \ %% a \, mais cela ne fonctionne pas –

25

Il y a deux options. Tout d'abord, vous pouvez stocker le chemin unquoted et juste 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 alles pour les chaînes de l'ONU-cité (mais dans ce cas, il est en fait pas une très bonne idée puisque vous « re ajouter des guillemets, les dépouillant et les re-ajouter à 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. Ceci est pratique lorsque vous passez des noms de dossiers cités mais, comme dit précédemment, dans ce cas particulier ce n'est pas la meilleure idée :-)

+0

J'ai utilisé la première méthode, en utilisant Remplacer dans le Bloc-notes. Le second semblait inutilement compliqué. Je vous remercie. – marcerickson

+1

J'ai un fichier Batch qui obtient des paramètres. Utiliser 'set LALA =% ~ 1'était ce qui fonctionnait pour moi. – JCH2k

+0

La méthode 2 a fonctionné pour moi dans une boucle compliquée. – Noumenon

0

Si vous avez besoin de stocker un chemin permanent (le chemin n'est pas modifié lorsque cmd est redémarré)

  1. Exécutez l'invite de commande en tant qu'administrateur (clic droit sur cmd.exe et sélectionnez Exécuter en tant qu'administrateur)

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

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

+1

Je pense que la question ne concerne pas * la variable PATH *, mais plutôt la variable * path *. L'OP veut apparemment stocker un chemin particulier dans une variable et utiliser la valeur dans le script batch. –

6

je place toujours le chemin entre guillemets quand je suis en train de créer un fichier .bat. (Je viens d'ajouter la PAUSE pour ne pas fermer l'écran.)

Par exemple:

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

La bonne façon de le faire est comme ceci:

@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

J'utilise

set "VAR_NAME=<String With Spaces>" 

lorsque le chemin de mise à jour:

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

merci, enfin une réponse qui fonctionne –

9

Essayez ceci;

  1. créer une variable ci-dessous

    SET "SolutionDir=C:\Test projects\Automation tests\bin\Debug"** 
    
  2. Remplacez ensuite le chemin avec la variable. Assurez-vous d'ajouter des guillemets pour les démarrages et fin

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

La meilleure façon de résoudre ce problème est de mettre le nom du dossier dans les citations:

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

Espoirs cette aide.