2015-10-11 2 views
0

Я пытаюсь найти текстовый файл для определенной строки из файла bat. Если строка существует, добавьте новую строку после нее в следующую строку. Кажется, я не могу правильно использовать код ниже. Есть идеи?BATCH - найти строку в текстовом файле и добавить новую строку после этой строки

Это строка, которую я ищу в текстовом файле. [/Script/MyGame.Mode]

Вот как выглядит текстовый файл.

[/Script/Config.Mode] 
Something here 1 
Something here 2 

[/Script/MyGame.Mode] 
Something here 1 
Something here 2 

[/Script/Edit.Mode] 
Something here 1 
Something here 2 

И вот как я хочу, чтобы он выглядел.

[/Script/Config.Mode] 
Something here 1 
Something here 2 

[/Script/MyGame.Mode] 
RedirectReferences=(PackageName="%Package%",PackageURLProtocol="%PackageURLProtocol%",PackageURL="%WebAddress%/%Package%%Ext%",PackageChecksum="") 
Something here 1 
Something here 2 

[/Script/Edit.Mode] 
Something here 1 
Something here 2 

Вот код, который у меня есть до сих пор.

@echo off 

:GETINFO 
echo. 
echo. 
cls 
echo. 
echo Let's get some information for your config. 
echo Note: The information you enter below is case sensitive. You can copy and paste. 
echo. 
echo Here's a Package Name example: "DM-MyTest-WindowsNoEditor" 
echo. 
set /p Package=Enter Package Name: 
echo. 
echo. 
echo. 
echo The Package URL Protocol will be "http" or "https" 
echo. 
set /p PackageURLProtocol=Enter Package URL Protocol: 
echo. 
echo. 
echo. 
echo Here's a WebAddress example: "www.myredirect.com/test" (Don't add the trailing /) 
set /p WebAddress=Enter Redirect(WebAddress)URL: 
echo. 
echo. 
echo. 
echo The file extention is usually ".pak" 
echo. 
set /p Ext=Enter Map File Extention: 
echo. 
cls 
echo. 
echo Please wait... Currently Creating Test References. 

:SHOWLINE 
echo. 
set NewURL=RedirectReferences=(PackageName="%Package%",PackageURLProtocol="%PackageURLProtocol%",PackageURL="%WebAddress%/%Package%%Ext%",PackageChecksum=""^^) 

pause 

:WRITENEW 
set inputfile=game.txt 
set outputfile=game.temp.txt 
(for /f usebackq^ delims^=^ eol^= %%a in ("%inputfile%") do (
    if "%%~a"=="[/Script/MyGame.Mode]" call echo %NewURL% 
    echo %%a 
))>>"%outputfile%" 

echo. 
pause 

ответ

1
  1. Когда я запускаю отправил код в командной строке консоли я вижу ошибку синтаксиса:

    ) was unexpected at this time.

    Видимо круглые скобки внутри NewURL излома вещей, когда расширяется в петле.

    • Простым решением было бы отложить расширение с помощью call трюк:

      call echo %%NewURL%% 
      
    • В качестве альтернативы:

      setlocal enableDelayedExpansion & echo !NewURL! & endlocal 
      
    • Или дважды избежать закрывающую скобку с ^^ (один раз для set и другой для расширенного значения внутри цикла):

      set NewURL=.............PackageChecksum=""^^) 
      
  2. Другая проблема заключается в том, что имя выходного файла совпадает с именем входного файла, но это невозможно перенаправить вывод в тот же файл, как вы читаете.

    Изменить имя вывода на другой файл. Затем замените оригинал после цикла закончена:

    set inputfile=game.txt 
    set outputfile=game.temp.txt 
    ................... 
    ))>>"%outputfile%" 
    move/y "%outputfile%" "%inputfile%" 
    
  3. И изменить порядок новой строки, чтобы распечатать его после найденной строки просто поменять местами две строки внутри внутреннего цикла:

    echo %%a 
    if "%%~a"=="[/Script/MyGame.Mode]" call echo %%NewURL%% 
    
+0

У вас есть пример с предоставленным кодом? Я все еще не могу заставить его работать. Спасибо за вашу помощь. – James30263

+0

@wOxxOmI смог заставить его работать с этим кодом. Тем не менее, он вставляет перед этой строкой. Как вставить его после него? – James30263

+0

я использовал ... набор NewURL = ............. PackageChecksum = "" ^^) – James30263

Смежные вопросы