如何使两个批处理文件变量回显到一行?

时间:2010-07-08 16:29:09

标签: windows batch-file

我正在尝试为我的ESXi服务器创建备份脚本,而且我遇到了一些问题。

我需要循环这两个命令,然后将它们写入我称为backup.list的文本文件。它将包含我需要支持的所有VM ID和VM名称。

当我对服务器运行两个循环命令时,它们只返回最后一个值,我知道有些东西我不知道但是我甚至不是很明智的批处理。

以下是代码:

@ECHO OFF
SET PLINK=C:\Plink.exe
SET ESXHOST=esx01.example.com
SET USERNAME=root
SET PASSWORD=password
SET DATASTORE=/vmfs/volumes/datastore3
IF EXIST Backup.list DEL Backup.list
TYPE NUL>Backup.list
SETLOCAL EnableDelayedExpansion
FOR /F "SKIP=1 TOKENS=1" %%A IN ('%PLINK% %USERNAME%@%ESXHOST% -pw %PASSWORD% vim-cmd vmsvc/getallvms') DO SET ID=%%A
FOR /F "SKIP=1 TOKENS=2" %%B IN ('%PLINK% %USERNAME%@%ESXHOST% -pw %PASSWORD% vim-cmd vmsvc/getallvms') DO SET VM=%%B
ECHO !ID!:!VM!
PAUSE

1 个答案:

答案 0 :(得分:3)

你需要一个循环

FOR /F "SKIP=1 TOKENS=1,2" %%A IN ('%PLINK% %USERNAME%@%ESXHOST% -pw %PASSWORD% vim-cmd vmsvc/getallvms') DO (
SET ID=%%A
SET VM=%%B
ECHO !ID!:!VM!
)

FOR命令仅在DO之后循环遍历单个语句 - 您需要括号来告诉它它是复合语句。此外,在将第一个标记填入%% A

后,会自动进行%% B的分配

您可能还应省略SETLOCAL EnableDelayedExpansion并直接执行

FOR /F "SKIP=1 TOKENS=1,2" %%A IN ('%PLINK% %USERNAME%@%ESXHOST% -pw %PASSWORD% vim-cmd vmsvc/getallvms') DO ECHO %%A:%%B