batファイルから特定の文字列をテキストファイルで検索しようとしています。文字列が存在する場合は、次の行の後に新しい文字列を追加します。以下のコードが正しく機能していないようです。何か案は?
これは、テキストファイルで検索している文字列です。 [/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
投稿されたコードをコマンドプロンプトコンソールで実行すると、構文エラーが表示されます。
)現時点では予想外でした。
NewURL
ループ内で展開すると、内部の括弧が壊れているようです。
簡単な解決策は、次のcall
トリックを使用して拡張を遅らせることです。
call echo %%NewURL%%
または:
setlocal enableDelayedExpansion & echo !NewURL! & endlocal
または、閉じ括弧を次のように二重エスケープします^^
(set
ループ内の展開された値に対して1回ともう1回):
set NewURL=.............PackageChecksum=""^^)
もう1つの問題は、出力ファイル名が入力ファイル名と同じであるが、読み取っているのと同じファイルに出力をリダイレクトできないことです。
出力名を別のファイルに変更してください。次に、ループが終了した後、元のファイルを置き換えます。
set inputfile=game.txt
set outputfile=game.temp.txt
...................
))>>"%outputfile%"
move/y "%outputfile%" "%inputfile%"
また、新しい文字列の順序を変更して、見つかった行の後に印刷するには、内側のループ内の2行を入れ替えるだけです。
echo %%a
if "%%~a"=="[/Script/MyGame.Mode]" call echo %%NewURL%%
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加