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
循环解析每个模式,并通过与模式一一匹配的所有现有项循环;这使得
如果存在
无用。。。