Batch file 查找循环文件名以查看它是否包含任何可能的?

Batch file 查找循环文件名以查看它是否包含任何可能的?,batch-file,Batch File,不知何故,我可以使用for循环(/R)来查看文件名是否包含三个或更多不同部分中的一个 for /R "C:\" %%A in ("*.*") do ( if %%~nxA==a*.txt echo a if %%~nxA==*b.txt echo b ) 等等 这可能吗?以下任一项应给出您指定的逻辑: for /r "c:\" %%F in ("a*.txt" "*b.txt") do echo %%F 或 但是,您必须意识到,您可能会得到重复的列表,因为像“a_b.txt”这样的文件将匹

不知何故,我可以使用for循环(/R)来查看文件名是否包含三个或更多不同部分中的一个

for /R "C:\" %%A in ("*.*") do (
if %%~nxA==a*.txt echo a
if %%~nxA==*b.txt echo b

)
等等


这可能吗?

以下任一项应给出您指定的逻辑:

for /r "c:\" %%F in ("a*.txt" "*b.txt") do echo %%F

但是,您必须意识到,您可能会得到重复的列表,因为像“a_b.txt”这样的文件将匹配两个掩码-每个掩码单独列出

您可以使用以下方法获得不同的值:

@echo off
setlocal disableDelayedExpansion
set "prior="
for /f "delims=" %%F in (
  'dir /s /b /a-d "c:\a*.txt" "c:\*b.txt" ^| sort'
) do (
  set "now=%%F"
  setlocal enableDelayedExpansion
  if !now! neq !prior! echo !now!
  endlocal
  set "prior=%%F"
)
或者,您可以使用my方便有效地排序和删除重复项。BAT是纯脚本(JScript/批处理混合),从XP开始在任何Windows机器上本机运行

dir /s /b /a-d "c:\a*.txt" "c:\*b.txt" | jsort /u
dir /s /b /a-d "c:\a*.txt" "c:\*b.txt" | jsort /u