输入“S:\ Images * .html”| findstr / v签名| findstr / v密封剂| findstr / v构造> S:\ Images \ .html
我开发了上述文字。我不是批处理脚本中最好的,但是我知道如何使用变量(在PHP和C ++中)。
我的目标是更新用户电子邮件签名文件。 (我试图删除三行文字)。 为了做到这一点,我想在他们的共享驱动器中搜索任何html文件,并尝试找到我需要删除的三行。
问题是我对变量不太了解并在批处理脚本中搜索。我想覆盖我正在修改的文件。
答案 0 :(得分:1)
你是怎么得到这段代码的?您应该逐步学习如何在实施解决方案(是否是BAT文件),阅读手册,尝试自己以及调试问题方面取得进展。
当您尝试编写代码时,您将意识到TYPE
命令的作用(它不会列出目录)。请参阅“帮助类型”。
您需要使用FOR
命令。请参阅HELP FOR
,然后在命令行中尝试此操作
FOR %a in (*.HTML) do @echo %a
然后阅读HELP FINDSTR
并在命令行中尝试此操作
FOR %a in (*.HTML) do @findstr /v "Signature sealants construction" %a
你差不多完成了。要将它放在.BAT文件中,您需要做一些小的更改:要在BAT中使用FOR,您需要将%va替换为%% a;添加一些@echo和其他咒语;在命令行中删除@; ...
将所有部分放在一起,请使用以下代码
@echo off
FOR %%a in (*.HTML) do (
FINDSTR /i /v "Signature sealants construction" %%a >%%~na.html.new
)
echo del *.html
echo ren *.html.new *.html
测试并修改它以满足您的需求,请记住,这只是一个起点。完全正确后,请删除ECHO
。
答案 1 :(得分:1)
for "eol=: delims=" %%f in ('findstr /s /m /l "Signature sealants construction" "*.html"') do (
findstr /l /v "Signature sealants construction" "%%f" >"%%f.tmp"
del "%%f"
ren "%%f.tmp" "%%~nxf"
)
以上内容应从您要开始搜索的文件夹中运行。外循环查找包含任何单词的所有html文件。在循环内部,它将每个找到的文件写入.tmp文件,删除包含至少一个单词的任何行。然后它只删除旧文件并将.tmp重命名为原始文件。
如果希望搜索区分大小写,请将/ i选项添加到两个FINDSTR命令中。
我担心搜索过于笼统。任何单词都可以出现在多个上下文中。这可能会导致灾难性的意外结果。我想你可能需要更具体的模式来搜索。 FINDSTR支持粗略的正则表达式。如果你能为要删除的每一行找出一个好的正则表达式,你可以将/ l改为/ r并用三个/ c:“regularExpression”参数替换带引号的搜索字符串,每个正则表达式一个。当然,这将对两个FINDSTR命令完成。如果.html的名称具有一些模式以使其更具选择性,它也可能有所帮助。
最后,不要简单地覆盖原始.html,而是保留原件的副本会更安全,以防出现问题。我建议用
替换代码中的del "%%f"
行
del "%%f.bak" 2>nul
ren "%%f" "%%~nxf.bak"