如何在Windows批处理脚本中调用IF-ELSE IF条件?

goo*_*yui 0 windows batch-file

我们在一个文件夹中有数百个*.pdf文件.每个*.pdf都将命名约定为ABC_100_filename.pdfor ABC_200_filename.pdfABC_300_filename.pdf.

在批处理脚本中,我们调用*.exe文件,如下所示:

call test.exe 100  filename
call test.exe 200  filename
call test.exe 300  filename
Run Code Online (Sandbox Code Playgroud)

由于没有IF条件来验证文件,我们错误地加载了ID不正确的文件.

预期结果:test.exe 100应该调用文件ABC_100_Testfile.pdf.

我们错误地调用test.exe 200而不是执行此文件.

如何编写IF-ELSE IF条件以在批处理脚本中调用.exe文件.

if %str1:~0,7%==ABC_100 (call test.exe 100 filename)
pause
if %str2%==ABC_200 (call test.exe 200 filename)
Run Code Online (Sandbox Code Playgroud)

小智 5

  • 不需要call.exe(只有其他批处理文件才能返回)
  • 提供传递给test.exe的数字是封闭在_使用解析.

@Echo off
For /f "tokens=1-2* delims=_" %%A in (
    'Dir /B/A-D "*_*_*.pdf"'
) Do test.exe %%B "%%A_%%B_%%C"
Run Code Online (Sandbox Code Playgroud)

具有固定结构的文件名用于区分具有不同字符的元素,可以使用for/f(请参阅ss64.com/nt/for_f)将分隔的标记分发到相邻的元变量.

file name    : ABC_100_filename.pdf
delims       :    _   _
tokens       :  1 _ 2 _ * (rest)
for variable : %%A %%B %%C