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

#eclipse #batch-file #tomcat9

Вопрос:

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

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

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

Комментарии:

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

Ответ №1:

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

 SET MY_PATH=C:Folder with a space

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

Комментарии:

1. Это то, что я сделал, используя Замену в Блокноте. Спасибо.

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

Ответ №2:

Я использую

 set "VAR_NAME=<String With Spaces>"
 

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

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

Комментарии:

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

Ответ №3:

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

 set MyPath=C:Program FilesFoo
"%MyPath%foo with spaces.exe" something
 

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

 set MyPath="C:Program FilesFoo"
call :foo %MyPath%
goto :eof

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

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

Комментарии:

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

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

3. 2-й метод идеально работает, когда вы используете субрутины

Ответ №4:

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

  1. создайте переменную, как показано ниже
     SET "SolutionDir=C:Test projectsAutomation testsbinDebug"**
     
  2. Затем замените путь переменной. Не забудьте добавить кавычки для начала и конца
     vstest.console.exe "%SolutionDir%Automation.Specs.dll"
     

Ответ №5:

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

Например:

 "C:Program FilesPageTechPCLReader64_131PCLReader64.exe"
PAUSE
 

Ответ №6:

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

 @ECHO off
SET MY_PATH=M:Dir^
With SpacesSub Folder^
DirFolder
:: calls M:DirWith SpacesSub FolderDirFolderhello.bat
CALL "%MY_PATH%hello.bat"
pause
 

Ответ №7:

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

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

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

Ответ №8:

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

  1. Запустите командную строку от имени администратора (щелкните правой кнопкой мыши на cmd.exe и выберите запуск от имени администратора)
  2. В cmd setx path "%path%;your new path" затем введите
  3. Проверьте, правильно ли выбран путь, введя путь и нажав клавишу ввод

Комментарии:

1. Я думаю, что вопрос не в переменной ПУТИ , а скорее в переменной пути . Операция, по-видимому, хочет сохранить определенный путь в переменной и использовать значение в пакетном сценарии.

Ответ №9:

Представьте себе, недавно у меня была такая же проблема…

 Folder
  └  File1.txt
  └  File2.txt
 

Вопрос

Вы правы, если добавите «» вокруг пути…

 SET RootFolder="C:Folder with spaces"
 

затем это делает его непригодным для использования, если вы хотите затем добавить имена файлов и т. Д. (Без какой-либо промежуточной обработки строки…

 FOR %%F IN * DO (COPY %%F "%RootFolder%%%F")

❌ COPY File1.txt ""C:Folder with spaces"File1.txt"
❌ COPY File2.txt ""C:Folder with spaces"File2.txt"
 

Решение

Ключ состоит в том, чтобы по-прежнему использовать»», но помещать их вокруг всего оператора SET (т. Е. Перед именем переменной).

 SET "RootFolder=C:Folder with spaces"
 

Это будет работать, когда вам нужно будет повторно использовать переменную

 FOR %%F IN * DO (COPY %%F "%RootFolder%%%F")

✅ COPY File1.txt "C:Folder with spacesFile1.txt"
✅ COPY File1.txt "C:Folder with spacesFile2.txt"
 

Ответ №10:

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

установить dir=»C:\1. Какая-То Папка\Какая-То Другая Папка\Просто Потому, Что»

@echo на MKDIR %реж.%

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