Saya ingin menambahkan komentar ke solusi di atas:
Semua sintaks ini bekerja dengan baik JIKA PERINTAH ANDA DITEMUKAN DALAM JALAN atau JIKA PERINTAH ADALAH cmdpath TANPA RUANG ATAU KARAKTER KHUSUS.
Tetapi jika Anda mencoba menggunakan perintah yang dapat dieksekusi yang terletak di folder yang jalurnya berisi karakter khusus, maka Anda harus menyertakan jalur perintah Anda menjadi tanda kutip ganda (") dan kemudian sintaks FOR / F tidak bekerja.
Contoh:
$ 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.
atau
$ 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.
atau
`$ 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.
Dalam hal itu, satu-satunya solusi yang saya temukan untuk menggunakan perintah dan menyimpan hasilnya dalam sebuah variabel adalah dengan mengatur (sementara) direktori default ke salah satu dari perintah itu sendiri:
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%
Hasilnya kemudian benar:
My selected folder: F:\GLW7\Distrib\System\OS install, recovery, VM\
Press any key to continue . . .
Tentu saja dalam contoh di atas, saya berasumsi bahwa skrip batch saya terletak di folder yang sama dengan salah satu perintah yang dapat dieksekusi sehingga saya dapat menggunakan sintaks "% ~ d0% ~ p0". Jika ini bukan kasus Anda, maka Anda harus menemukan cara untuk menemukan jalur perintah Anda dan mengubah direktori default ke jalurnya.
NB: Bagi mereka yang bertanya-tanya, perintah sampel yang digunakan di sini (untuk memilih folder) adalah FOLDERBROWSE.EXE. Saya menemukannya di situs web f2ko.de ( http://f2ko.de/en/cmd.php ).
Jika ada yang memiliki solusi yang lebih baik untuk perintah semacam itu yang dapat diakses melalui jalur yang kompleks, saya akan sangat senang mendengarnya.
Gilles