Batch file 循环回音星号批处理
我需要在批处理脚本中搜索文件夹中的多个文件,并回显不存在的文件,并为进一步的日志记录分配一个变量,但每当我的模式包含(*)标记时,就无法实现这一点。无论如何,我能做到这一点吗Batch file 循环回音星号批处理,batch-file,Batch File,我需要在批处理脚本中搜索文件夹中的多个文件,并回显不存在的文件,并为进一步的日志记录分配一个变量,但每当我的模式包含(*)标记时,就无法实现这一点。无论如何,我能做到这一点吗 SET pattern="abc*.txt" "ijk_*.txt" "xyz_*.txt" SET count=0 FOR %%A IN (%pattern%) DO (IF EXIST "%%A" (SET /a count+=1) ELSE ( ECHO %date% %time%: %%A file m
SET pattern="abc*.txt" "ijk_*.txt" "xyz_*.txt"
SET count=0
FOR %%A IN (%pattern%) DO (IF EXIST "%%A" (SET /a count+=1) ELSE (
ECHO %date% %time%: %%A file missing.
SET fileList=!fileList! %%A
))
您可以使用技巧将
模式
拆分为多行变量,然后在每行上迭代。我使用问号?
作为delimeter,因为它是一个,不能在文件名中使用
@echo off
SETLOCAL EnableDelayedExpansion
set patternlist="abc*.txt"?"ijk _*.txt"?"xyz_*.txt"
set pattern=!patternlist:?=^
!
SET count=0
FOR /F "delims=" %%A IN (!pattern!) DO (
if exist %%A (
SET /a count+=1
) ELSE (
ECHO %date% %time%: %%A file missing.
SET fileList=!fileList! %%A
)
)
for循环只迭代一次,它将整个模式用作一个参数,因此它将查找与
“*abc*.txt”“%ijk\u*.txt”“xyz\u*.txt”“匹配的任何文件。您需要研究/f“tokens=…”
语法来分割字符串。也许子例程可以更好地工作?请参阅以获取未测试的示例(未使用if语句测试,调用func应该可以正常工作)ok,用thx注释。我建议将第一行更改为SET“pattern=abc ijk_xyz”
,并将%%A IN(%pattern%)DO(如果存在“%%A*.txt”(SET/A count+=1)的第三行更改为(
。最好避免使用A
作为循环变量,尽管这是可能的,因为A
和A
也可以用作引用循环变量值的修饰符。打开A,运行获取/?
并阅读输出帮助,特别是关于%~aI
和其他修改的部分iers.A
可以用作循环变量,但建议避免将A
用作循环变量。@LasseV.Karlsen,这不是真的,for
循环解析每个模式,并通过与模式一一匹配的所有现有项循环;这使得如果存在
无用。。。