Установите переменную пути с пробелами в пути в Windows .cmd или командном файле - PullRequest
96 голосов
/ 05 декабря 2009

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

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

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

Ответы [ 8 ]

91 голосов
/ 05 декабря 2009

Попробуйте что-то вроде этого:

SET MY_PATH=C:\Folder with a space

"%MY_PATH%\MyProgram.exe" /switch1 /switch2
54 голосов
/ 03 октября 2013

Я использую

set "VAR_NAME=<String With Spaces>"

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

set "PATH=%UTIL_DIR%;%PATH%"
31 голосов
/ 06 декабря 2009

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

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

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

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

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

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

15 голосов
/ 15 апреля 2015

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

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

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

    vstest.console.exe "%SolutionDir%\Automation.Specs.dll"
    
7 голосов
/ 10 апреля 2013

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

Например:

"C:\Program Files\PageTech\PCLReader64_131\PCLReader64.exe"
PAUSE
6 голосов
/ 10 апреля 2013

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

@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
4 голосов
/ 05 ноября 2015

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

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

Надеется, что это поможет.

1 голос
/ 02 июля 2011

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

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

  2. В смд setx path "%path%;your new path" затем введите

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

...