Windows批处理脚本:检查文件中是否存在

时间:2016-08-10 12:03:13

标签: batch-file

我需要编写一个Windows批处理脚本。 从给定目录开始,我需要检查具有给定文件名的每个文件中是否至少出现一个给定文本。

例如为: 从目录C:\ MyDir开始,我需要检查此目录和所有子目录中名称为" MyFile.txt"的文件。找到的每个文件必须至少出现一次文本" MyText"。

到目前为止我所拥有的是:

PackageInfo pInfo = getPackageManager().getPackageInfo(getPackageName(), 0); String version = pInfo.versionName;//Version Name int verCode = pInfo.versionCode;//Version Code

问题:

  • 这也匹配名为MyFile.txtXXX
  • 的文件
  • 它只会打印事件,但不会"返回"是否找到这样的存在。此代码位于批处理脚本中,如果有一个没有这种情况的文件,则该脚本必须以错误退出。

2 个答案:

答案 0 :(得分:1)

阅读findstr /?:搜索文件中的字符串。

FINDSTR [/B] [/E] [/L] [/R] [/S] [/I] [/X] [/V] [/N] [/M] [/O] [/P] [/F:file]
        [/C:string] [/G:file] [/D:dir list] [/A:color attributes] [/OFF[LINE]]
        strings [[drive:][path]filename[ ...]]
  …
  /S         Searches for matching files in the current directory and all subdirectories.
  …

下一个命令应该找到并显示所有匹配项:

FINDSTR /S /i /c:"MyText" C:\MyDir\MyFile.txt

下一个命令应该找到所有匹配项并仅显示(完全限定的)文件名:

FINDSTR /M /S /i /c:"MyText" C:\MyDir\MyFile.txt

答案 1 :(得分:1)

findstr /v不能像预期的那样工作,所以你必须使用一个小技巧:使用findstr并使用它的errorlevel来找到“找不到字符串”:

for /r %%a in (myfile.txt) do findstr /i "MyText" %%a >nul && echo yes: %%a|| echo no:  %%a
  • for /r是递归的(在子目录中搜索)(使用for而不是findstr /s一个接一个地处理每个文件,以便能够检查每个文件的errorlevel而不是完整的findstr /s列表)
  • &&作为“如果上一个命令(findstr)成功,那么”
  • ||的作用是“如果上一个命令(findstr)失败,那么”