我需要将以下单行插入许多计算机上的现有文本文件中。因此,我需要在批处理文件中将其自动化。
要添加的行:
<.add key="StudentAccountPaymentRunEnvironment" value="PRODUCTION"/>
此字符串的目的地位于名为O2-config.txt
的文件中,并且在O2-config.txt
文件中,我需要在下面显示的行之后插入上面显示的行:
<.add key="TuitionPaymentRunEnvironment" value="PRODUCTION"/.>
所以最终结果将是:
现有
<.add key="TuitionPaymentRunEnvironment" value="PRODUCTION"/>
新
<.add key="StudentAccountPaymentRunEnvironment" value="PRODUCTION"/>
在这两行之前和之后都有很多行文本。请指教。我搜索了linux
,但没有找到Windows/Command Prompt
的解决方案。我想将此解决方案放在可以与Windows组策略一起执行的.bat
文件中。
答案 0 :(得分:0)
您可以获得sed from this site的Windows端口。
使用它,您可以执行以下命令:
sed -i "s/<.add key=.TuitionPaymentRunEnvironment. value=.PRODUCTION.\/>/&\n<.add key=\"StudentAccountPaymentRunEnvironment\" value=\"PRODUCTION\"\/>/" somefile.txt
然后,需要修复行尾:
sed -i ":a;N;$!ba;s/\n/\r\n/g" somefile.txt
请注意,我假设您的文件中只有该文本的一个实例。
对于仅修改该字符串的第一个匹配项的解决方案,您可以将其放入批处理文件中:
set MATCH=.add key=.TuitionPaymentRunEnvironment. value=.PRODUCTION.
sed "0,/%MATCH%/ {s/%MATCH%\/>/&\n<.add key=\"StudentAccountPaymentRunEnvironment\" value=\"PRODUCTION\"\/>/}" somefile.txt > temp.txt
sed ":a;N;$!ba;s/\n/\r\n/g" temp.txt > somefile.txt
del temp.txt
答案 1 :(得分:0)
Windows 10随附PowerShell,因此您可以使用:
## Q:\Test\2018\12\07\SO_53661614.ps1
$Ins = [RegEx]::escape('<.add key="TuitionPaymentRunEnvironment" value="PRODUCTION"/>')
$New = [RegEx]::escape('<.add key="StudentAccountPaymentRunEnvironment" value="PRODUCTION"/>')
(Get-Content .\yourfile.txt) -replace $Ins,($Ins+"`n"+$new)|Set-Content .\yourfile.txt
将其分批包装:
:: Q:\Test\2018\12\07\SO_53661614.cmd
Set "Ins=<.add key="TuitionPaymentRunEnvironment" value="PRODUCTION"/>"
Set "New=<.add key="StudentAccountPaymentRunEnvironment" value="PRODUCTION"/>"
Powershell -Nop -C "(Get-Content .\yourfile.txt).replace($ENV:Ins,$ENV:Ins+\"`n\"+$ENV:New)|Set-Content .\yourfile.txt"
答案 2 :(得分:0)
对于 PURE BATCH 解决方案,我们可以使用for
循环和if
语句来查找第一个字符串,然后在下一行插入预定义的字符串短语。
下面,您可以在文件名中配置(或合并一个循环以搜索多个文件),搜索字符串以及添加字符串的行。请不要在行上添加任何字符,例如,使用转义字符<
来照顾>
和^
等特殊字符。示例:^<
。基本原始脚本来自Magoo。
@ECHO OFF
@setlocal EnableDelayedExpansion
Rem | Configuration
Set "FileToEdit=O2-config.txt"
Set "LineToFind=<.add key="TuitionPaymentRunEnvironment" value="PRODUCTION"/>"
Set "LineToPutAfter=^<.add key="StudentAccountPaymentRunEnvironment" value="PRODUCTION"/^>"
Rem | Check If "FileToEdit" Exists
if not exist "%FileToEdit%" (
echo File "%FileToEdit%" Not Found!
pause
goto :EOF
)
goto StartFunction
:StartFunction
Rem | Export SearchString
echo !LineToFind!>> %~dp0LineToFind.txt
Rem | Add Text Under %LineToFind%
(
FOR /f "delims=" %%i IN (LineToFind.txt) DO (
SET AddAfter=%%i
FOR /f "delims=" %%n IN ('findstr /n "^" %FileToEdit%') DO (
SET line=%%n
SET line=!line:*:=!
ECHO(!line!
IF "!line!"=="!AddAfter!" ECHO(%LineToPutAfter%
)
)
)>>%FileToEdit%.TEMP
Rem | Remove LineToFind.txt
DEL LineToFind.txt
Rem | Delete Original File, Restore New
DEL %FileToEdit%
REN %FileToEdit%.TEMP %FileToEdit%
goto :EOF
输入示例:
<.add key="Test1" value="PRODUCTION"/>
<.add key="Test2" value="PRODUCTION"/>
<.add key="Test3" value="PRODUCTION"/>
<.add key="Test4" value="PRODUCTION"/>
<.add key="TuitionPaymentRunEnvironment" value="PRODUCTION"/>
<.add key="Test5" value="PRODUCTION"/>
<.add key="Test6" value="PRODUCTION"/>
输出示例:
<.add key="Test1" value="PRODUCTION"/>
<.add key="Test2" value="PRODUCTION"/>
<.add key="Test3" value="PRODUCTION"/>
<.add key="Test4" value="PRODUCTION"/>
<.add key="TuitionPaymentRunEnvironment" value="PRODUCTION"/>
<.add key="StudentAccountPaymentRunEnvironment" value="PRODUCTION"/>
<.add key="Test5" value="PRODUCTION"/>
<.add key="Test6" value="PRODUCTION"/>
要获取有关任何命令的帮助,请执行以下操作:
call /?
set /?
for /?
if /?
find /?