2010-07-08 17 views
1

我正在嘗試爲我的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

後自動:要格式化代碼塊,它縮進4個空格,或選擇它並單擊編輯器工具欄上的代碼按鈕。請參閱[如何格式化我的代碼塊?](http://meta.stackexchange.com/questions/22186/how-do-i-format-my-code-blocks) – Helen 2010-07-08 16:46:02

回答

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後的單個語句循環 - 你需要的支架告訴它,它是一個複合聲明。此外,爲了%% 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 
+1

順便說一句,您可以刪除'set'命令並使用'echo %% A:%% B' – Helen 2010-07-08 16:53:38

+0

驚人的效果! 非常感謝! – ianc1215 2010-07-09 16:33:12

相關問題