我需要在批处理
中获取来自变量的最后2个令牌变量是
Rastreando a rota para user722-PC [192.168.1.106]
我需要的输出是一个包含
的变量user722-PC
和另一个包含
[192.168.1.106]
不,我不能使用
for /f "tokens=5,6 delims= " %%a in ("%variable%") do set host=%%a & set ip=%%b
echo %ip% %host%
因为在这种情况下我指定了令牌5,6,我想要的是动态获取最后2个令牌,所以我不能指定任何令牌号码mannualy
//这样我只能获得最后一个标记,考虑到分隔符是一个空格,并且分隔符不能更改
FOR %%a in (%variable%) do set lastPart=%%a
ECHO %lastPart%
答案 0 :(得分:3)
@echo off
setlocal EnableDelayedExpansion
set "var=Rastreando a rota para user722-PC [192.168.1.106]"
set "last=%var: =" & set "lastBut1=!last!" & set "last=%"
SET last
提示:使用@echo on
答案 1 :(得分:1)
@ECHO OFF
SETLOCAL
SET "variable=Rastreando a rota para user722-PC [192.168.1.106]"
FOR %%a IN (%variable%) DO CALL SET "lastbut1=%%lastpart%%"&SET "lastpart=%%a"
SET last
GOTO :EOF
call
set
重新解析它,所以set "lastbut1=%lastpart%"
在子shell中执行。
这也可以使用delayedexpansion
来完成,其中有很多关于SO的文章。
其工作原理的简短说明是 *** MAGIC ***
更长的解释是:
命令CALL SET "lastbut1=%%lastpart%%"
和SET "lastpart=%%a"
以%variable%
中的每个元素的顺序执行,这是一个简单的字符串,其元素由空格,制表符,逗号或分号分隔。
& 用于分隔命令,仅用于允许在同一物理线路上指定许多命令。代码也可以写成
(
CALL SET "lastbut1=%%lastpart%%"
SET "lastpart=%%a"
)
完全一样;括号是必需的并且包含各个命令。这里还有一个额外的语法要求。开场(
必须与do
在同一物理线路上。
CALL SET "lastbut1=%%lastpart%%"
在子shell中执行SET "lastbut1=%lastpart%"
,将lastbut1
设置为lastpart
的当前值。然后SET "lastpart=%%a"
将lastpart
设置为%%a
中的值。
因此,在下一次迭代中,lastbut1
获取在前一次迭代中应用于lastpart
的值,依此类推,直到最后一次,lastpat
获取非常列表中的最后一项,lastbut1
刚刚被赋予了之前的值。
因此,要获得lastbut2
,您需要的只是使用
FOR %%a IN (%variable%) DO call set "lastbut2=%%lastbut1%%&CALL SET "lastbut1=%%lastpart%%"&SET "lastpart=%%a"
从lastbut2
中设置lastbut1
,从lastbut1
设置lastpart
,从lastpart
设置%%a
。{/ p>