我想追加并删除属性文件中的一些值。
这是我的属性文件:
## 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
。
我想从CTU:CTU,CTM:CTM
开始的行中删除此值Portal.Customer
。
我使用 sed 命令在Linux上实现了这一目标,但现在我需要在基于Windows的脚本中使用它。
答案 0 :(得分:1)
此任务的第一个可能的解决方案,仅使用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 编写的JREPL.bat的第二个可能的解决方案,它是一个批处理文件/ 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 -
要了解使用的命令及其工作原理,请打开命令提示符窗口,执行以下命令,并完全阅读为每个命令显示的所有帮助页面。
call /?
del /?
echo /?
endlocal /?
for /?
goto /?
if /?
move /?
set /?
setlocal /?
另请阅读有关Using Command Redirection Operators解释>>
和2>nul
的Microsoft文章。