批处理通配符奇怪的行为

时间:2015-06-26 18:54:33

标签: windows batch-file cmd wildcard

我有一个我正在循环的文件列表,它匹配一定大小的字母(A,B,C,D)。这些文件的格式为### T ##### A ### _#rev 1.dxf,其中rev 1仅在某些时候出现,而A指的是大小,即A,B, C或D.当我尝试在集合 D .dxf或 B .dxf中循环浏览这些文件时,也会找到一些A文件。我目前使用模式????????? A * .dxf,但想将其扩展为更多文件类型,而无需制作多个批处理文件。有趣的是,如果我使用模式 T A * .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循环中丢弃短名称匹配?

1 个答案:

答案 0 :(得分:0)

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

FBSDKCoreKit