如何使用 * 或 ?使用 repl.bat 更新文本文件期间批处理文件中的字符?

How to use * or ? character in batch file during update of a text file using repl.bat?

@echo off & setlocal
set "search=jre1.8.0_?"
set "replace=jre1.8.0_156"
set "textfile=C:\Program Files\ABC\_ABC_installation\Uninstall_ABC.lax"
set "newfile=C:\Program Files\ABC\_ABC_installation\Uninstall_ABC1.lax"
pause;
call repl.bat "%search%" "%replace%" L < "%textfile%" >"%newfile%"
pause;
del "%textfile%"
rename "%newfile%" "%textfile%"
pause;

批处理文件应该匹配 jre1.8.0_121jre1.8.0_152.

所以我想用 jre1.8.0_156 替换 jre1.8.0_?,但是 ?* 都无法替换。

替换可以很好地删除此通配符。

已弃用 repl.bat 以及 JREPL.BAT 使用提供正则表达式支持的 JScript。

在ECMAScript/JavaScript/JScript/Perl正则表达式语法中\d+[0-9]+匹配1个或多个数字,即正整数。

所以在批处理文件中使用的命令行是使用 jrepl.bat:

的那两行之一
call jrepl.bat "jre1\.8\.0_\d+" "jre1.8.0_156" /F "%ProgramFiles%\ABC\_ABC_installation\Uninstall_ABC.lax" /O -
call jrepl.bat "jre1\.8\.0_[0-9]+" "jre1.8.0_156" /F "%ProgramFiles%\ABC\_ABC_installation\Uninstall_ABC.lax" /O -

或者在仍然使用 repl.bat.

的情况下使用这两行之一
set "search=jre1\.8\.0_\d+"
set "search=jre1\.8\.0_[0-9]+"

. 在正则表达式搜索字符串中有特殊含义。默认情况下,它表示除换行符之外的任何字符(根据 Unicode 标准)。要将 . 解释为文字字符,必须使用反斜杠对其进行转义。

必须在使用 repl.bat 时删除选项 L,因为搜索字符串不再是按字面查找的字符串,而是正则表达式字符串。

只要输入和输出文件同名,使用已弃用 repl.bat 的批处理代码就无法工作。即使对输出文件使用不同的名称,发布的批处理代码也不起作用,因为命令 rename 要求指定没有路径的新文件名。
命令 move 可用于将输入文件替换为修改后的输出文件。

整个批处理代码确实可以使用已弃用的 repl.bat

@echo off & setlocal
set "search=jre1\.8\.0_\d+"
set "replace=jre1.8.0_156"
set "textfile=%ProgramFiles%\ABC\_ABC_installation\Uninstall_ABC.lax"
set "newfile=%ProgramFiles%\ABC\_ABC_installation\Uninstall_ABC.tmp"
call repl.bat "%search%" "%replace%" <"%textfile%" >"%newfile%"
move /Y "%newfile%" "%textfile%"

提示:不要在命令后使用分号pause。绝对不需要分号。 pause后面的分号只是测试Windows命令解释器的纠错处理。