2009-12-05 3 views
76

Я новичок в написании сценариев и не могу заставить его работать. Я мог бы, если бы я переместил файлы на путь без пробела в нем, но я хотел бы, чтобы он работал с пространством, если бы мог.Задайте переменную пути с пробелами в пути в файле .cmd Windows или командном файле

Я хочу извлечь кучу обновлений Office в папку с .cmd-файлом. Чтобы пакетный файл можно было использовать на любом компьютере, я устанавливаю переменную пути, которую мне нужно изменить только в одном месте, чтобы запустить ее на другой машине. Проблема в том, что путь имеет в нем пробел. Если я помещаю кавычки вокруг пути в определении, cmd.exe помещает их вокруг пути, прежде чем он добавит имя файла и переключатели, и пакет завершится с «Синтаксической ошибкой командной строки». Без кавычек он терпит неудачу, «не распознается как внутренняя или внешняя команда, операционная программа или командный файл».

Для тестирования я использую переключатель помощи до тех пор, пока я не получу его работу. Я могу сделать это, используя имя файла/папки 8.3 (например, My Documents как MyDocu ~ 1), но может ли это быть по-другому?

+0

Кавычки должны содержать путь с именем файла и параметрами командной строки. Можете ли вы дать более подробную информацию о создании командной строки? Точно, что вы подразумеваете под> Если я помещаю кавычки вокруг пути в определении, cmd.exe ставит их вокруг пути, прежде чем он добавит имя файла и переключатели. – vladhorby

ответ

79

попробовать что-то вроде этого:

SET MY_PATH=C:\Folder with a space 

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

Вот что я сделал с помощью Replace in Notepad. Спасибо. – marcerickson

+3

Рад, что это помогло. Было бы неплохо, если бы вы продвинули и приняли любой ответ, который, по вашему мнению, вам помог. – aphoria

+0

Почему это не работает для меня? Я должен использовать MY_PATH в операторе if, если не существует «% dest_fold% \ %% a \» mkdir «% dest_fold%» \ %% a \, но он не работает –

25

Есть два варианта здесь. Во-первых, вы можете сохранить путь без кавычек и просто процитировать его позже:

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

Другой вариант вы можете использовать это подпрограмма, которая Alles для оон кавычки строк (но в этом случае на самом деле это не очень хорошая идея, так как вы «повторно добавлять цитаты, лишая их и повторно добавлять их снова без пользы):

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

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

%~1 удаляет кавычки вокруг аргумента. Это пригодится при передаче имен папок во время цитаты, но, как уже говорилось, в этом конкретном случае это не самая лучшая идея :-)

+0

Я использовал первый метод, используя Replace in Notepad. Второй казался излишне сложным. Спасибо. – marcerickson

+1

У меня есть пакетный файл, который получает параметры. Использование 'set LALA =% ~ 1'асловалось для меня. – JCH2k

+0

Метод 2 работал для меня в сложной петле. – Noumenon

0

Если вам нужно сохранить постоянный путь (путь не изменяется при перезапуске cmd)

  1. запустите командную строку от имени администратора (правой кнопкой мыши на cmd.exe и выберите Запуск от имени администратора)

  2. В ЦМД setx path "%path%;your new path" введите

  3. Проверьте берется путь правильно, введя путь и нажав введите

+1

Я думаю, вопрос не о * переменной PATH *, а о переменной * пути. OP, по-видимому, хочет сохранить определенный путь в переменной и использовать значение в пакетном скрипте. –

6

Я всегда поместить путь в двойных кавычках, когда я создаю .bat файл. (Я просто добавил ПАУЗА, чтобы он не закрывал экран.)

Например:

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

Правильный способ сделать это так:

@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

Я использую

set "VAR_NAME=<String With Spaces>" 

при обновлении пути:

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

спасибо, наконец, ответ, который работает –

9

Попробуйте это;

  1. создать переменную, как показано ниже

    SET "SolutionDir=C:\Test projects\Automation tests\bin\Debug"** 
    
  2. Затем замените путь с переменной. Убедитесь в том, чтобы добавить котировки начинается и заканчивается

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

Самый простой способ решить эту проблему, чтобы поместить имя папки в кавычки:

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

Hopes это помогает.

Смежные вопросы