題 如何在Windows批處理文件中提取部分字符串?


假設我有一個諸如“Abc_123”之類的值存儲在批處理(cmd)文件中的變量中。我想最終得到一個只包含“123”的變量。有沒有內置的方法來做到這一點?

只要它內置於典型的Windows(Vista / 2008)系統中,我對這種方法或性能並不十分挑剔。


6
2018-01-04 02:42


起源




答案:


使用子字符串語法:

C:\Users\John>set string=Abc_123

C:\Users\John>echo %string%
Abc_123

C:\Users\John>echo %string:~4,3%
123

17
2018-01-04 02:58



你可以看到完整的語法 help set 如上所述 在批處理文件中執行子字符串的最佳方法是什麼? 在StackOverflow上。 - User5910
如果我需要4和3作為可變輸入,我該怎麼做? %string:~%start%,%len%% - MakPo
沒關係。我找到了答案。 ss64.com/nt/syntax-substring.html - MakPo


如果您發現批處理語言的功能不足以實現您想要的功能 - 並且可能不會花費太長時間來達到這一點 - 您可以使用 Windows PowerShell。默認情況下,並非在所有版本的Windows上都安裝此功能,但您可以免費下載。

如果您不喜歡PowerShell語言,那就是Perl。您必須在所有系統上安裝它。還有其他人。


0
2018-01-04 03:14





如果你只想要下劃線之後的所有內容(並且不一定知道字符串的長度或下劃線的位置,但可以依賴只有一個下劃線),請嘗試:

for /f "tokens=2 delims=_" %%a in ("%STRING%") do (
  set AFTER_UNDERSCORE=%%a
)

基本上,您的字符串將使用下劃線作為分隔符(delims = _)分割為標記。只有第二個(標記= 2)將被傳遞(作為變量%% a)到for循環。由於在這種情況下處理單個字符串,循環將只運行一次。

如果要保存下劃線前後的內容,請嘗試:

for /f "tokens=1,2 delims=_" %%a in ("%STRING%") do (
  set BEFORE_UNDERSCORE=%%a
  set AFTER_UNDERSCORE=%%b
)

請注意,%% a是分割的第一個標記的變量; %% b是拆分的第二個標記的變量。


0
2017-07-02 15:51