Batch file 使用批处理脚本替换所有
我试图在一个多次出现的文件中找到“tenant\u id=1234”并替换为“tenant\u id=649”。我找到了下面的代码,但在变量中添加=/space时无法替换。我也尝试过逃避角色,但有些人认为它不起作用。请让我知道如何使用.bat文件中的批处理脚本来实现此要求Batch file 使用批处理脚本替换所有,batch-file,escaping,Batch File,Escaping,我试图在一个多次出现的文件中找到“tenant\u id=1234”并替换为“tenant\u id=649”。我找到了下面的代码,但在变量中添加=/space时无法替换。我也尝试过逃避角色,但有些人认为它不起作用。请让我知道如何使用.bat文件中的批处理脚本来实现此要求 @echo off setlocal EnableExtensions EnableDelayedExpansion set "INTEXTFILE=test.txt" set "OUTTEXTFILE=test_out.tx
@echo off
setlocal EnableExtensions EnableDelayedExpansion
set "INTEXTFILE=test.txt"
set "OUTTEXTFILE=test_out.txt"
set "SEARCHTEXT=tenant_id ^= 1234"
set "REPLACETEXT=tenant ^= 123456"
echo %SEARCHTEXT%
echo %REPLACETEXT%
for /f "delims=" %%A in ('type "%INTEXTFILE%"') do (
set "string=%%A"
set "modified=!string:%SEARCHTEXT%=%REPLACETEXT%!"
echo !modified!>>"%OUTTEXTFILE%"
)
del "%INTEXTFILE%"
rename "%OUTTEXTFILE%" "%INTEXTFILE%"
endlocal
这是一个很容易实现的任务,使用Dave Benham编写的是批处理文件/JScript的混合体,可以使用JScript在文件上运行正则表达式替换
@echo off
if not exist "test.txt" goto :EOF
if not exist "%~dp0jrepl.bat" goto :EOF
call "%~dp0jrepl.bat" "(tenant_id *= *)1234" "$1649" /F "test.txt" /O -
批处理文件首先检查要修改的文件是否存在,如果此条件不成立,则立即退出,请参阅
批处理文件JREPL.BAT必须存储在与具有上述代码的批处理文件相同的目录中。因此,批处理文件接下来检查批处理文件的目录中是否确实存在JREPL.BAT,如果此条件不正确,则退出
正则表达式搜索字符串的含义是:
…(
。。。查找在替换字符串为)
中引用的字符串,以保持查找到的字符串的这部分从$1
。。。区分大小写的字符串租户id
租户id
。。。有0个或更多空格*
。。。和一个等号=
。。。再加上0个或更多的空格*
。。。以及字符1234
1234
tenant\u id
开头,以1234
结尾,以1
结尾,并将1234
替换为649
也可以在搜索字符串中使用正则表达式\d+
而不是1234
,来查找包含一个或多个数字的任何数字
要了解所使用的命令及其工作方式,请打开命令提示符窗口,在其中执行以下命令,并非常仔细地阅读为每个命令显示的所有帮助页面
。。。还解释了呼叫/?
。。。参数0的驱动器和路径,它是始终以反斜杠结尾的批处理文件路径%~dp0
echo/?
goto/?
如果/?
jrepl.bat/?
@echo off
if not exist "test.txt" goto :EOF
if not exist "%~dp0jrepl.bat" goto :EOF
call "%~dp0jrepl.bat" "(tenant_id *= *)1234" "$1649" /F "test.txt" /O -
批处理文件首先检查要修改的文件是否存在,如果此条件不成立,则立即退出,请参阅
批处理文件JREPL.BAT必须存储在与具有上述代码的批处理文件相同的目录中。因此,批处理文件接下来检查批处理文件的目录中是否确实存在JREPL.BAT,如果此条件不正确,则退出
正则表达式搜索字符串的含义是:
…(
。。。查找在替换字符串为)
中引用的字符串,以保持查找到的字符串的这部分从$1
。。。区分大小写的字符串租户id
租户id
。。。有0个或更多空格*
。。。和一个等号=
。。。再加上0个或更多的空格*
。。。以及字符1234
1234
tenant\u id
开头,以1234
结尾,以1
结尾,并将1234
替换为649
也可以在搜索字符串中使用正则表达式\d+
而不是1234
,来查找包含一个或多个数字的任何数字
要了解所使用的命令及其工作方式,请打开命令提示符窗口,在其中执行以下命令,并非常仔细地阅读为每个命令显示的所有帮助页面
。。。还解释了呼叫/?
。。。参数0的驱动器和路径,它是始终以反斜杠结尾的批处理文件路径%~dp0
echo/?
goto/?
如果/?
jrepl.bat/?
-replace
操作符的PowerShell,所以您可以直接使用它,也可以从批处理中将其作为工具调用
@echo off
setlocal EnableExtensions EnableDelayedExpansion
set "INTEXTFILE=test.txt"
set "SEARCHTEXT=tenant_id = 1234"
set "REPLACETEXT=tenant = 123456"
powershell -NoP -C "(Get-Content $ENV:INTEXTFILE) -Replace $ENV:SEARCHTEXT,$ENV:REPLACETEXT|Set-Content $ENV:INTEXTFILE"
如果文本包含字符*()^$[]
,将被解释为REs,您可以切换到
.Replace()
方法(需要PSv3+)
或者使用[RegEx]::escape()自动转义文本
Windows7+包含带基于正则表达式的
-replace
运算符的PowerShell,所以您可以直接使用它,也可以从批处理中将其作为工具调用
@echo off
setlocal EnableExtensions EnableDelayedExpansion
set "INTEXTFILE=test.txt"
set "SEARCHTEXT=tenant_id = 1234"
set "REPLACETEXT=tenant = 123456"
powershell -NoP -C "(Get-Content $ENV:INTEXTFILE) -Replace $ENV:SEARCHTEXT,$ENV:REPLACETEXT|Set-Content $ENV:INTEXTFILE"
如果文本包含字符*()^$[]
,将被解释为REs,您可以切换到
.Replace()
方法(需要PSv3+)
或者使用[RegEx]::escape()自动转义文本
谢谢你的解决方案。我不能将我发布的代码简单地修改为include=/space。@SaiKrishna您的“简单”代码(我自己的代码更简单,实际上只有一行)不能用于包含空行或包含一个或多个感叹号的行的文件。纯批处理文件解决方案仅使用Windows命令处理器命令,而不使用其他脚本语言(包括支持的JScript),因为Windows 95需要大量额外的代码,请参阅和。@SaiKrishna使用纯
cmd.exe
命令修改文本文件就像使用将钉子钉入硬盘一样。根据钉子的大小和形状(=要修改的绳子)和boa,也可以用线人钳将钉子打入硬板