Windows 批处理通配符异常行为
我有一个文件列表,我正在循环通过它匹配某个大小的字母(a,B,C,D)。这些文件的格式是##############rev 1.dxf,其中rev 1只在某些时间存在,而A指的是大小,即A、B、C或D。当我尝试在集合D.dxf或B.dxf中循环这些文件时,也会找到一些A文件。我目前使用的模式是A*.dxf,但我想将其扩展到更多的文件类型,而不必制作多个批处理文件。有趣的是,如果我使用模式TA*.dxf,则通配符的行为正常 为什么会发生这种情况?我如何在捕获文件时修复它,而文件的开头、结尾、中间等可能是A?如果您需要任何澄清或额外信息,请随时询问 这是我的相关代码:Windows 批处理通配符异常行为,windows,batch-file,cmd,wildcard,Windows,Batch File,Cmd,Wildcard,我有一个文件列表,我正在循环通过它匹配某个大小的字母(a,B,C,D)。这些文件的格式是##############rev 1.dxf,其中rev 1只在某些时间存在,而A指的是大小,即A、B、C或D。当我尝试在集合D.dxf或B.dxf中循环这些文件时,也会找到一些A文件。我目前使用的模式是A*.dxf,但我想将其扩展到更多的文件类型,而不必制作多个批处理文件。有趣的是,如果我使用模式TA*.dxf,则通配符的行为正常 为什么会发生这种情况?我如何在捕获文件时修复它,而文件的开头、结尾、中间等
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位WindowsXP上运行这个。这和我回家后调查有什么关系吗
编辑2:我现在知道问题出在哪里了。当我有几个文件具有相同的开头字符时,8.3短名称包含一个十六进制数,它可能与我正在搜索的一个字母匹配。如何在for循环中丢弃短名称匹配项?您对该线程的链接似乎是个好主意。From:如果存在长文件名和短“8.3”名称,则命令提示下的通配符将与长文件名和短“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