Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 如何将字符串附加到文件中的一个特定行,并从另一个特定行中删除字符串?_Windows_Batch File - Fatal编程技术网

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尝试了第二种解决方案