如何批量获取字符串末尾的数字?

时间:2015-08-19 16:48:10

标签: windows string batch-file cmd string-parsing

我正在编写一个使用本地计算机主机名的批处理命令文件,我需要在字符串末尾提取数字。如何批量获取字符串末尾的数字?

INPUT:

W2008R2T001
W2008R2T002
W2008R2T003
W8_1_901
QATEST84
QATEST85
QATEST86

期望的输出:

001
002
003
901
84
85
86

2 个答案:

答案 0 :(得分:1)

这是我自己编写的一个小批量脚本。

@echo off
setlocal EnableExtensions EnableDelayedExpansion
set "HostName=W2008R2T001"
set /p "HostName=Enter a host name (default %HostName%): "
call :GetNumber "%HostName%"
if "%Number%" == "" (
    echo This host name has no number at end.
) else (
    echo Found number at end of host name is: %Number%
)
pause
endlocal
goto :EOF

:GetNumber
set "Number="
set "StringToParse=%~1"
set "Digits=0123456789"
:CheckLastChar
if "!Digits:%StringToParse:~-1%=!" EQU "%Digits%" goto:EOF
set "Number=%StringToParse:~-1%%Number%"
set "StringToParse=%StringToParse:~0,-1%"
if "%StringToParse%" NEQ "" goto CheckLastChar
goto :EOF

此批处理文件允许用户输入字符串。对于此字符串,使用在主批处理例程开始时已启用的延迟环境变量扩展来调用子例程GetNumber,以复制字符串末尾的所有数字,以正确的顺序解析为环境变量Number。 / p>

主例程评估环境变量Number的值并继续相应处理。

有关其工作原理的详细信息,请打开命令提示符窗口,执行以下命令,并阅读每个命令的所有帮助页面输出。

  • call /?
  • goto /?
  • if /?
  • set /?

答案 1 :(得分:1)

我意识到你想要的数据是由特定分隔符分隔的最后一个数据。在您的示例中,分隔符为T_W8_1_901行中最多包含3个部分。下面的批处理文件会根据这些规则获得您想要的数据:

@echo off
setlocal EnableDelayedExpansion

for /F "tokens=1-3 delims=T_" %%a in (test.txt) do (
   for %%A in (%%a %%b %%c) do set "last=%%A"
   echo !last!
)

如果可能是更多分隔符,请将它们插入delims=T_部分。如果一行中可能包含更多部分,请修改tokens=1-3部分中的“3”并在%%a %%b %%c部分添加更多字母。