У меня есть следующий код
set list=%directory%\Computers.txt
For /F "usebackq delims = " %%a in ("%list%") do (
FOR /F "tokens=2 delims='='" %%A in ('wmic /node:@%list% OS Get csname /value') do SET system=%%A
For /F "usebackq delims = " %%a in ("%list%") do Echo Host Name: %%a >> "%directory%\Info\%%a.log"
)
сценарий будет выводить значения только последнего хоста в списке Computers.txt
во всех хостах %%a.log
Я тоже пробовал
FOR /F "tokens=2 delims='='" %%A in ('wmic /node:@%list% OS Get csname /value') do SET system=%%A
For /F "usebackq delims = " %%a in ("%list%") do Echo Host Name: %%a >> "%directory%\Info\%%a.log"
выход
psexec @C:\Admin\UDB_ALL\Computers.txt systeminfo| findstr /C:"Physical"
является
Total Physical Memory: 3,071 MB Available Physical Memory: 2,417 MB systeminfo exited on Ayman-VM with error code 0.
Total Physical Memory: 3,071 MB Available Physical Memory: 2,397 MB systeminfo exited on Ayman-VM-2 with error code 0.
Total Physical Memory: 3,071 MB Available Physical Memory: 2,434 MB systeminfo exited on Ayman-VM-3 with error code 0
как я могу вывести каждое значение для каждого хоста в желаемом %%a.log
?
Я вижу, ты не потрудился последовать моему совету из своего последнего вопроса. Опять же, не устанавливайте переменные среды. Просто используйте переменные FOR
напрямую с командами ECHO
. Также я не уверен, почему вы используете PSEXEC
. WMIC может реализовать ту же логику. Во вложенных командах FOR
смысла нет. Вы действительно слишком усложнили это.
@Squashman Я пробовал FOR
, как вы предлагали, и получил тот же результат. Я создал файлы computer1.log computer2.log
, но результат, который я получаю в обоих файлах, - это спецификации computer2
. Я попробовал psexec
, чтобы узнать, изменит ли он что-нибудь только в выводе, я знаю, что wmic /node:@%list%
будет работать
@Squashman FOR /F "tokens=2 delims='='" %%A in ('wmic /node:@%list% OS Get csname /value') do SET system=%%A
For /F "usebackq delims = " %%a in ("%list%") do echo -------------------------------------------- >> "%directory%\Info\%%a.log"
For /F "usebackq delims = " %%a in ("%list%") do Echo Host Name: %%a >> "%directory%\Info\%%a.log"
Я тоже пробовал вот так
@Squashman при запуске этой команды на CMD psexec @C:\Admin\UDB_ALL\Computers.txt systeminfo| findstr /C:"Physical"
я получаю следующий Total Physical Memory: 3,071 MB Available Physical Memory: 2,417 MB systeminfo exited on Ayman-VM with error code 0. Total Physical Memory: 3,071 MB Available Physical Memory: 2,397 MB systeminfo exited on Ayman-VM-2 with error code 0. Total Physical Memory: 3,071 MB Available Physical Memory: 2,434 MB systeminfo exited on Ayman-VM-3 with error code 0.
, как я могу вывести каждое значение на желаемый %%a.log
?
Вам не понадобится сторонняя утилита PSExec
или цикл For
: @%SystemRoot\System32\wbem\WMIC.exe /Node:@C:\Somewhere\Computers.txt /FailFast:1000 /Output:AllNames.csv OS Get CSName /Format:CSV
. Если вы на самом деле ищете не только CSName, что очень вероятно, потому что оно, вероятно, будет таким же, как имя уже в Computers.txt
, и вы пытаетесь получить дополнительную информацию, например, список информации о ПК, тогда вопрос был покрыт раньше. Я советую использовать вместо этого PowerShell или VBScript / JScript, которые встроены и намного лучше подходят для этого типа задач.
@Ayman, помещающий столько кода и вывод в комментарий, в основном нечитаем. Любая подобная дополнительная информация должна быть помещена в ваш вопрос, используя ссылку редактировать.
@Compo, спасибо за ответ, проблема в том, что это должен быть только пакетный файл, потому что он предназначен для организации, которая не поддерживает PowerShell, и поэтому я ограничен параметрами, а с вашим решением я не могу установить свободное место на диске значение в ГБ
В моем комментарии используется та же команда, что и в вашей, WMIC
, поэтому ваш код также предоставляет результат в байтах, а не в ГБ. Кстати, командные файлы не могут работать напрямую с количеством байтов, эквивалентным примерно 2 ГБ или более, поэтому вам нужно будет поискать на этом сайте обходной путь, чтобы разделить байты на рабочие фрагменты, выполнить преобразования, а затем при необходимости присоединяйтесь, (если вы не можете использовать другие встроенные инструменты создания сценариев, VBScript, JScript или PowerShell). Я также настоятельно рекомендую снова не использовать очень медленную утилиту systeminfo.exe
, если только это не станет крайней мерой.
@Compo, большое спасибо за помощь, я подтвердил, что можно использовать PowerShell в организации, так как он будет использоваться только на сервере
Командная строка в Windows не имеет ничего общего с "DOS".