循环的批处理文件似乎正在运行一次额外的时间/迭代

时间:2013-05-06 19:20:45

标签: windows loops for-loop batch-file

我正在尝试将批处理文件放在一起,以便在除光驱之外的系统上的每个逻辑驱动器上运行程序。它过滤掉了光驱,但出于某种原因,我测试的构建命令的回声运行了一个额外的时间,除了变量没有值。这就像循环在空值上迭代额外的时间。想法?

(IF NOT!驱动!==%safe%只是确保我不运行脚本所在驱动器的命令,“safe”只是一个缩写)

for /F "usebackq skip=1 tokens=1,2" %%a IN (`wmic logicaldisk get DeviceID^,DriveType`) do (
    SET drive=%%a
    SET driveType=%%b
    IF NOT !drive! == %safe% (
        IF NOT !driveType! == 5 (
        ECHO test commands
        )
    )
)

1 个答案:

答案 0 :(得分:1)

wmic在结果报告的末尾添加一个回车符。尝试这样的事情:

for /f "skip=1 tokens=1,2" %%a IN ('wmic logicaldisk get DeviceID^,DriveType ^| findstr /v /r /c:"^$"') do (
    SET drive=%%a
    SET driveType=%%b
    IF NOT !drive! == %safe% (
        IF NOT !driveType! == 5 (
            ECHO test commands
        )
    )
)

注意:由于您的命令不包含转发标记,因此不需要usebackqfindstr只搜索一个空行(即正则表达式是“行首,后跟行尾”)。