【问题标题】:Batch Wildcard in FileName/Path not Working文件名/路径中的批处理通配符不起作用
【发布时间】:2020-08-04 20:23:49
【问题描述】:

我更像是一个 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 参数执行所需的命令:for %%f in (rev*.pdf) do %PDF_DS_P% "%PWD%HR Docs\HR Welcome (%%~Nf).pdf"
  • 让我们看看 - 9 行什么都不做和 1 行混淆命令。
  • 有趣的是 Aacini 是如何回答这个问题的@user12341753

标签: batch-file wildcard


【解决方案1】:

在 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"
)

【讨论】:

    【解决方案2】:

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

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

    @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
    

    【讨论】:

      猜你喜欢
      • 2019-05-14
      • 1970-01-01
      • 2014-11-05
      • 2011-05-15
      • 1970-01-01
      • 2018-03-22
      • 2012-09-29
      • 2011-12-18
      • 2018-12-12
      相关资源
      最近更新 更多