0

我有一个根文件夹“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

你能帮帮我吗?

4

1 回答 1

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. 实际上,路径只是echoed ( echo %~fF),但整个循环的输出已被重定向(>missingFile.txt行首的 ),因此echo写入文件。

编辑 - 一个稍微简单的变化

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

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

于 2012-12-25T20:21:55.153 回答