2010-07-08 3 views
1

J'essaie de créer un script de sauvegarde pour mon serveur ESXi et je rencontre un problème.Comment faire en sorte que deux variables de fichiers par lots se répercutent sur une seule ligne?

Je dois boucler ces 2 commandes, puis les écrire dans un fichier texte que j'appelle backup.list. Il contiendra tous les noms d'ordinateurs virtuels et de machines virtuelles dont j'ai besoin. Quand j'ai les deux commandes de la boucle exécutées contre le serveur elles ne retournent que la dernière valeur, je sais qu'il y a quelque chose qui me manque mais je ne suis pas très sage même pour le lot.

Voici le code:

@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

Pour votre information: Pour formater un bloc de code, indentera 4 espaces, ou sélectionnez-le et cliquez sur le bouton de code dans la barre d'outils de l'éditeur. Voir [Comment formater mes blocs de code?] (Http://meta.stackexchange.com/questions/22186/how-do-i-format-my-code-blocks) – Helen

Répondre

3

Vous avez besoin d'une seule boucle

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! 
) 

commande FOR boucles que par la seule instruction après DO - vous avez besoin du support pour lui dire que c'est un composé déclaration. En outre, l'affectation à %% B se fait automatiquement après le premier jeton est fourré dans %% A

Vous devriez probablement aussi omettre SETLOCAL ENABLEDELAYEDEXPANSION et faire directement

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

BTW, vous pouvez supprimer le 'set' commandes et utilisez 'echo %% A: %% B' – Helen

+0

Incroyable ça marche !! Merci mille fois! – ianc1215

Questions connexes