在文件夹中搜索* .html并运行特定代码

时间:2011-12-18 23:02:21

标签: types batch-file

输入“S:\ Images * .html”| findstr / v签名| findstr / v密封剂| findstr / v构造> S:\ Images \ .html

我开发了上述文字。我不是批处理脚本中最好的,但是我知道如何使用变量(在PHP和C ++中)。

我的目标是更新用户电子邮件签名文件。 (我试图删除三行文字)。 为了做到这一点,我想在他们的共享驱动器中搜索任何html文件,并尝试找到我需要删除的三行。

问题是我对变量不太了解并在批处理脚本中搜索。我想覆盖我正在修改的文件。

2 个答案:

答案 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"