当检查文件存在时评估DelayedExpansion变量作为驱动器号

问题描述:

我有这块应该检查USB驱动器的代码,然后如果他们有一个文件标记为我的实用驱动器之一,它运行对它们进行robocopy同步以确保它们是最新的。当检查文件存在时评估DelayedExpansion变量作为驱动器号

问题是它没有正确评估文件的路径。如果我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: 
+0

我怀疑你的命令'wmic logicaldisk其中“drivetype = 2和access = 0”get name/format:value'没有返回你认为的那样。 – aphoria

+0

哎呀,只是想添加一个编辑,它有它应该的,通过一些临时回声测试。 – user3207335

+0

在'SET'curDrive = %% d“'行后面加'ECHO %% d'和'ECHO!curDrive!'。要么显示你的期望? – aphoria

试试这个:

@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. 
    ) 
) 

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

+0

辉煌!这就是我在没有充分理解的情况下拼凑碎片而得到的结果。这很好,谢谢。 – user3207335

这是另一种方法,您可以在定义的系统中使用,在驱动器上查找唯一文件,然后运行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.