Vorrei aggiungere un'osservazione alle soluzioni di cui sopra:
Tutte queste sintassi funzionano perfettamente SE IL TUO COMANDO È TROVATO NEL PERCORSO o SE IL COMANDO È UN Cmdpath SENZA SPAZI O CARATTERI SPECIALI.
Ma se si tenta di utilizzare un comando eseguibile situato in una cartella il cui percorso contiene caratteri speciali, è necessario racchiudere il percorso del comando tra virgolette doppie (") e quindi la sintassi FOR / F non funziona.
Esempi:
$ 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.
o
$ 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.
o
`$ 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.
In tal caso, l'unica soluzione che ho trovato per utilizzare un comando e memorizzare il suo risultato in una variabile è impostare (temporaneamente) la directory predefinita su quella del comando stesso:
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%
Il risultato è quindi corretto:
My selected folder: F:\GLW7\Distrib\System\OS install, recovery, VM\
Press any key to continue . . .
Ovviamente nell'esempio sopra, suppongo che il mio script batch si trovi nella stessa cartella di quello del mio comando eseguibile in modo da poter usare la sintassi "% ~ d0% ~ p0". Se questo non è il tuo caso, devi trovare un modo per individuare il tuo percorso di comando e cambiare la directory predefinita nel suo percorso.
NB: Per coloro che si chiedono, il comando di esempio utilizzato qui (per selezionare una cartella) è FOLDERBROWSE.EXE. L'ho trovato sul sito web f2ko.de ( http://f2ko.de/en/cmd.php ).
Se qualcuno ha una soluzione migliore per quel tipo di comandi accessibile attraverso un percorso complesso, sarò molto felice di sentirne parlare.
Gilles