Задайте переменную пути с пробелами в пути в файле .cmd Windows или пакетном файле

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

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

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

Ответ 1

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

SET MY_PATH=C:\Folder with a space

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

Ответ 2

Я использую

set "VAR_NAME=<String With Spaces>"

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

set "PATH=%UTIL_DIR%;%PATH%"

Ответ 3

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

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 удаляет кавычки вокруг аргумента. Это пригодится при передаче имен папок в кавычки, но, как говорилось ранее, в этом конкретном случае это не лучшая идея: -)

Ответ 4

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

  • создать переменную ниже

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

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

Ответ 5

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

Например:

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

Ответ 6

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

@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

Ответ 7

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

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

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

Ответ 8

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

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

  • В cmd   setx path "%path%;your new path" затем введите

  • Проверьте правильность пути, набрав путь и нажав enter