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


112

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

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

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


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

Ответы:


104

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

SET MY_PATH=C:\Folder with a space

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

Это то, что я сделал с помощью Replace in Notepad. Спасибо.
Марсериксон

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

75

я использую

set "VAR_NAME=<String With Spaces>"

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

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

3
это должен быть принятый ответ. по какой-то причине вызов set из блока if не работает, если значение имеет пробел и не заключено в кавычки.
Кевин

33

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

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


Я использовал первый способ, используя Заменить в Блокноте. Второй вариант казался излишне сложным. Спасибо.
Марсериксон 06

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

Второй метод отлично работает, когда вы используете подпрограммы
robe007

16

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

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

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

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

8

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

Например:

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

7

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

@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

5

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

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

Надеюсь, это поможет.


2

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

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

  2. В cmd setx path "%path%;your new path" введите

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


1
Думаю, вопрос не в переменной PATH , а скорее в переменной пути . OP, по-видимому, хочет сохранить определенный путь в переменной и использовать значение в пакетном сценарии.
Andriy M

1

также просто попробуйте добавить двойную косую черту, как это работает только для меня

set dir = "C: \\ 1. Некоторая папка \\ Другая папка \\ Просто потому, что"

@echo в MKDIR% dir%

OMG, после публикации они удалили второй \ в моем сообщении, поэтому, если вы откроете мой комментарий, и он покажет три, вы должны прочитать их как два ...

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.