Windows x64 & проблема с пакетным файлом «круглые скобки в пути» - PullRequest
5 голосов
/ 21 марта 2011

Версии Windows x64 содержат папки, названные круглыми скобками, например "\ Program Files (x86)", и это нарушает пакетный файл, который я использую. Пример проблемной строки:

для %% c в (% path%) сделать, если существует "%% c \ xyz.exe" установить xyz = OK

т.е. когда он достигает ")" в "(x86)", он выводит сообщение об ошибке и выходит ...

Есть идеи как это исправить? Это довольно большой пакетный файл, и у меня нет времени, чтобы переписать его на лучшем языке ...

Большое спасибо:)

Ответы [ 3 ]

5 голосов
/ 21 марта 2011

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

   @echo off
   for %%i in (xyz.exe) do set xyz=%%~$PATH:i

   if "%xyz%" == "" Goto NotFound

   Echo "Found"
   Goto TheEnd

:NotFound
   Echo "Not found"

:TheEnd
3 голосов
/ 21 марта 2011

Обычно цитирование должно работать, но в этом случае вы хотите перебрать все элементы, разделенные ;.

Но вы можете заменить комбинацию ; на " ", так что скобки будут заключены в кавычки, и вы сможете перебирать элементы.

образец: path=C:\temp;C:\windows;C:\Program Files (x86)
Цикл for будет искать в
"C:\temp" "C:\windows" "C:\Program Files (x86)"

Как код выглядит как

setlocal EnableDelayedExpansion
set "searchPath=!path:;=" "!"
for %%c in ("!searchPath!") do (
    if exist "%%~c\xyz.exe" set xyz=OK
)
2 голосов
/ 21 марта 2011

Для этой цели вы можете использовать короткие имена папок. Вот как ты это делаешь.

Открыть командную строку в Windows. Перейдите на диск C (или диск, на котором у вас есть папка программы) Введите следующее и

   c:\> dir /x  <Hit Enter>

Это вернет краткие формы всех папок.

Теперь вы заметите, что "\ Program Files (x86)" будет представлен как "PROGRA ~ 2" (или эквивалентное короткое имя). Это то, что я использую для предотвращения ошибок при создании пакетных сценариев.

Дополнительные параметры см. Здесь. http://www.computerhope.com/dirhlp.htm

Расширение для "dir / x"
«При этом отображаются короткие имена, сгенерированные для имен файлов, не относящихся к 8dot3. Формат - это / N с коротким именем, вставленным перед длинным именем. Если короткое имя отсутствует, вместо него отображаются пробелы.»

...