-1

次のコードがあり、.* が含まれていましたが、それらを削除しました。これは私が変更した行です:

>>%vbs% echo regex.pattern="\nName=%~1\n"

これは以前は次のとおりでした。

>>%vbs% echo regex.pattern="\nName=.*%~1.*\n"

しかし、単語が変数の前または後にある場合も行を検索していました。Name=(variable) の完全一致を検索するだけです。変数は var6 です。

これを修正したい理由は、"Name=" の後に var6 を検索するときにワイルドカードを削除しようとしているからです。「Name=(sometext)var6(sometext)」ではなく、「Name=var6」のみを見つけて変更したいからです。

上記の最初の行は機能せず、上の 2 行目は変数の前と後のワイルドカードを検索するため、それは私が望んでいるものではありません。上記の最初の行で何が間違っていますか?

拡張コードは次のとおりです (問題の行は途中にあります)。

SETLOCAL ENABLEDELAYEDEXPANSION
find "!var6!" < "Campaign_SCR2.mis.tmp" >nul && (
call :replace "!var6!"
call :stripdup "Campaign_SCR2.mis.tmp.tmp2" "Campaign_SCR2.mis.tmp" "(Class=.*\nType=.*\nOrigin=.*\nS    ide=.*)\nClass=.*\nType=.*\nOrigin=.*\nSide=.*" "$1"
del "Campaign_SCR2.mis.tmp.tmp2"
)
)
)
goto Loop
goto :EOF

:replace
set vbs="%temp%\%random%.vbs"
if exist %vbs% goto :replace

>%vbs% echo set regex=new regexp
>>%vbs% echo regex.global=true
>>%vbs% echo regEx.IgnoreCase=False
>>%vbs% echo regex.pattern="\nName=%~1\n"
>>%vbs% echo wscript.stdOut.write regex.replace    (wscript.stdin.readall,"Name=ShipDummy"+vbCRLF+"Class=ShipDummy"+vbCRLF+"Type=0"+vbCRLF+"Origin=Environmental"+vbCRLF+"Side=0"+vbCRLF)
cscript /nologo %vbs% <"Campaign_SCR2.mis.tmp" >"Campaign_SCR2.mis.tmp.tmp2"
del %vbs%
goto :EOF


:stripdup
set vbs="%temp%\%random%.vbs"
if exist %vbs% goto :stripdup


 >%vbs% echo set regex=new regexp
>>%vbs% echo regex.global=true
>>%vbs% echo regEx.IgnoreCase=False
>>%vbs% echo regex.pattern="%~3"
>>%vbs% echo wscript.stdOut.write regex.replace(wscript.stdin.readall,"%~4")
cscript /nologo %vbs% <"%~1" >"%~2"
del %vbs%
goto :EOF



:exitloop4
:Loop

var6 にさまざまな値を試しました (正規表現では %~1 になります)。スペースありとスペースなしの値を試しましたが、うまくいきませんでした。

4

1 に答える 1

0

どうですか(これがあなたが望んでいることだと私は推測しています)

>>%vbs% echo regex.pattern="[\w]*Name=[\w]*%~1[\w]*"

これは一致します

(Any whitespace)Name=(Any Whitespace)var6(Any Whitespace)

または

>>%vbs% echo regex.pattern=".*[\w]*Name=[\w]*%~1[\w]*.*"

これは一致します

(Anything)(Any whitespace)Name=(Any Whitespace)var6(Any Whitespace)(Anything)

注:ところで、スクリプトのどこにvar6が設定されているかわかりません! 設定されていない場合は、常に空白の文字列になります。

于 2013-03-22T03:44:05.320 に答える