我尝试在找到特定字符串后在文件中插入多行字符串。我已经搜索并尝试了很多选项,但没有一个能返回我预期的结果。
这是我想要编辑的块:
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。
]
如果脚本的其他地方有,则可能存在问题,因此如果您有任何问题,请告诉我。