批量变量中的最后一个标记

Eli*_*Eli 7 batch-file

在批处理文件中,如何在变量中获取最后一个标记,无论它是数字还是单词,而不管变量中有多少个标记/单词.

我将把一个参数传递给批处理文件,如下所示:

C:\execbatch.bat "This is example one" 要么 C:\execbatch.bat "This is example number 2"

然后批处理文件将是这样的:

@echo off

SET var=%1
SET last=some command to grab the last token of %var%
echo %last%
exit
Run Code Online (Sandbox Code Playgroud)

从本质上讲,我需要能够始终抓住最后一个令牌,在这些示例中,我想one从示例1和2示例2中获取.

附加信息:

这不是命令行参数,这只是一个简化的例子:

这种情况是我在一个批处理文件中调用一个命令并将其输出发送到一个变量,如下所示:

C:\execbatch.bat memory 要么 C:\execbatch.bat cpu

然后在批处理文件中:

For /F "Tokens=*" %%I in ('c:\monitor.exe -C custom_performance_counter -t %1 -w 80 -c 90') Do Set COMMANDOUTPUT=%%I

Echo %COMMANDOUTPUT%
Set CURRENTVALUE=some command to grab the last token of %COMMANDOUTPUT%
Echo "The current value is %CURRENTVALUE%"
Run Code Online (Sandbox Code Playgroud)

这将根据检查类型输出各种结果; 但是在每种情况下,最后一个令牌/变量始终是当前值,尽管是数字或单词.

小智 6

为什么这么复杂?

变量中字符串的解决方案:

set var1=This is a String
for %%A in (%var1%) do set last=%%A
Run Code Online (Sandbox Code Playgroud)

echo last =%last%

外部命令结果的解决方案:

set xcmd=c:\monitor.exe -C custom_performance_counter -t %1 -w 80 -c 90
for /f "tokens=*" %%I in ('%xcmd%') do for %%A in (%%~I) do set last=%%A
echo last=%last%
Run Code Online (Sandbox Code Playgroud)


Eli*_*Eli 5

@echo off

set var1=This is a String
set var2=%var1%
set i=0

:loopprocess
for /F "tokens=1*" %%A in ( "%var1%" ) do (
  set /A i+=1
  set var1=%%B
  goto loopprocess )

echo The string contains %i% tokens.

for /F "tokens=%i%" %%G in ( "%var2%" ) do set last=%%G

echo %last%

pause
Run Code Online (Sandbox Code Playgroud)