Làm cách nào để đảm bảo đường dẫn đầy đủ trong vòng lặp FOR FOR của Windows


3

Tôi đã tạo một tệp chung (hoặc Windows Command) cho phép tôi lặp qua nội dung của một thư mục và gọi lệnh cho từng mục.

IF a%1==a ( set _DIR="%CD%") ELSE ( set _DIR="%~1")
IF a%2==a ( set _COMMAND=rem) ELSE ( set _COMMAND=%2)
IF a%3==a ( set _FILTER=*.*) ELSE ( set _FILTER=%3)
set _OPTS=%4

FOR /F "delims=" %%f IN ('dir %_DIR%\%_FILTER% %_OPTS% /b') DO (
%_COMMAND% "%%f"
)

Nhưng, tôi đang cố xác định làm thế nào để đảm bảo rằng tôi gọi %_COMMAND%đúng tệp.

Tôi đã thử chờ trước biến thư mục ở phía trước %_COMMAND% %_DIR%\"%%f", nhưng điều này để lại dấu ngoặc kép trong tham số tôi truyền. Ví dụ: nếu tôi gọi tệp bó của mình exec_dir.batvà gọi nó bằng tệp sau echo_test.bat, tôi thấy rằng tất cả các tệp đều có dấu ngoặc kép khi echo_test.batchạy.

echo %~dpn1.mp4

Tập lệnh bó đó tạo ra:

> exec_dir.bat "C:\Users\User\Desktop\Test Folder" echo_test.bat *.txt
C:\Users\User\Desktop\Test Folder\"Test File.txt
C:\Users\User\Desktop\Test Folder\"Test2.txt

Tôi nghĩ rằng nó có liên quan đến \nhân vật thoát hiểm, nhưng dường như tôi không thể làm việc xung quanh nó.


tôi không chắc liệu có bất kỳ ý tưởng nào trong số những ý tưởng này sẽ giúp ích không nhưng bạn biết% 1% ~ f1 làm cho nó đầy đủ. Ngoài ra, dir / b dường như không cung cấp đường dẫn đầy đủ, nhưng dir / b / s thì có, mặc dù tôi đoán bạn không muốn / s. một suy nghĩ khác là bạn có thể cắt các bit của biến môi trường, ví dụ echo abc, sau đó echo% a: ~ 1,2% không chắc chắn nếu điều đó hữu ích với bạn
barlop

Câu trả lời:


0
đặt tiêu điểm
nếu "% ~ 1" == "" (đặt dir =.) khác (đặt dir = "% ~ 1")
if "% ~ 2" == "" (đặt lệnh = echo) khác (đặt lệnh =% ~ 2)
nếu "% ~ 3" == "" (đặt mặt nạ = *) khác (đặt mặt nạ =% ~ 3)
cho / r% dir %%% f trong (% mask%) thực hiện% lệnh %%% ~ dpnxf

Hoặc đơn giản:

C: \> cho / r. % f trong (*) làm @echo% ~ dpnxf

1
Tôi đã không sử dụng FOR /R %_DIR% %%f IN (%_FILTER%) DOcú pháp vì tôi muốn hỗ trợ cho đệ quy.
palswim
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.