使用批处理脚本,如何查找每个文件夹中是否存在给定文件?

时间:2012-12-25 16:42:11

标签: batch-file

我有一个根文件夹" Basic"它有子文件夹" 1"," 2"和" 3"。 " 1"有子文件夹" 11"," 12"和" text.txt"。同样地" 2"有子文件夹" 22"," 21"和" text.txt"。 " 3"已经" 31"和" 32"。

我需要一个批处理文件程序来查找" text.txt"存在于每个文件夹中。如果它不存在于特定的根文件夹" Basic"中,我想在missingfile.txt中写下子文件夹的名称。

这是我的帐户 - 它不起作用。

set value = ""
set exact = ""
cd "C:\Users\bthirumurthy\Desktop\Basic"
dir  "C:\Users\bthirumurthy\Desktop\Basic" /b >> text.txt
for %%a in (text.txt) do (
  if (%%a|="text.txt") (
    dir  C:\Users\bthirumurthy\Desktop\Basic\%%a /b >> C:\Users\bthirumurthy\Desktop\Basic\%%a\result.txt
    for %%b in (result.txt) do (
      if(%%b == "text.txt") (
        set exact = %%b
        set status = 1
      )
      else (
        set missingfile =%%b
        set status = 0
      )
    )
    if (%status% == 1) (
      echo %exact% pass >> pass.txt
    )
    else (
      echo %exact% fail >> Missingfile.txt
    )
    set status = ""
  )
)>>output.txt

你能帮帮我吗?

1 个答案:

答案 0 :(得分:2)

我没有花时间弄清楚你的脚本出错的地方。但是,只需要命令行中的简单单线程。无需批处理:

>missingFile.txt (for /r "C:\Users\bthirumurthy\Desktop\Basic" %F in (.) do @if not exist "%F\test.txt" echo %~fF)

如果在批处理脚本中运行,则将所有百分比加倍。 (%变为%%

基本上,这个单行程序从指定的根目录(for /d /r循环)开始遍历目录树。对于每个子目录,它检查指定的文件是否存在于其中(或者,如果不存在,则检查它是否存在:if not exist ...)。如果该文件不存在,则相应子目录的完整路径将记录到missingfile.txt。实际上,路径只是echo ed(echo %~fF),但整个循环的输出已被重定向(行的开头为>missingFile.txt),因此,{ {1}}写入文件。

编辑 - 稍微简单的变体

echo

除非IN()子句中存在通配符,否则FOR / R循环不会检查文件是否存在。如果没有通配符,它​​只需遍历目录树并在每个目录中构建一个带有文件名的路径。