如何将新的文本字符串插入现有文本文件中的特定位置

时间:2018-12-07 00:24:06

标签: windows batch-file windows-10

我需要将以下单行插入许多计算机上的现有文本文件中。因此,我需要在批处理文件中将其自动化。

要添加的行:

<.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文件中。

3 个答案:

答案 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 /?
  • 等等。