【问题标题】:How would a date in HTML file using a .bat scriptHTML文件中的日期如何使用.bat脚本
【发布时间】:2020-07-23 12:26:12
【问题描述】:

我有一个 .html 文件 titlepage.html,其中包含以下行:

<span class="titlepage modified">Modified: Feb 13, 2020 </span>

问题是,有时我忘记更改“修改:”日期

我运行了一个 .bat 文件,它将这个 titlepage.html 移动到正确的位置,所以我认为在 .bat 文件中添加一个子例程以在移动它之前更新日期是有意义的。

我当前的 .bat 文件如下所示:

@echo off
setlocal enabledelayedexpansion

set infile=titlepage.html
set outfile=result.html
Set find=Modified:
set replace="<span class="titlepage modified">Modified: %DATE% </span>"

del result.html

for /F "tokens=1,2 delims=" %%n in (!infile!) do (
set LINE=%%n
set TMPR=!LINE:%find%=%replace%!
echo !TMPR!>>%outfile%
)

我的问题看起来像: &lt;span class="titlepage modified"&gt;"&lt;span class="titlepage modified"&gt;Modified: 04/10/20 &lt;/span&gt;" Feb 13, 2020 &lt;/span&gt;

所以它成功输入了我想要的信息,但我需要它来替换有问题的整行,而不仅仅是我用于查找的部分。

*请注意,日期是任意的,因此我无法对整行执行查找。

所以我想: 1. 查找包含字符串的行 2. 用我的新输入替换整行。

提前致谢。

【问题讨论】:

  • 脚本的相关输出是什么样的?它会给你错误吗?由于所有这些特殊字符,在批处理脚本中处理任何 XML/HTML 都非常棘手。我很确定您不需要 set replace = "..." 行中的外引号,但您确实需要转义 &lt;&gt; 字符。 ^&lt;^&gt;.
  • 我同意上面的观点,这个任务应该修改为使用powershell而不是batch-file

标签: html batch-file scripting


【解决方案1】:
@echo off
setlocal enabledelayedexpansion

set "target=./titlepage.html"
set "destination=./titlepage.html"
set "find=(?mi)^.*Modified:.*$"
set "replace=<span class=\"titlepage modified\">Modified: %DATE% </span>"

powershell -noprofile -command^
 $content=get-content -path '!target!';^
 $result=$content -replace '!find!', '!replace!';^
 set-content -path '!destination!' -value $result

powershell 读取目标./titlepage.html,进行替换并写入目标./titlepage.html

正则表达式模式在一行中搜索Modified:find 变量包含模式并使用选项(?mi)m 是多行模式,i 不区分大小写。如果您希望不区分大小写,请删除 i

正则表达式模式:

  • (?mi) 正则表达式选项。 m 是多行,i 不区分大小写。
  • ^ 默认情况下,匹配必须从字符串的开头开始;在多行模式下,它必须从行首开始。
  • . 通配符:匹配除 \n 之外的任何单个字符。
  • * 匹配前一个元素零次或多次。
  • $ 默认情况下,匹配必须出现在字符串的末尾或者字符串末尾的\n之前;在多行模式下,它必须出现在行尾之前或行尾的 \n 之前。

替换字符串:

  • \" 转义嵌套双引号,用于命令行解析到 powershell

查看Regular Expression Language - Quick Reference了解更多信息。

powershell 命令的行尾的^ 是行继续。

【讨论】:

  • 感谢您的帮助,但是运行脚本似乎没有结果。我尝试使用不同的日期格式和不同的 titlepage.html 路径。但是 titlepage.html 似乎没有任何变化,并且在运行时也没有抛出任何类型的错误或警告。
  • 我已根据您的任意需求更新了代码以类似于 OP 代码,因为我之前发布的模式存在疑问。只要文件被读取、处理和写入,就不会显示错误。如果模式不匹配,则文件内容不会改变。
猜你喜欢
  • 2021-11-21
  • 1970-01-01
  • 1970-01-01
  • 2010-11-01
  • 2020-09-16
  • 1970-01-01
  • 1970-01-01
  • 2021-07-01
  • 2018-06-01
相关资源
最近更新 更多