我有一个名为client.props的现有文件,我需要创建一个批处理脚本来阅读文档并查找root=
并将其替换为root=path_of_file
。我使用了下面提到的脚本:
@echo off
setlocal enableextensions disabledelayedexpansion
set "search=root="
set "replace=root=%~dp0"
set "textFile=client.props"
set "textFile1=client1.props"
for /f "delims=" %%i in ('type "%textFile%" ^& break ^> "%textFile1%" ') do
(
set "line=%%i"
setlocal enabledelayedexpansion
set "line=!line:%search%=%replace%!"
>>"%textFile1%" echo(!line!
endlocal
)
我在批处理脚本中的表现不是很好,请帮我解决这个问题。如果文件在F:\temp\file\client.props
中可用且其中一行开头为root=
,则批处理应将其修改为root=F:\temp\file
。
在:
root=
后:
root=F:\temp\file
答案 0 :(得分:0)
=
符号不能在子字符串替换语法!line:%search%=%replace%!
中使用,因为=
将搜索字符串和替换字符串分开。
您可以更改for /F
循环,使其分割=
字符的每一行,并检查左侧部分是否为root
而右侧是否为空:
@echo off
setlocal enableextensions disabledelayedexpansion
set "search=root="
set "replace=root=%~dp0"
set "textFile=client.props"
set "textFile1=client1.props"
for /f "delims=" %%i in ('type "%textFile%" ^& break ^> "%textFile1%" ') do (
>>"%textFile1%" (
for /f "tokens=1,* delims==" %%a in ("%%i") do (
if /i "%%a="=="%search%" (
if "%%b"=="" (
echo(%replace%
) else (
echo(%%i
)
) else (
echo(%%i
)
)
)
)
正如您所看到的,甚至没有必要延迟扩展。但是,如果存在类似=root==
的行,则此方法会失败,因为前导分隔符将被忽略,后续分隔符将被视为一个分隔符。要进行区分大小写的搜索字符串比较,请从/i
命令行中删除if
选项。
请注意,替换后的行以\
终止,例如root=F:\temp\file\
。