2013-03-21 156 views
-1

我有以下代码,它确实包含。*但我删除它们。 这是我改了行:删除。*正则表达式打破正则表达式

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

这曾经是:

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

但它是搜索一行字之前或之后的变量太多时。我只希望它搜索名称=(变量)的完全匹配。变量是var6。

我想解决这个问题的原因是因为我想在“Name =”后面搜索var6时删除通配符。因为我只想找到和更改“Name = var6”,而不是“Name =(sometext)var6(sometext)”。

上面的第一行不起作用,上面的第二行在之前搜索通配符,并且afert他变量,所以这不是我想要的。我在上面的第一行做错了什么?

这里是扩展码(在问题线是中途向下):

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

你应该看着从你的VBScript中删除批处理。说真的,你为什么要这样对自己呢?构建一个VBScript来完成实际的工作并使所有的东西都完全不可读,这几乎就是你所有的批处理代码所做的,所以你可以在普通的VBScript中做到这一点。 – 2013-03-21 23:34:44

+0

这不回答问题。 – 2013-03-22 02:09:01

+1

这就是为什么我将它作为评论,而不是答案。当然,你可以自由复杂化自己的生活,只要你喜欢。 – 2013-03-22 08:03:18

回答

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正在设置的任何地方!如果它从未设置,则它将始终是空白字符串。

+0

嗨,是的var6被设置在这个脚本之上。 – 2013-03-22 03:56:35

+0

这没有奏效。它没有发现任何。 – 2013-03-22 06:44:21