当检查文件存在时评估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:
答
试试这个:
@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.
我怀疑你的命令'wmic logicaldisk其中“drivetype = 2和access = 0”get name/format:value'没有返回你认为的那样。 – aphoria
哎呀,只是想添加一个编辑,它有它应该的,通过一些临时回声测试。 – user3207335
在'SET'curDrive = %% d“'行后面加'ECHO %% d'和'ECHO!curDrive!'。要么显示你的期望? – aphoria