Tôi đang cố gắng viết một kịch bản lệnh có được (trong số những thứ khác) một danh sách tất cả các ổ đĩa mà máy tính có. Mã cơ bản trông giống như sau:Tại sao vòng lặp FOR/f trong tập lệnh batch này đánh giá một dòng trống?
REM Build the list of disk drives to monitor
SETLOCAL enabledelayedexpansion
FOR /f "skip=1 tokens=1 delims=:" %%a in ('"WMIC logicaldisk WHERE drivetype=3 GET deviceid"') do (
SET "DISK_DATABASES=!DISK_DATABASES!%%a|"
SET "DRIVES_TO_MONITOR=!DRIVES_TO_MONITOR!%%a:\\|"
)
Tôi khá rõ ràng là xây dựng hai danh sách có định dạng hơi khác nhau để sử dụng sau này. Khi tôi chạy này, tuy nhiên, sản lượng tôi nhận được một cái gì đó trông như thế này:
C|D|E||
C:\\|D:\\|E:\\|:\\|
Bây giờ, tôi hy vọng các ống dấu trong cả hai trường hợp và tôi có thể quản lý đó, nhưng tôi thực sự bối rối vì sao có thêm mục nhập trống trong đó. Nếu tôi chạy lệnh wmic
theo cách thủ công, tôi có thể thấy rằng thực sự có một dòng trống ở cuối đầu ra, nhưng sự hiểu biết của tôi là /f
đặc biệt phải bỏ qua các dòng trống.
Nếu tôi bật ECHO
vào, có vẻ như dòng cuối cùng đó chỉ đến như một dòng trả lại/dòng mới hoặc tương tự. Có cách nào để làm những gì tôi mong đợi không? Tui bỏ lỡ điều gì vậy? Tôi đã cố gắng để viết một điều kiện if
trong vòng lặp để loại trừ dòng cuối cùng này, nhưng nó đã được ... sôi nổi và không bao giờ làm việc. Tôi đánh giá cao bất kỳ/tất cả trợ giúp.
Wow, chúng ta đang sống và học tập, chúng ta không? Tôi tự hỏi tại sao một tiện ích như WMIC lại tạo ra một ký tự ' 'duy nhất trên một dòng đầu tiên ... Hoặc có thể đó là kết quả của những gì @matt đã phát hiện ra. –
Tôi cho rằng nó không phải là vấn đề unicode, như ngay cả trong XP Microsoft did't biết làm thế nào kết thúc dòng riêng của họ nên được. IPconfig (XP) cũng tạo ra các kết thúc dòng bất thường – jeb
Nhờ cả jeb và matt cho các câu trả lời. Cả hai giải pháp đều hoạt động, nhưng jeb's không yêu cầu tôi tạo các tệp tạm thời để tôi chấp nhận nó. – Morinar