我是一個Linux傢伙,並試圖學習批處理腳本。Windows腳本字符串操作來刪除字母字符
我有以下要求操縱字符串。
set string=1.23.10xxxx2
我想從上面的字符串中刪除字母字符。
我需要的輸出爲1.23.102或1.23.10,這兩個輸出對我來說都很好,任何人都可以幫助我。
我是一個Linux傢伙,並試圖學習批處理腳本。Windows腳本字符串操作來刪除字母字符
我有以下要求操縱字符串。
set string=1.23.10xxxx2
我想從上面的字符串中刪除字母字符。
我需要的輸出爲1.23.102或1.23.10,這兩個輸出對我來說都很好,任何人都可以幫助我。
可以使用的GnuWin32 sed:
@ECHO OFF &SETLOCAL
set "string=1.23.10xxxx2"
FOR /f %%a IN ('echo %string% ^| sed "s/[a-zA-Z]\+//"') DO set "newstring=%%a"
ECHO %newstring%
以及我需要一個Windows批處理腳本,我不能讓sed運行。 – user1642408
我收到以下錯誤。'sed'不被識別爲內部或外部命令, 可操作的程序或批處理文件。 ECHO關閉。 – user1642408
'sed'不是標準Windows安裝的一部分。你可以從我的答案中的鏈接下載它。你可以在批處理腳本中使用它,請用腳本查看我的答案。 – Endoro
如果格式具有一致的長度,那麼你可以簡單地使用子字符串操作。
要獲得10年1月23日:
set "string=%string:~0,7%"
要獲得1.23.102:
set "string=%string:~0,7%%string:~-1%"
如果你只是刪除字符x
,然後使用搜索和替換(始終不區分大小寫):
set "string=%string:x=%"
以上所有內容均在幫助中描述,可通過訪問或set /?
。
但我懷疑以上都不符合您的需求。批量中沒有內容可以方便地搜索和替換字符範圍。您可以使用FOR循環迭代搜索並替換每個字母。這需要延遲擴展,因爲正常擴展發生在解析時間,並且整個FOR構造被一次解析。
setlocal enableDelayedExpansion
for %%C in (
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
) do set "string=!string:%%C=!"
上述工作,但它是相對低效的。
有許多第三方工具可以有效地解決問題。但在某些環境中禁止使用非標準的可執行文件。我已經寫了一個名爲REPL.BAT的混合批處理/ JScript實用程序,對於這個問題非常有效。它適用於從XP開始的任何現代Windows機器。點擊鏈接獲取腳本。腳本中內置了完整的文檔。
假設REPL.BAT或者是在當前目錄中,或者更好的是,在你的PATH的某個地方,那麼下面的工作:
for /f "eol=a delims=" %%S in ('repl "[a-zA-Z]" "" s string') do set "string=%%S"
您似乎已經忘記了鏈接到repl.bat? – Blorgbeard
@Blorgbeard - Woops!鏈接添加,謝謝 – dbenham
@echo off
set remove=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
set string=1.23.10xxxx2
for /F "tokens=1,2 delims=%remove%" %%a in ("%string%") do (
echo Part before removed chars: %%a
echo Part after removed chars: %%b
echo Both parts: %%a%%b
)
一批具有相當有限/笨拙的字符串操作。來自linux,你會感到失望。你可以使用Python或其他東西嗎?或者安裝[unixutils](http://sourceforge.net/projects/unxutils/)並使用sed? – Blorgbeard
查看'set /?',瞭解您可以通過批量處理的有限範圍的內容。 – Blorgbeard