我有一个根文件夹" 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
你能帮帮我吗?
答案 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循环不会检查文件是否存在。如果没有通配符,它只需遍历目录树并在每个目录中构建一个带有文件名的路径。