Yukarıdaki çözümlere bir açıklama eklemek istiyorum:
Tüm bu sözdizimleri, KOMUTANIZ YOLDA BULUNDUĞUNDA veya KOMUT, BOŞLUKLAR VEYA ÖZEL KARAKTERLER OLMAYAN bir cmdyoluysa mükemmel şekilde çalışır.
Ancak, yolun özel karakterler içeren bir klasörde bulunan çalıştırılabilir bir komutu kullanmaya çalışırsanız, komut yolunuzu çift tırnak işareti (") içine almanız gerekir ve bu durumda FOR / F sözdizimi çalışmaz.
Örnekler:
$ 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.
veya
$ 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.
veya
`$ 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.
Bu durumda, bir komutu kullanmak ve sonucunu bir değişkene kaydetmek için bulduğum tek çözüm, varsayılan dizini (geçici olarak) komutun kendisine ayarlamaktır:
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%
Sonuç daha sonra doğrudur:
My selected folder: F:\GLW7\Distrib\System\OS install, recovery, VM\
Press any key to continue . . .
Elbette yukarıdaki örnekte, toplu komut dosyamın "% ~ d0% ~ p0" sözdizimini kullanabilmem için yürütülebilir komutumla aynı klasörde bulunduğunu varsayıyorum. Sizin durumunuz bu değilse, komut yolunuzu bulmanın ve varsayılan dizini yoluna değiştirmenin bir yolunu bulmanız gerekir.
Not: Merak edenler için, burada kullanılan örnek komut (bir klasör seçmek için) FOLDERBROWSE.EXE'dir. Bunu f2ko.de ( http://f2ko.de/en/cmd.php ) web sitesinde buldum .
Karmaşık bir yoldan erişilebilen bu tür komutlar için daha iyi bir çözüme sahip biri varsa, bunu duymaktan çok memnun olacağım.
Gilles