Me gustaría agregar un comentario a las soluciones anteriores:
Todas estas sintaxis funcionan perfectamente bien SI SU COMANDO SE ENCUENTRA DENTRO DEL CAMINO o SI EL COMANDO ES UN CMDpath SIN ESPACIOS O CARACTERES ESPECIALES.
Pero si intenta usar un comando ejecutable ubicado en una carpeta cuya ruta contiene caracteres especiales, entonces necesitará encerrar su ruta de comando entre comillas dobles (") y luego la sintaxis FOR / F no funciona.
Ejemplos:
$ 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.
En ese caso, la única solución que encontré para usar un comando y almacenar su resultado en una variable es establecer (temporalmente) el directorio predeterminado en el comando en sí:
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%
El resultado es entonces correcto:
My selected folder: F:\GLW7\Distrib\System\OS install, recovery, VM\
Press any key to continue . . .
Por supuesto, en el ejemplo anterior, supongo que mi script por lotes se encuentra en la misma carpeta que la de mi comando ejecutable para que pueda usar la sintaxis "% ~ d0% ~ p0". Si este no es su caso, entonces debe encontrar una manera de ubicar su ruta de comando y cambiar el directorio predeterminado a su ruta.
NB: Para aquellos que se preguntan, el comando de muestra utilizado aquí (para seleccionar una carpeta) es FOLDERBROWSE.EXE. Lo encontré en el sitio web f2ko.de ( http://f2ko.de/en/cmd.php ).
Si alguien tiene una mejor solución para ese tipo de comandos accesibles a través de una ruta compleja, me alegrará saberlo.
Gilles