1

У меня есть пакетный файл, который проверяет несколько наших серверов для пользователя. Из команды:

query user %userID% /server:ServerName  

Я хочу захватить вывод, прежде чем он выходит на экран. Есть ли способ перенаправить вывод в переменную?

Основная суть того, чего я хочу достичь, заключается в следующем: мы перебираем наши серверы:

query user %userID% /server:Server1  
query user %userID% /server:Server2  
query user %userID% /server:Server3  
query user %userID% /server:Server4  

Вместо вывода сообщения о том, что пользователь не может быть найден на определенном сервере, я хотел бы, чтобы оно уведомляло меня, только если оно находит пользователя на сервере.

2 ответа2

2
for /F "tokens=1 delims=" %%i in ('query user %userID% /server:ServerName') do set ans=%%i

Если пользователь запроса выводит строки до той, которая содержит нужные данные, вам нужно добавить skip=n где n - количество строк вывода перед той, которая вас интересует. Указание соответствующих разделителей для "delims=" позволит вам проанализировать его.

Разве PowerShell не будет лучше?

Если выходные данные содержат более одной значимой строки выходных данных, вышеприведенное даст только результаты из последней строки. Добавление отложенной подстановки переменных и составных команд после "do" путем включения их в () может позволить вам справиться с этим.

Или вы можете перенаправить вывод в файл запроса user% UserID% /user:ServerN> ServerN.txt, а затем проанализировать его с помощью for /f ...

0

Лучший способ выяснить, что поместить разделители - это передать вывод в файл и проверить вывод в редакторе. Пространство вероятно. поэтому просто убедитесь, что в опциях delims = является последним, если вы оставите пробел перед закрывающей кавычкой, то вы получите пробелы в качестве разделителя. Затем вы, вероятно, захотите указать токены. Например, если вы хотите, чтобы 1-е, 3-е и 4-е поля были разделены пробелом, параметры должны быть «tokens = 1,3,4 delims =». Для доступа к ним вы извлекаете их из %% i, %% j и %% k.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .