Вставить новую строку после определенной строки в пакетном файле, используя пакетный файл - PullRequest
1 голос
/ 15 февраля 2012

Я хочу вставить строку в пакетный файл после определенной строки.
Ввод:

set MTBBankpath=C:\InstallerOutput\QuickBooks-Sync\MTB
echo To copy QuickBooks-Sync COM components into resultant folder
copy /Y %ConnectorExecutionPath%\%outqbsyncpath%

Выход:

set MTBBankpath=C:\InstallerOutput\QuickBooks-Sync\MTB
set IndbBankpath=C:\InstallerOutput\QuickBooks-Sync\indb
echo To copy QuickBooks-Sync COM components into resultant folder
copy /Y %ConnectorExecutionPath%\%outqbsyncpath%

Новая строка set IndbBankpath=C:\InstallerOutput\QuickBooks-Sync\indb вставляется после определенной строки.

1 Ответ

3 голосов
/ 15 февраля 2012
SETLOCAL ENABLEDELAYEDEXPANSION

set inputFile=%userprofile%\desktop\testSO.bat
set outputFile=%userprofile%\desktop\testSOout.bat
set _strInsert=set IndbBankpath=C:\InstallerOutput\QuickBooks-Sync\indb
set _strFind=set MTBBankpath=C:\InstallerOutput\QuickBooks-Sync\MTB

FOR /F "usebackq delims=" %%A IN ("%inputFile%") DO (
  Echo %%A | Find "%_strFind%" && ECHO %%A>>"%outputFile%" && ECHO %_strInsert%>>"%outputFile%"
  IF [!errorlevel!] == [1] ECHO %%A>>"%outputFile%"
)

По существу, для каждой строки в файле выполните FIND для нее для рассматриваемой строки, и, если она найдет ее, введите строку в выходной файл, а затем укажите, что вы хотите вставить в выходной файл. Если он не найдет то, что вы ищете в этой строке, он просто выведет строку в выходной файл.

РЕДАКТИРОВАТЬ: Если файл довольно большой ... это, вероятно, будет немного быстрее

SETLOCAL ENABLEDELAYEDEXPANSION

set inputFile=%userprofile%\desktop\testSO.bat
set outputFile=%userprofile%\desktop\testSOout.bat
set _strInsert=set IndbBankpath=C:\InstallerOutput\QuickBooks-Sync\indb
set _strFind=set MTBBankpath=C:\InstallerOutput\QuickBooks-Sync\MTB
set i=0

FOR /F "usebackq tokens=1 delims=[]" %%A IN (`FIND /N "%_strFind%" "%inputFile%"`) DO (set _strNum=%%A)
FOR /F "usebackq delims=" %%A IN ("%inputFile%") DO (
  set /a i = !i! + 1
  ECHO %%A>>"%outputFile%"
  IF [!i!] == [%_strNum%] (ECHO %_strInsert%>>"%outputFile%")
)

Если вы хотите «сделать вид», что записываете в тот же файл, добавьте это в конец скрипта.

MOVE /Y "%outputFile%" "%inputFile%" && DEL /F /Q "%outputFile%"

РЕДАКТИРОВАТЬ: я могу иметь больше строк!?

SETLOCAL ENABLEDELAYEDEXPANSION

set inputFile=%userprofile%\desktop\testSO.bat
set outputFile=%userprofile%\desktop\testSOout.bat
set _strInsert=set IndbBankpath=C:\InstallerOutput\QuickBooks-Sync\indb
set _strFind=set MTBBankpath=C:\InstallerOutput\QuickBooks-Sync\MTB
set i=0

FOR /F "usebackq tokens=1 delims=[]" %%A IN (`FIND /N "%_strFind%" "%inputFile%"`) DO (set _strNum=%%A)
FOR /F "usebackq delims=" %%A IN ("%inputFile%") DO (
  set /a i = !i! + 1
  ECHO %%A>>"%outputFile%"
  IF [!i!] == [%_strNum%] (
    ECHO %_strInsert%>>"%outputFile%"
    ECHO I WANT TO ADD THIS LINE ALSO>>"%outputFile%"
    ECHO OOOO THIS LiNE TOO>>"%outputFile%"
    ECHO ZOMGBBQSAUCE ADD THIS LINE ALSO>>"%outputFile%"
  )
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...