我正在尝试为我的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
答案 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