Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 批处理通配符异常行为_Windows_Batch File_Cmd_Wildcard - Fatal编程技术网

Windows 批处理通配符异常行为

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,则通配符的行为正常 为什么会发生这种情况?我如何在捕获文件时修复它,而文件的开头、结尾、中间等

我有一个文件列表,我正在循环通过它匹配某个大小的字母(a,B,C,D)。这些文件的格式是##############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位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