Ich möchte den obigen Lösungen eine Bemerkung hinzufügen:
Alle diese Syntaxen funktionieren einwandfrei, wenn Ihr Befehl im Pfad gefunden wurde oder wenn der Befehl ein Cmd-Pfad ohne Leerzeichen oder Sonderzeichen ist.
Wenn Sie jedoch versuchen, einen ausführbaren Befehl zu verwenden, der sich in einem Ordner befindet, dessen Pfad Sonderzeichen enthält, müssen Sie Ihren Befehlspfad in doppelte Anführungszeichen (") setzen, und die FOR / F-Syntax funktioniert dann nicht.
Beispiele:
$ 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.
oder
$ 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.
oder
`$ 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 diesem Fall besteht die einzige Lösung, die ich gefunden habe, um einen Befehl zu verwenden und sein Ergebnis in einer Variablen zu speichern, darin, das Standardverzeichnis (vorübergehend) auf das des Befehls selbst zu setzen:
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%
Das Ergebnis ist dann richtig:
My selected folder: F:\GLW7\Distrib\System\OS install, recovery, VM\
Press any key to continue . . .
Im obigen Beispiel gehe ich natürlich davon aus, dass sich mein Batch-Skript im selben Ordner befindet wie der meines ausführbaren Befehls, damit ich die Syntax "% ~ d0% ~ p0" verwenden kann. Wenn dies nicht der Fall ist, müssen Sie einen Weg finden, Ihren Befehlspfad zu finden und das Standardverzeichnis in seinen Pfad zu ändern.
NB: Für diejenigen, die sich fragen, lautet der hier verwendete Beispielbefehl (zum Auswählen eines Ordners) FOLDERBROWSE.EXE. Ich habe es auf der Website f2ko.de ( http://f2ko.de/en/cmd.php ) gefunden.
Wenn jemand eine bessere Lösung für diese Art von Befehlen hat, auf die über einen komplexen Pfad zugegriffen werden kann, würde ich mich sehr freuen, davon zu hören.
Gilles