如何将字符串附加到一个特定的行并从文件中的另一个特定行中删除一个字符串?

时间:2017-12-21 13:17:46

标签: 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=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的脚本中使用它。

1 个答案:

答案 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文章。