我想创建一个脚本,循环遍历同一目录中的所有.txt
个文件并搜索keyword
。
如果找到keyword
,请将filename.txt
和keyword found
回显到temp.txt
否则将filename.txt
和keyword not found
回显到temp.txt
当前代码:
for /r D:\Users\hi\Documents\bat_for_random %%X in (*.txt)
findstr "HELLO KEYWORD " %%X &&
(
echo "keyword found" %%X >temp.txt
)
|| (
echo "keyword not found" %%X >temp.txt
)
pause
答案 0 :(得分:2)
您的for
语法错误,缺少do
关键字。此外,您错误地放置了&&
/ ||
和括号,您需要将它们放在一行中。最后,每次循环迭代时,重定向运算符>
都会覆盖文本文件temp.txt
;使用>>
代替将附加到文本文件;或者,更好的是,您可以仅重定向一次所有行。所以这是改进的代码:
> "temp.txt" (
for /R "D:\Users\hi\Documents\bat_for_random" %%X in ("*.txt") do (
> nul findstr /C:"HELLO KEYWORD " "%%~X" && (
echo keyword found "%%~nxX"
) || (
echo keyword not found "%%~nxX"
)
)
)
答案 1 :(得分:0)
没有必要有两个列表,一个包含匹配,一个不包含匹配。在现实世界中,你需要一个或另一个。
要获得具有字符串匹配的文件列表,请使用单个命令行(不需要For
循环等)。:
FindStr/SMC:"HELLO KEYWORD " "D:\Users\hi\Documents\bat_for_random\*.txt">"temp.txt"