2016-12-29 8 views
1

このコードは、のを検出し、の二重パーセント符号に変更すると、ファイルのすべての行で実行されるはずです。そして、結果をエコーし​​ます。バッチコードに問題があります。検出しないか、目的の文字を変更しない

HERESに私のコード:

@echo off 

REM | Using this line to test the code: % %% %%% %test% 

setlocal enabledelayedexpansion 
for /F "tokens=*" %%a in (%~0) do set %a=!%a:%%=%%%%! & echo %%a 
pause 

そして、これは、それが生成されて出力されます。

@echo off 
REM | Using this line to test the code: % %% %%% %test% 
setlocal enabledelayedexpansion 
for /F "tokens=*" %%a in (%~0) do set %a=%%=%%%% & echo %%a 
pause 

それと間違っていますか?私はラインで問題を見つけることができないようです!

答えて

3

find/replaceはFOR変数では機能しません。環境変数でのみ動作します。したがって、%%aの値を環境変数に転送してから、環境変数を使用して検索/置換を実行する必要があります。

拡張は括弧内のブロック(FORループの一部)内にあり、遅延拡張を使用する必要があります。 FOR変数が展開されたときに遅延拡張が有効になっている場合、FORループは!を含む値を破損します。遅延拡張はループ内でオンとオフを切り替える必要があります。

変数を変更して新しい値をエコーする必要はありません。変数に新しい値を格納せずに、変更された値を直接エコーします。

@echo off 
setlocal disableDelayedExpansion 
REM | Using this line to test the code: % %% %%% %test% 
for /f "usebackq delims=" %%a in ("%~f0") do (
    set "str=%%a" 
    setlocal enableDelayedExpansion 
    echo !str:%%=%%%%! 
    endlocal 
) 
pause 
+0

完璧に働いただけでなく、新しいことを教えてくれました。ありがとうございます!^- ^ – ArsonFG