ファイルから読み取るバッチスクリプトを書いています。このファイルには、token = valueなどの行が含まれています。ファイルの各行を解析するコードがあり、%% iに保存されています。次のコードは、トークンの値を抽出しようとします。
コメントに記載されているように、このスクリプトは遅延拡張を使用していることに注意してください。
for /f "tokens=1* delims==" %%a in ("%%i") do (
if "%%a"=="password" ( set password=%%b )
)
トークンパスワードの値に「!」が含まれている場合は、「!」はスキップされ、文字列の残りの部分のみが変数passwordに格納されます。たとえば、次の行の場合:
password =テスト!
次に、変数password = Test。入力ファイルをさまざまな方法で変更しようとしましたが、バッチスクリプトは「!」以外のすべてを読み取ります。利用した:
password = "テスト!"
password = "Test ^!"
password = Test%!
password = Test%!
そして、すべてが「!」をスキップします。「!」で文字列を読み取る方法についてのアイデア。変数に?
遅延変数展開を使用していると仮定すると、比較のために一時的に無効にします。非遅延モードで比較するために、分割されている現在の行を解析し!
、最初のトークンが行全体と同じであるかどうかを確認します。
@echo off
setlocal enableDelayedExpansion
for /f "delims=" %%i in (sourcefile.txt) do (
setlocal disableDelayedExpansion
for /f "delims=! tokens=1" %%z in ("%%i") do (
if "%%z"=="%%i" ( rem The line has no !
for /f "tokens=1* delims==" %%a in ("%%i") do (
if "%%a"=="password" ( set "password=%%b" )
)
)
)
endlocal
)
pause
ただし、password
変数は内部のsetlocalコンテキストでのみ使用可能であり、エクスポートするにはその回答を使用します。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加