对于循环文件名,看它是否包含任何可能的?

时间:2015-07-07 22:29:00

标签: batch-file

我可以在某种程度上使用for循环(/ R)来查看文件名是否包含三个或更多不同部分之一?

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

)

等?

这可能吗?

1 个答案:

答案 0 :(得分:0)

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

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

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

但是 ,你必须意识到你可以获得重复的列表,因为像#34; 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"
)

或者您可以使用我的JSORT.BAT utility方便有效地排序和删除重复项。 JSORT.BAT是纯脚本(JScript /批处理混合),可以在任何Windows机器上从XP开始本地运行。

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