我有以下代码,它确实包含。*但我删除了它们。 这是我改变的一行:
>>%vbs% echo regex.pattern="\nName=%~1\n"
以前是:
>>%vbs% echo regex.pattern="\nName=.*%~1.*\n"
但它也是在变量之前或之后的单词中搜索行。我只希望它搜索Name =(变量)的完全匹配。变量是var6。
我想解决这个问题的原因是因为我想在“Name =”之后搜索var6时删除通配符。因为我只想找到并更改“Name = var6”,而不是“Name =(sometext)var6(sometext)”。
上面的第一行不起作用,上面的第二行搜索之前的通配符并且输出变量,这不是我想要的。我在上面第一行做错了什么?
这是扩展代码(有问题的行是中途):
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)。我尝试过带空格的值,没有空格,没有运气。
答案 0 :(得分: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
被设置的任何地方!如果它从未设置过,则它将始终为空字符串。