检查文件是否存在时,将DelayedExpansion变量评估为驱动器号

时间:2014-01-17 16:03:46

标签: windows batch-file cmd delayedvariableexpansion

我已经有了这个代码块,我们应该检查USB驱动器,如果他们有一个文件将它们标记为我的一个实用程序驱动器,它会在它们上运行robocopy同步来制作确定他们是最新的。

问题是它没有正确评估文件的路径。如果我echo "!curDrive!\file.txt"打印\file.txt"

脚本的相关(清理/匿名)位是:

@echo off
Setlocal EnableDelayedExpansion
for /f "tokens=2 delims==" %%d in ('wmic logicaldisk where "drivetype=2 and access=0" get name /format:value') DO (
    SET "curDrive=%%d"
    echo Looping variable set to %%d
    echo Current drive set to !curDrive!
    if exist "!curDrive!\file.txt" (
        ...
    )
)

我已经调试过的回声,我得到了所有迭代的预期输出,例如,

Looping variable set to L:
Current drive set to L:

2 个答案:

答案 0 :(得分:2)

试试这个:

@echo off
Setlocal EnableDelayedExpansion
for /f %%d in ('wmic logicaldisk where "drivetype=2 and access=0" get name^|find ":"') DO (
    SET "curDrive=%%d"
    if exist "!curDrive!\file.txt" (
       Echo found it. 
    ) ELSE (
       Echo File not found. 
    )
)

您正在返回需要过滤的额外回车。

答案 1 :(得分:0)

这是您可以在已定义的系统中使用的另一种方法,在驱动器上查找唯一文件,然后运行robocopy。添加其余的驱动器号。

@echo off
for %%a in (c d e f g h i j) do if exist "%%a:\unique-file.txt" echo found the file.