Tôi muốn thêm một nhận xét cho các giải pháp trên:
Tất cả các cú pháp này hoạt động hoàn toàn tốt NẾU QUYỀN CỦA BẠN ĐƯỢC TÌM KIẾM TRONG ĐƯỜNG hoặc NẾU QUYỀN LÀ một cmdpath KHÔNG CÓ SPACES HOẶC ĐẶC ĐIỂM ĐẶC BIỆT.
Nhưng nếu bạn cố gắng sử dụng một lệnh thực thi nằm trong thư mục chứa đường dẫn chứa các ký tự đặc biệt thì bạn sẽ cần phải đóng đường dẫn lệnh của mình thành dấu ngoặc kép (") và sau đó cú pháp FOR / F không hoạt động.
Ví dụ:
$ 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.
hoặc là
$ 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.
hoặc là
`$ 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.
Trong trường hợp đó, giải pháp duy nhất tôi tìm thấy để sử dụng lệnh và lưu trữ kết quả của nó trong một biến là đặt (tạm thời) thư mục mặc định thành chính lệnh đó:
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%
Kết quả là chính xác:
My selected folder: F:\GLW7\Distrib\System\OS install, recovery, VM\
Press any key to continue . . .
Tất nhiên trong ví dụ trên, tôi giả sử rằng tập lệnh bó của tôi nằm trong cùng thư mục với một trong những lệnh thực thi của tôi để tôi có thể sử dụng cú pháp "% ~ d0% ~ p0". Nếu đây không phải là trường hợp của bạn, thì bạn phải tìm cách xác định vị trí đường dẫn lệnh của mình và thay đổi thư mục mặc định thành đường dẫn của nó.
NB: Đối với những người thắc mắc, lệnh mẫu được sử dụng ở đây (để chọn thư mục) là FOLDERBROWSE.EXE. Tôi tìm thấy nó trên trang web f2ko.de ( http://f2ko.de/en/cmd.php ).
Nếu bất cứ ai có một giải pháp tốt hơn cho loại lệnh đó có thể truy cập thông qua một đường dẫn phức tạp, tôi sẽ rất vui mừng khi nghe về nó.
Gilles