FileName/Path 中的批量通配符不起作用

Batch Wildcard in FileName/Path not Working

我更像是一个 bash 的人,然后是批处理,我正在努力理解为什么这个通配符不起作用。我有一个批处理文件来打印文件,但我想通配修订号。

例如:这个有效:

@ECHO OFF
CLS

ECHO PRINTING HR PACKAGE
PAUSE

SET PDF_DS_P=call "Print_PDF_Double_Sided.cmd"
SET PWD=\Orientation Package\HR\
SET F1="%PWD%HR Docs\HR Welcome (rev02.00).pdf"
%PDF_DS_P% %F1%

Double_Sided.CMD

%PRINTCMD% "%~1" "\%SERVER%\%SHARE%"

但是如果我执行以下操作,它会破坏脚本:

SET F1="%PWD%HR Docs\HR Welcome (rev*).pdf"

在bash中,通配符会自动扩展为一系列文件,并对每个文件执行一个命令。在批号在批处理中,您必须通过 FOR 命令显式扩展通配符,然后使用 FOR 参数执行所需的命令:

@ECHO OFF
CLS

ECHO PRINTING HR PACKAGE
PAUSE

SET PDF_DS_P=call "Print_PDF_Double_Sided.cmd"
SET PWD=\Orientation Package\HR\

for %%f in (rev*.pdf) do (
   %PDF_DS_P% "%PWD%HR Docs\HR Welcome (%%~Nf).pdf"
)

转换为一个函数,但立即注意到一个警告(我没有调试,因为我可以忍受)。

警告:这找到了第一个字母数字结果,如果有多个文件,这将是最糟糕的选择,我想要最后一个字母数字结果。随意添加更好的答案以获得赞成票!

@ECHO OFF
setlocal enabledelayedexpansion
CLS

SET PWD="C:\tmp
set  RevFile=%PWD%\Rev*.pdf"
ECHO %RevFile%
CALL :FINDFILEWILDCARD %RevFile% RevFile

:FINDFILEWILDCARD
for %%f in (%~1) do (
 SET %2="%%~f"
 EXIT /B
)

ECHO %RevFile%
PAUSE