如何使用 * 或 ?使用 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_121
或 jre1.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命令解释器的纠错处理。
@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_121
或 jre1.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命令解释器的纠错处理。