Chciałbym dodać uwagę do powyższych rozwiązań:
Wszystkie te składnie działają doskonale, JEŻELI POLECENIE ZNAJDUJE SIĘ W ŚCIEŻCE lub JEŻELI POLECENIE JEST ŚCIEŻKĄ CMD BEZ SPACJI I ZNAKÓW SPECJALNYCH.
Ale jeśli spróbujesz użyć wykonywalnego polecenia znajdującego się w folderze, którego ścieżka zawiera znaki specjalne, musisz ująć ścieżkę polecenia w podwójne cudzysłowy ("), a składnia FOR / F nie będzie działać.
Przykłady:
$ 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.
lub
$ 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.
lub
`$ 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.
W takim przypadku jedynym rozwiązaniem, które znalazłem, aby użyć polecenia i zapisać jego wynik w zmiennej, jest ustawienie (tymczasowo) domyślnego katalogu na katalog samego polecenia:
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%
Wynik jest wtedy poprawny:
My selected folder: F:\GLW7\Distrib\System\OS install, recovery, VM\
Press any key to continue . . .
Oczywiście w powyższym przykładzie zakładam, że mój skrypt wsadowy znajduje się w tym samym folderze co jedno z moich poleceń wykonywalnych, więc mogę użyć składni „% ~ d0% ~ p0”. Jeśli tak nie jest, musisz znaleźć sposób na zlokalizowanie ścieżki poleceń i zmienić domyślny katalog na jego ścieżkę.
NB: Dla tych, którzy się zastanawiają, przykładowe polecenie użyte tutaj (do wybrania folderu) to FOLDERBROWSE.EXE. Znalazłem go na stronie internetowej f2ko.de ( http://f2ko.de/en/cmd.php ).
Jeśli ktoś ma lepsze rozwiązanie dla tego rodzaju poleceń dostępnych poprzez złożoną ścieżkę, z przyjemnością o tym usłyszę.
Gilles