Встановіть змінну шляху з пробілами на шляху у файлі 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

Ось що я зробив, використовуючи Замінити в Блокноті. Дякую.
marcerickson

5
Радий, що це допомогло. Було б добре, якби ви підтримали та прийняли будь-яку відповідь, яку ви відчуваєте, що вам допомогла.
афорія

75

я використовую

set "VAR_NAME=<String With Spaces>"

при оновленні контуру:

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

3
це має бути прийнятою відповіддю. чомусь виклик, встановлений з блоку 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Видаляє лапки навколо аргументу. Це стане в нагоді при передачі імен папок навколо цитованих, але, як було сказано раніше, в цьому конкретному випадку це не найкраща ідея :-)


Я використовував перший метод, використовуючи Замінити в Блокноті. Другий видався зайвим складним. Дякую.
marcerickson

2
У мене є пакетний файл, який отримує параметри. Використання set LALA=%~1було те, що працювало для мене.
JCH2k

2-й метод працює досконало, коли ви використовуєте стилістики
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. setx path "%path%;your new path" Потім введіть cmd

  3. Перевірте, чи правильно взято шлях, ввівши шлях та натиснувши клавішу Enter


1
Я думаю, питання не в змінній PATH , а в змінній шляху . ОП, очевидно, хоче зберегти певний шлях у змінну та використовувати значення в пакетному сценарії.
Андрій М

1

також просто спробуйте додати подвійні нахили, такі як це працює лише для мене

set dir = "C: \\ 1. Деякі папки \\ Деякі інші папки \\ Просто тому, що"

@echo на MKDIR% dir%

OMG після публікації вони видалили другий \ у моєму дописі, тому якщо ви відкриєте мій коментар, і він показує три, ви повинні прочитати їх як два ......

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.