Je voudrais ajouter une remarque aux solutions ci-dessus:
Toutes ces syntaxes fonctionnent parfaitement bien SI VOTRE COMMANDE EST TROUVÉE DANS LE CHEMIN ou SI LA COMMANDE EST UN cmdpath SANS ESPACES OU CARACTÈRES SPÉCIAUX.
Mais si vous essayez d'utiliser une commande exécutable située dans un dossier dont le chemin contient des caractères spéciaux, vous devez placer votre chemin de commande entre guillemets doubles (") et la syntaxe FOR / F ne fonctionne pas.
Exemples:
$ 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.
ou
$ 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.
ou
`$ 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.
Dans ce cas, la seule solution que j'ai trouvée pour utiliser une commande et stocker son résultat dans une variable est de définir (temporairement) le répertoire par défaut sur celui de la commande elle-même:
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%
Le résultat est alors correct:
My selected folder: F:\GLW7\Distrib\System\OS install, recovery, VM\
Press any key to continue . . .
Bien sûr, dans l'exemple ci-dessus, je suppose que mon script batch est situé dans le même dossier que celui de ma commande exécutable afin que je puisse utiliser la syntaxe "% ~ d0% ~ p0". Si ce n'est pas votre cas, vous devez trouver un moyen de localiser votre chemin de commande et de remplacer le répertoire par défaut par son chemin.
NB: Pour ceux qui s'interrogent, l'exemple de commande utilisé ici (pour sélectionner un dossier) est FOLDERBROWSE.EXE. Je l'ai trouvé sur le site web f2ko.de ( http://f2ko.de/en/cmd.php ).
Si quelqu'un a une meilleure solution pour ce type de commandes accessible via un chemin complexe, je serai très heureux d'en entendre parler.
Gilles