我有以下代碼,它確實包含。*但我刪除它們。 這是我改了行:刪除。*正則表達式打破正則表達式
>>%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在正則表達式)。我試過用空格和空格值,並沒有運氣。
你應該看着從你的VBScript中刪除批處理。說真的,你爲什麼要這樣對自己呢?構建一個VBScript來完成實際的工作並使所有的東西都完全不可讀,這幾乎就是你所有的批處理代碼所做的,所以你可以在普通的VBScript中做到這一點。 – 2013-03-21 23:34:44
這不回答問題。 – 2013-03-22 02:09:01
這就是爲什麼我將它作爲評論,而不是答案。當然,你可以自由複雜化自己的生活,只要你喜歡。 – 2013-03-22 08:03:18