在特定字符串后添加多行字符串

在特定字符串后添加多行字符串

我尝试在找到特定字符串后在文件中插入多行字符串。我已经搜索并尝试了很多选项,但没有一个能返回我预期的结果。

这是我想要编辑的块:

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;

以下是我想插入的几行的示例:

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

所以最终的文件应该是这样的:

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;

我尝试过的一个潜在解决方案是以下代码块,但我无法让它插入包含空格的多行:

@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

我非常希望找到一种不需要安装任何额外软件的解决方案。但如果没有其他办法,这也行。我目前正在使用 Windows 7 PC,但此脚本也应该适用于 Windows 10。

我的整个脚本(比我在这里展示的要大得多)是作为简单的批处理文件编写的。

答案1

我尝试了很多过于复杂的方法,最后得出了以下方法:

@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

它实际上非常简单 - 这里唯一花哨的部分是'type "%txt%" ^| find /v /n "" ^& break ^> "%txt%" '因为它阻止我们创建新文件,并且它还要求我们从变量的开头删除行计数内容,!line!然后再将其写回我们的文件(这就是所做的set "line=!line:*]=!")。

除此之外,它还会查看所有行,如果不是,var app = express();它只会将该行按原样回显到文件中;如果该行 var app = express();它会回显后面var app = express();跟着一个空行 ( echo.) 的行,然后是您要添加的行。另一件要记住的事情是转义('s、)'s 和}'s。

]如果脚本的其他地方有,则可能存在问题,因此如果您有任何问题,请告诉我。

相关内容