Как сделать, чтобы две переменные пакетного файла отображались в одной строке? - PullRequest
1 голос
/ 08 июля 2010

Я пытаюсь создать скрипт резервного копирования для моего сервера ESXi, и у меня возникла небольшая проблема.

Мне нужно зациклить эти 2 команды и затем записать их в текстовый файл, который я называю backup.list. Он будет содержать все идентификаторы виртуальных машин и имена виртуальных машин, которые мне нужны.

Когда у меня запущены две команды цикла для сервера, они возвращают только последнее значение, я знаю, что чего-то не хватает, но я не очень разумен даже для пакетирования.

Вот код:

@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 Ответ

3 голосов
/ 08 июля 2010

Вам нужен один цикл

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 происходит автоматически после добавления первого токена в %% A

Вы, вероятно, также должны опустить SETLOCAL EnableDelayedExpansion и сделать напрямую

FOR /F "SKIP=1 TOKENS=1,2" %%A IN ('%PLINK% %USERNAME%@%ESXHOST% -pw %PASSWORD% vim-cmd vmsvc/getallvms') DO ECHO %%A:%%B
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...