2013-03-15 153 views
2

替換字符串的字符我需要從一個字符串,是一些什麼樣的這種替換字符*
*10.*31.**2.*65在批處理腳本

我想從使用批處理腳本這個字符串中刪除所有*

回答

3
@ECHO OFF 
SETLOCAL 
SET mystring=*10.31.*2.*65 
:deaster 
FOR /f "tokens=1* delims=*" %%i IN ("%mystring%") DO (
    SET mystring=%%j 
    IF DEFINED mystring (
     SET mystring=%%i%%j 
     GOTO deaster 
    ) ELSE (
     SET mystring=%%i 
    ) 
) 
ECHO result=%mystring%= 
0

調查sed,流編輯器。如果你在Windows上(假設你是),你可以在網上找到預編譯的二進制文件。

echo "*10.31.*2.*65" | sed 's/\*//g' 
1

您不需要爲此完整的腳本。您只需要一個for /f循環。

C:\Users\rojo>set test=*10.*31.**2.*65 

C:\Users\rojo>echo %test% 
*10.*31.**2.*65 

C:\Users\rojo>for /f "tokens=1-4 delims=.^*" %I in ("%test%") do @set test=%I.%J.%K.%L 

C:\Users\rojo>echo %test% 
10.31.2.65 

如果你想把for環成一個批處理腳本,使用%%I%%J%%K%%L,而不是單一的百分比。

7

您可以將移除過程簡化爲一行。例如,如果我有像這樣的字符串:

set string=hello! 

我想刪除「!」在裏面,我可以做

set string=%string:!=% 

該字符串現在將值改爲"hello""hello!"

編輯:作爲jeb pointed out in the comments,你可以使用這種方法不能取代"*"。這是因爲*是批處理文件模式匹配的通配符(對其的精彩解釋here)。在發佈這個答案時我不知道這一點,因爲我認爲這個替換方法適用於所有輸入字符串。如果您特別需要更換*,我建議您遵循magoo's answer。否則,我會爲那些需要一般的,簡短的單線解決方案來批量字符串替換的人解決這個問題。

+4

這不是qeustion的答案,因爲您無法用此方法替換'*'。作爲替換表達式的開始'*'具有特殊含義。 – jeb 2016-06-15 15:49:18

+0

從1.2.3.4到1,2,3,4的轉換setlocal set string = 1.2.3.4 set string =%string:。=,% – Justin 2016-07-20 06:35:27