Я хотел бы добавить замечание к вышеуказанным решениям:
Все эти синтаксисы работают превосходно, ЕСЛИ ВАША КОМАНДА НАХОДИТСЯ В ПУТИ или ЕСЛИ КОМАНДА - КОМАНДА, БЕЗ ПРОСТРАНСТВ ИЛИ ОСОБЫХ СИМВОЛОВ.
Но если вы попытаетесь использовать исполняемую команду, расположенную в папке, путь которой содержит специальные символы, вам потребуется заключить в нее командный путь в двойных кавычках ("), а затем синтаксис FOR / F не будет работать.
Примеры:
$ for /f "tokens=* USEBACKQ" %f in (
`""F:\GLW7\Distrib\System\Shells and scripting\f2ko.de\folderbrowse.exe"" Hello '"F:\GLW7\Distrib\System\Shells and scripting"'`
) do echo %f
The filename, directory name, or volume label syntax is incorrect.
или
$ for /f "tokens=* USEBACKQ" %f in (
`"F:\GLW7\Distrib\System\Shells and scripting\f2ko.de\folderbrowse.exe" "Hello World" "F:\GLW7\Distrib\System\Shells and scripting"`
) do echo %f
'F:\GLW7\Distrib\System\Shells' is not recognized as an internal or external command, operable program or batch file.
или
`$ for /f "tokens=* USEBACKQ" %f in (
`""F:\GLW7\Distrib\System\Shells and scripting\f2ko.de\folderbrowse.exe"" "Hello World" "F:\GLW7\Distrib\System\Shells and scripting"`
) do echo %f
'"F:\GLW7\Distrib\System\Shells and scripting\f2ko.de\folderbrowse.exe"" "Hello' is not recognized as an internal or external command, operable program or batch file.
В этом случае единственное решение, которое я нашел для использования команды и сохранения ее результата в переменной, - это установить (временно) каталог по умолчанию на каталог самой команды:
pushd "%~d0%~p0"
FOR /F "tokens=* USEBACKQ" %%F IN (
`FOLDERBROWSE "Hello world!" "F:\GLW7\Distrib\System\Layouts (print,display...)"`
) DO (SET MyFolder=%%F)
popd
echo My selected folder: %MyFolder%
Результат будет правильным:
My selected folder: F:\GLW7\Distrib\System\OS install, recovery, VM\
Press any key to continue . . .
Конечно, в приведенном выше примере я предполагаю, что мой пакетный скрипт находится в той же папке, что и моя исполняемая команда, так что я могу использовать синтаксис "% ~ d0% ~ p0". Если это не ваш случай, вам нужно найти способ найти путь к вашей команде и изменить каталог по умолчанию на его путь.
NB. Для тех, кто интересуется, здесь приведен пример команды (для выбора папки) FOLDERBROWSE.EXE. Я нашел это на веб-сайте f2ko.de (http://f2ko.de/en/cmd.php).
Если у кого-то есть лучшее решение для такого рода команд, доступное по сложному пути, я буду очень рад услышать об этом.
Gilles