【问题标题】:Batch wildcard strange behavior批量通配符奇怪的行为
【发布时间】:2015-09-13 19:49:40
【问题描述】:

我有一个我正在循环的文件列表,这些文件与某个大小的字母(A、B、C、D)匹配。这些文件的格式为###T####A###_# rev 1.dxf,其中 rev 1 仅在某些时候存在,A 指的是大小,即 A、B、 C 或 D。当我尝试在一组 D.dxf 或 B.dxf 中循环这些文件时,还会发现一些 A 文件。我目前使用模式?????????A*.dxf,但希望将其扩展到更多文件类型,而不必制作多个批处理文件。有趣的是,如果我使用模式 TA*.dxf,通配符的行为正常。

为什么会发生这种情况,我该如何解决它,同时仍要捕获 A 可能位于开头、结尾、中间等位置的文件?如果您需要任何说明或额外信息,请随时提出。

这是我的相关代码:

FOR %%S IN (A,B,C,D) DO (
echo Converting size %%S. . .
FOR %%F in ("%filepath%\?????????%%S*.dxf") DO (
    echo Converting %%~nxF to PDF, size %%S
    SET %%S=!%%S! "%%~pF%%~nF.pdf"
    "C:\Program Files\AutoDWG\AutoDWG DWG to PDF Converter\d2p.exe"  /InFile %%~fF /OutFile %%~nF.pdf /Watermark %~dp0%%Swatermark.wdf /InConfigFile %~dp0%%S.ddp
)
echo:
echo Combining %%Ss. . .
pdftk !%%S! cat output "%filepath%\print\%%Ss.pdf"
echo Combined
echo:
)

编辑:我在 32 位 Windows XP 上运行它。这和this thread?有关系吗?我回家再调查。

编辑 2:我现在已经找出问题所在。当我有多个具有相同开头字符的文件时,8.3 短名称包含一个十六进制数字,它可能与我正在搜索的字母之一匹配。如何在我的 for 循环中丢弃短名称匹配?

【问题讨论】:

    标签: windows batch-file cmd wildcard


    【解决方案1】:

    您指向Strange Windows DIR command behavior 线程的链接似乎是个好主意。来自RBerteig's thorough answer命令提示符下的通配符与长文件名和短“8.3”名称(如果存在)匹配......。尝试下一种方法:

    SETLOCAL enableextensions enabledelayedexpansion
    :::
    pushd %filepath%
    FOR %%F in ("*.dxf") DO (
      set "fname=%%~nF"
      set "fmatch="
      set "char04=!fname:~3,1!"
      set "char10=!fname:~9,1!"
      if /I "!char04!"=="T" (
        FOR %%S in (A B C D) do if /I "!char10!"=="%%S" set "fmatch=!fname!"
      )
      if defined fmatch (
         echo Converting %%~nxF to PDF, size !char10!
         rem another stuff here
      )
    )
    popd
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-12
      • 2013-08-20
      • 2018-06-13
      • 1970-01-01
      • 2021-10-22
      相关资源
      最近更新 更多