Fügen Sie nach einer bestimmten Zeichenfolge eine mehrzeilige Zeichenfolge hinzu

Fügen Sie nach einer bestimmten Zeichenfolge eine mehrzeilige Zeichenfolge hinzu

Ich versuche, einen mehrzeiligen String in eine Datei einzufügen, nachdem ein bestimmter String gefunden wurde. Ich habe bereits gesucht und viele Optionen ausprobiert, aber keine davon hat das erwartete Ergebnis geliefert.

Hier ist der Block, den ich bearbeiten möchte:

var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');
var log = require("cf-nodejs-logging-support");

var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');

var app = express(); //After this line I want to insert several lines

app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

app.use('/', indexRouter);
app.use('/users', usersRouter);

module.exports = app;

Und ein Beispiel für die Zeilen, die ich einfügen möchte:

function x (test){
    console.log("TEST");
}

Die endgültige Datei sollte dann folgendermaßen aussehen:

var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');
var log = require("cf-nodejs-logging-support");

var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');

var app = express();

function x (test){
    console.log("TEST");
}

app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

app.use('/', indexRouter);
app.use('/users', usersRouter);

module.exports = app;

Eine der möglichen Lösungen, die ich ausprobiert habe, ist der folgende Codeblock, aber ich konnte nicht mehrere Zeilen mit Leerzeichen einfügen:

@echo off
setlocal enabledelayedexpansion
ren in.txt in.tmp
set p=
for /f %%a in (in.tmp) do (
if "%%a"=="5" if "!p!"=="var app = express();" Echo 4 >> in.txt
Echo %%a >>in.txt
set p=%%a
)
del in.tmp

Mir wäre eine Lösung am liebsten, bei der keine zusätzliche Software installiert werden muss. Aber wenn es nicht anders geht, wäre das auch in Ordnung. Ich arbeite derzeit auf einem Windows 7-PC, aber dieses Skript sollte auch unter Windows 10 funktionieren.

Mein gesamtes Skript (das viel größer ist als das, was ich hier gezeigt habe) ist als einfache Batchdatei geschrieben.

Antwort1

Ich habe viele übermäßig komplexe Methoden ausprobiert, bevor ich zu folgendem Ergebnis kam:

@echo off

set "txt=C:\Your\Text\File.txt"
set "old=var app = express();"

setlocal enabledelayedexpansion
for /f "delims=" %%A in ('type "%txt%" ^| find /v /n "" ^& break ^> "%txt%" ') do (
    set "line=%%A"
    set "line=!line:*]=!"
    if not "!line!" == "!old!" >>"%txt%" echo(!line!
    if "!line!" == "!old!" (
        echo(!old!
        echo.
        echo(function x ^(test^)^{
        echo(   console.log^("TEST"^);
        echo(^}
    )>>"%txt%"
)

endlocal

Es ist eigentlich ganz einfach – der einzige ausgefallene Teil hier ist das 'type "%txt%" ^| find /v /n "" ^& break ^> "%txt%" '-Bit, weil es uns davon abhält, eine neue Datei erstellen zu müssen. Außerdem müssen wir den Zeilenzählkram vom Anfang der !line!Variablen entfernen, bevor wir sie wieder in unsere Datei schreiben (das macht es set "line=!line:*]=!").

Darüber hinaus werden alle Ihre Zeilen durchgesehen und wenn dies nicht der Fall ist, var app = express();wird die Zeile einfach so wie sie ist in die Datei zurückgesendet. Wenn die ZeileIst var app = express();Stattdessen werden „echos“ angezeigt, var app = express();gefolgt von einer leeren Zeile ( echo.) und dann den Zeilen, die Sie hinzufügen wollten. Außerdem müssen Sie daran denken, „ ('s“, )„'s“ und }„'s“ zu maskieren.

Möglicherweise liegt ein Problem vor, wenn Sie ]an einer anderen Stelle im Skript "s" haben. Wenn Sie also Fragen haben, lassen Sie es mich einfach wissen.

verwandte Informationen