检查文件名是否包含子字符串

时间:2018-10-03 11:58:03

标签: batch-file cmd

我浏览目录并通过循环检查所有文件。

for %%f in (*.doc ) do (
  echo full name: %%f
  echo name without suffix: %%~nxf
)

例如类似“ 1234-important.doc”的文件 我需要以某种方式识别“-”和“ .doc”之间的内容,并将此值设置为变量标志以进行下一步处理。

IF [$flag] == [*"-important"*] (
  echo important
)

您对此有何建议? 也许在文件名上使用一些正则表达式?

3 个答案:

答案 0 :(得分:2)

如果文件名中只有一个连字符,则以下代码有效。它使用嵌套的FOR命令通过连字符分隔基本文件名。

@echo off
for %%F in (*.doc ) do (
    echo full name: %%F
    echo name without suffix: %%~nF
    for /F "tokens=2 delims=-" %%G IN ("%%~nF") DO (
        IF /I "%%G"=="important" (echo File is important) else Echo File is not important
    )
)

这第二组代码使用FINDSTR命令检查基本文件名是否以您要查找的字符串结尾。然后使用条件执行来确定执行哪个回显命令。如果前一个命令成功执行,则使用双“&”号执行。如果先前的命令不成功,则使用双管道执行。

for %%F in (*.doc ) do (
    set "flag="
    echo full name: %%F
    echo name without suffix: %%~nF
    echo %%~nF|findstr /E /I "important" >nul 2>&1 &&echo File is Important || echo file is not important
)

答案 1 :(得分:0)

下面是一个也使用文件名的示例:

forfiles /M *important* /C "cmd /c echo @file : important"

答案 2 :(得分:0)

这里是搜索包含字符串的文件的示例。 STR变量可以设置为正在寻找的任何变量。

SET "STR=*-important*"
FOR /F "delims=" %%f IN ('DIR /B "%STR%" 2^>NUL') DO (
    ECHO %%~f
)