使用“for / f”从命令输出中保存多个标记

时间:2017-04-16 00:19:31

标签: android windows batch-file

This回答是我想要做的,但它适用于字符串 NOT 命令输出。

我的脚本是:

@echo off 
setlocal enabledelayedexpansion

for /F "skip=1 tokens=1,3,5,7" %%a in ('adb devices') do (
echo %%a

set dev1=%%a
set dev2=%%b
set dev3=%%c
set dev4=%%d
)
echo.
echo Devices are: !dev1!, !dev2!, !dev3!, !dev4!
pause

但它显示了1个设备,而不是2个可用设备:

770a56
emulator-5554

Devices are: emulator-5554, , ,
Press any key to continue . . .

Windows的示例输出:

C:\Windows\Right\Console2>adb devices
List of devices attached
BH90W3T416      device
HSMPG9265D606183        device
emulator-5554   device

2 个答案:

答案 0 :(得分:0)

...
set dev1=!dev1!,%%a
set dev2=!dev2!,%%b
set dev3=!dev3!,%%c
set dev4=!dev4!,%%d
...
echo Devices are: !dev1:~1!, !dev2:~1!, !dev3:~1!, !dev4:~1!

将使用前导逗号为每个dev建立一个列表。

由于您没有向我们展示原始输入,也没有解释为什么要指定4个令牌但只显示一个令牌,因此您的问题不明确。如果%%a是唯一感兴趣的标记,那么

...
set "dev4=!dev3!"
set "dev3=!dev2!"
set "dev2=!dev1!"
set "dev1=%%a"
...

可能更合适。

答案 1 :(得分:0)

为了存储多个值,当自己的变量中的每个值都预先知道时(如果有2个,为什么要使用4个变量)设备?),您需要使用array

@echo off 
setlocal enabledelayedexpansion

set n=0
for /F "skip=1" %%a in ('adb devices') do (
   echo %%a

   set /A n+=1
   set dev!n!=%%a
)
echo/
echo Devices are: 
for /L %%i in (1,1,%n%) do echo !dev%%i!
pause