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
我更像是一个 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