我試圖在找到特定字串後在文件中插入多行字串。我已經搜索並嘗試了很多選項,但沒有一個會返回我期望的結果。
這是我要編輯的區塊:
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。
]
如果腳本中的其他地方有 ' ,則可能會出現問題,因此如果您有任何疑問,請告訴我。