Windows 如何将字符串附加到文件中的一个特定行,并从另一个特定行中删除字符串?
我想在我的属性文件中附加和删除一些值 这是我的属性文件:Windows 如何将字符串附加到文件中的一个特定行,并从另一个特定行中删除字符串?,windows,batch-file,Windows,Batch File,我想在我的属性文件中附加和删除一些值 这是我的属性文件: ## Portal.Group=Security Role:Extranet Role Portal.Advisor=MAS:MAS,SRM:SRM,SIV:SIV,ADN:ADN,IFA:IFA,ACC:ACC,BSR:BSR,TRD:TRD,VOC:VOC,VFC:VFC,VFA:VFA,BDD:BDD,EFA:EFA,EAC:EAC,DDM:DDM,PFM:PFM,PDA:PDA,PAM:PAM Portal.Customer=CU
## Portal.Group=Security Role:Extranet Role
Portal.Advisor=MAS:MAS,SRM:SRM,SIV:SIV,ADN:ADN,IFA:IFA,ACC:ACC,BSR:BSR,TRD:TRD,VOC:VOC,VFC:VFC,VFA:VFA,BDD:BDD,EFA:EFA,EAC:EAC,DDM:DDM,PFM:PFM,PDA:PDA,PAM:PAM
Portal.Customer=CUS:CUS,CTU:CTU,CTM:CTM,AMR:AMR,FSS:FSS,GSV:GSV
TC.SecurityRoles=MAS,SRM,SIV,ADN,IFA,ACC,EFA,EAC,CUS,DDM,CTU,CTM,PFM,PDA,PAM
我想将此值COA:COA,ALW:ALW
附加到以Portal.Advisor
开头的行中
我想从以Portal.Customer
开头的行中删除此值CTU:CTU,CTM:CTM
我在Linux上通过使用sed命令实现了这一目标,但现在我需要在基于Windows的脚本中使用它。此任务的第一个可能解决方案是仅使用Windows命令解释器内部命令:
@echo off
if not exist "PropertyFile.txt" goto :EOF
setlocal EnableExtensions EnableDelayedExpansion
set "PropertyFile=PropertyFile.txt"
set "TempFile=%TEMP%\%~n0.tmp"
del "%TempFile%" 2>nul
for /F "usebackq delims=" %%I in ("%PropertyFile%") do (
set "Line=%%I"
if /I "!Line:~0,15!" == "Portal.Advisor=" (
set "Line=!Line!,COA:COA,ALW:ALW"
) else if /I "!Line:~0,16!" == "Portal.Customer=" (
set "Line=!Line:CTU:CTU,CTM:CTM,=!"
)
echo !Line!>>"%TempFile%"
)
move /Y "%TempFile%" "%PropertyFile%" 2>nul
if errorlevel 1 del "%TempFile%"
endlocal
第二种可能的解决方案是使用Dave Benham编写的,它是批处理文件/JScript的混合体,用于使用两个正则表达式替换在属性文件中追加和删除字符串:
@echo off
if not exist "PropertyFile.txt" goto :EOF
if not exist "%~dp0jrepl.bat" goto :EOF
call "%~dp0jrepl.bat" "^(Portal.Advisor=.+)$" "$1,COA:COA,ALW:ALW" /I /F "PropertyFile.txt" /O -
call "%~dp0jrepl.bat" "^(Portal.Customer=.*)CTU:CTU,CTM:CTM," "$1" /I /F "PropertyFile.txt" /O -
要了解所使用的命令及其工作方式,请打开命令提示符窗口,在其中执行以下命令,并非常仔细地阅读为每个命令显示的所有帮助页面
呼叫/?
del/?
echo/?
endlocal/?
获取/?
goto/?
如果/?
移动/?
设置/?
setlocal/?
还可以阅读Microsoft关于解释
>
和2>nul
的文章,太棒了!来吧,告诉我们进展如何!还是要我们帮你?在这种情况下,展示你的努力,告诉我们你已经尝试了什么。你没有提到或不能使用的原因是什么?你已经问过这个问题了。我使用JREPL.bat尝试了第二种解决方案