繁体   English   中英

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

[英]How to make two batch file variables echo into a single line?

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

我需要循环这2个命令,然后将它们写到一个名为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

您需要一个循环

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM