2016-01-01 45 views
1

我曾經在一個批處理文件腳本以下字符串:替換子

ABCE#$1 TroubleMaker[FFFFF A=MyCountry US=1 CA=1 JP=1 EU=1 

和它存儲在_var,當我做 set _var=%_var:* A=% - 它減少" A"之前的所有字符(包括「A '),我剩下了=MyCountry US=1 CA=1 JP=1 EU=1

我該如何更改set命令來切斷字符串中的=標記?

嘗試set _var=%_var:*==% - 沒有工作。

謝謝。

回答

1
@ECHO OFF 
SETLOCAL 
SET "string=ABCE#$1 TroubleMaker[FFFFF A=MyCountry US=1 CA=1 JP=1 EU=1" 

FOR /f "tokens=1*delims==" %%s IN ("%string%") DO SET "string=%%t" 
ECHO "%string%" 
GOTO :EOF 

這是假設你要刪除直到幷包括初始=

+0

這個作品太多了,謝謝 – Ragnarok

1

=干擾子串替換語法,因爲它自己包含=


你可以去以下解決方法:

set _var=%_var:* A=% 
set _var=%_var:~1% 

第二線路構成的子串擴展語法(詳情類型set /?),分裂出的第一個字符,那應該成爲=

這當然只適用於=緊隨A子串。


您可以檢查的第一個字符是否是=刪除它,像以前一樣:

set _var=%_var:* A=% 
if "%_var:~,1%"=="=" set _var=%_var:~1% 

如果你只是想搜索(第一)=字符,並忽略A子串,你可以建立這樣的環路結構:

:LOOP 
if "%_var%"=="" goto :END 
if "%_var:~,1%"=="=" (
    set _var=%_var:~1% 
    goto :END 
) else (
    set _var=%_var:~1% 
    goto :LOOP 
) 
:END 

這會切斷第一個字符並檢查它是否是=。如果是,則剩餘的字符串被存儲在_var中並且循環被留下;如果沒有,循環繼續檢查下一個字符。如果字符串不包含=字符,則插入第一行不會掛起。

+0

感謝 我的問題是,「A」子不總是存在的,它的存在時間大約90% ,但不是100%..而'='子字符串100%將在那裏.. 我已經在做你所建議的了(離開'='並刪除〜1 - 但尋找一個更好的方式,將工作100%的時間)@aschipfl – Ragnarok

+0

好吧...我添加了另一個腳本,只是尋找'='...希望它可以幫助... – aschipfl

+0

偉大的工程,謝謝! @aschipfl – Ragnarok