[CMD] Как сделать так, что бы бат файл делал нумерацию либо же сам менял название?

Igowani

Новый пользователь
Сообщения
11
Реакции
0
Здраствуйте, мне нужно что бы батник сам делал нумерацию либо же менял название файла. Мне нужно провести проверку компов. Мои познания в cmd минимальные, и я написал такой код systeminfo > D:\Bat\Reports\Reports.txt, не считая проблемы, что кириллица превращается во что то непонятное, но мне нужно сделать, что бы батник при создании текстовика писал цифры 1. 2. 3.... либо же выводил айпи компьютера или имя пользователя который проверяется. Заранее спасибою
 
Можно конечно и так:
Код:
systeminfo > D:\Bat\Reports\Reports_%computername%.txt

А Вы какую информацию о компьютере хотите заполучить?
 
Можно конечно и так:
Код:
systeminfo > D:\Bat\Reports\Reports_%computername%.txt

А Вы какую информацию о компьютере хотите заполучить?
Мне нужно информация о процессоре, ОС, сетевых адаптеров, память. Я просто плохо разбираюсь, желательно конечно максимально информации вытащить. Просто мы собираемся кинуть батник в наш домен, и потом с отчётов сделать таблицу.
 
Последнее редактирование:
Когда-то для случая инвентаризации АРМ собирал такой сценарий:
Код:
@Echo off
setlocal enableextensions enabledelayedexpansion

set cdtime=%date:~-10%
if not exist "%~dp0GetInfoYouPC" md "%~dp0GetInfoYouPC"
For /F "Delims=" %%I In (%~dp0pc.list) Do (
Set cpcname=%%~I
set cfile="%~dp0GetInfoYouPC/!cpcname!_%cdtime%.txt"
ping -n 1 !cpcname! | find "TTL"
if !errorlevel!==0 (
For /F "Tokens=1,3* Delims=,:" %%A In ('WMIC OS GET Caption^,Version^,OSArchitecture^,InstallDate /FORMAT:CSV^|FindStr .^|More +1^|FindStr /n .') Do Call :_Func "%%A" "Операционная система:    %%B,%%C" "" "!cfile!"
For /F "Tokens=2,3* Delims=,:" %%A In ('WMIC CPU GET socketdesignation^, Name^, MaxClockSpeed /FORMAT:CSV^|FindStr .^|More +1^|FindStr /n .') Do Call :_Func "%%A" "Процессор:        %%C,%%B" "" "!cfile!"
For /F "Tokens=2,3* Delims=,:" %%A In ('WMIC memorychip get banklabel^, capacity^, devicelocator /FORMAT:CSV^|FindStr .^|More +1^|FindStr /n .')  Do Call :_Func "%%A" "Оперативная память:    %%B,%%C" "" "!cfile!"
For /F "Tokens=2,3  Delims==:" %%A In ('WMIC COMPUTERSYSTEM GET TotalPhysicalMemory /VALUE^|FindStr .^|FindStr /n .') Do Call :_Func "%%A" "Оперативная память(в):    %%B" "" "!cfile!"
For /F "Tokens=2,3* Delims=,:" %%A In ('WMIC BASEBOARD GET Manufacturer^, Product /FORMAT:CSV^|FindStr .^|More +1^|FindStr /n .') Do Call :_Func "%%A" "Материнская плата:    %%B,%%C" "" "!cfile!"
For /F "Tokens=2,3* Delims=,:" %%A In ('WMIC BIOS GET Description^, SMBIOSBIOSVersion /FORMAT:CSV^|FindStr .^|More +1^|FindStr /n .') Do Call :_Func "%%A" "Версия BIOS:          %%B,%%C" "" "!cfile!"
For /F "Tokens=2,3* Delims=,:" %%A In ('WMIC path Win32_VideoController GET Name^, AdapterRAM /FORMAT:CSV^|FindStr .^|More +1^|FindStr /n .') Do Call :_Func "%%A" "Видеокарта:        %%C,%%B" "" "!cfile!"
For /F "Tokens=2,3* Delims==:" %%A In ('WMIC path Win32_VideoController GET VideoModeDescription /VALUE^|FindStr .^|FindStr /n .') Do Call :_Func "%%A" "Разрешение экрана:     %%C" "" "!cfile!"
For /F "Tokens=2,3* Delims=,:" %%A In ('WMIC DISKDRIVE Where ^"InterfaceType^=^'IDE^' or InterfaceType^=^'SCSI^'^" GET Model^, Size^, SerialNumber /FORMAT:CSV^|FindStr .^|More +1^|FindStr /n .') Do Call :_Func "%%A" "Жесткий диск:        %%B,%%C" "" "!cfile!"
For /F "Tokens=2,3* Delims==:" %%A In ('WMIC path Win32_CDROMDrive GET Name /VALUE^|FindStr .^|FindStr /n .') Do Call :_Func "%%A" "Привод:            %%B" "" "!cfile!"
For /F "Tokens=2,3* Delims==:" %%A In ('WMIC path Win32_NetworkAdapter Where ^"AdapterTypeId^=0 And NetConnectionStatus^=2^" GET Name /VALUE^|FindStr .^|FindStr /n .') Do Call :_Func "%%A" "Сетевая карта:        %%B" "" "!cfile!"
For /F "Tokens=2,3* Delims==:" %%A In ('WMIC path Win32_SoundDevice GET Name /VALUE^|FindStr .^|FindStr /n .') Do Call :_Func "%%A" "Звуковая карта:        %%B" "" "!cfile!"
For /F "Tokens=2,3* Delims==," %%A In ('WMIC product get name^, version^, installdate /FORMAT:CSV^|FindStr .^|More +1^|FindStr /n .') Do Call :_Func "2" "Установленное ПО:       %%B (%%C) (%%A)" "" "!cfile!"
)
)
GoTo :EOF
:_Func
    CHCP 1251 1>nul
    If %~1 EQU 1 Echo.%~2 >%4
    If %~1 GTR 1 Echo.%~2 >>%4
    CHCP 866 >nul

Рядом с файлом сценарием создаёте текстовый файл pc.list с указанием АРМ, что-то типа того:
Код:
ABC1PC
ABC2PC
SUPERPC
SERVER

И выполняете от пользователя с правами имеющего доступ к $admin компьютеров сети, например от имени доменного администратора (ну или любым известным Вас способом).
В созданной радом с файлом сценария директории "GetInfoYouPC" у Вас появятся файлы с информацией о системах.
Сценарий можно расширять.
 
Последнее редактирование:
PowerShell Сбор данных
Создаете политику в Сценариях при входе отрабатывает скрипт который вы укажите
И всю информацию заносит в БД в моем случае MSSQL
PowerShell:
#Собираем данные
$computerSystem = Get-CimInstance CIM_ComputerSystem
$windowsInfo = Get-CimInstance -ClassName win32_operatingsystem
$username = $env:USERNAME
$computername = $env:COMPUTERNAME
$vendor = Get-CimInstance -ClassName Win32_ComputerSystemProduct | foreach { $_.vendor }
$computerver = Get-CimInstance -ClassName Win32_ComputerSystemProduct | foreach { $_.version }
$serial = get-wmiobject win32_bios | foreach { $_.serialnumber }
$computerCPU = Get-CimInstance CIM_Processor |foreach { $_.Name }
$computerHDD = Get-CimInstance Win32_LogicalDisk -Filter "DeviceID = 'C:'"
$lastboot = Get-CimInstance CIM_OperatingSystem
$timeformat='MM-dd-yyyy hh:mm:ss tt'
$time = (Get-Date).ToString($timeformat)
$model = $computerSystem.Model
$HDD = "{0:N2}" -f ($computerHDD.Size/1GB)
$HDDFree = "{0:N2}" -f ($computerHDD.FreeSpace/1GB)
$RAM = "{0:N2}" -f ($computerSystem.TotalPhysicalMemory/1GB)
$Build = $windowsInfo.Version
$lastbootUP = $lastboot.LastBootUpTime
#Подключаемся к базе
$connection = New-Object System.Data.SqlClient.SqlConnection
$connection.ConnectionString = "Server=Сервер БД;Database=Имя Базы;User ID=Пользователь;Password=Пароль;"
#$connection.ConnectionString = "Data Source=Сервер БД,1433;Initial Catalog=Имя базы данных;Integrated Security=SSPI;"
$connection.Open()
#Вставляем данные в базу
$cmd = New-Object System.Data.SqlClient.SqlCommand
$cmd.connection = $connection
$cmd.CommandText = "INSERT INTO BaseTable (Datetime,Username,Computer,vendor,model, compversion,Serial,CPU,HDD,HDDFree,RAM,Build,lastboot)
VALUES('{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}','{9}','{10}','{11}','{12}')" -f
$time,$username,$computername,$vendor, $model, $computerver,$serial,$computerCPU , $HDD, $HDDFree,$RAM,$Build, $lastbootUP
$cmd.ExecuteNonQuery()
#Закрываем соединение
$connection.Close()
 
Да, этот файл просто содержит имена компьютеров в сети к которым требуется обратиться. Вы его можете формировать сами, или автоматически запросом к AD.
Для начала просто протестируйте и поймите, нужно это Вам или нет.
 
Да, этот файл просто содержит имена компьютеров в сети к которым требуется обратиться. Вы его можете формировать сами, или автоматически запросом к AD.
Для начала просто протестируйте и поймите, нужно это Вам или нет.
Понял, спасибо большое, вы очень помогли.
 
вы очень помогли.
Рано благодарить, испытайте.

Выше не тот сценарий указал (он работает только для локального АРМ), исправляюсь:

Код:
@Echo off
setlocal enableextensions enabledelayedexpansion

set cdtime=%date:~-10%
if not exist "%~dp0GetInfoYouPC" md "%~dp0GetInfoYouPC"
For /F "Delims=" %%I In (%~dp0pc.list) Do (
Set cpcname=%%~I
set cfile="%~dp0GetInfoYouPC/!cpcname!_%cdtime%.txt"
ping -n 1 !cpcname! | find "TTL"
if !errorlevel!==0 (
For /F "Tokens=1,3* Delims=,:" %%A In ('WMIC /node:!cpcname! OS GET Caption^,Version^,OSArchitecture^,InstallDate /FORMAT:CSV^|FindStr .^|More +1^|FindStr /n .') Do Call :_Func "%%A" "Операционная система:    %%B,%%C" "" "!cfile!"
For /F "Tokens=2,3* Delims=,:" %%A In ('WMIC /node:!cpcname! CPU GET socketdesignation^, Name^, MaxClockSpeed /FORMAT:CSV^|FindStr .^|More +1^|FindStr /n .') Do Call :_Func "%%A" "Процессор:        %%C,%%B" "" "!cfile!"
For /F "Tokens=2,3* Delims=,:" %%A In ('WMIC /node:!cpcname! memorychip get banklabel^, capacity^, devicelocator /FORMAT:CSV^|FindStr .^|More +1^|FindStr /n .')  Do Call :_Func "%%A" "Оперативная память:    %%B,%%C" "" "!cfile!"
For /F "Tokens=2,3  Delims==:" %%A In ('WMIC /node:!cpcname! COMPUTERSYSTEM GET TotalPhysicalMemory /VALUE^|FindStr .^|FindStr /n .') Do Call :_Func "%%A" "Оперативная память(в):    %%B" "" "!cfile!"
For /F "Tokens=2,3* Delims=,:" %%A In ('WMIC /node:!cpcname! BASEBOARD GET Manufacturer^, Product /FORMAT:CSV^|FindStr .^|More +1^|FindStr /n .') Do Call :_Func "%%A" "Материнская плата:    %%B,%%C" "" "!cfile!"
For /F "Tokens=2,3* Delims=,:" %%A In ('WMIC /node:!cpcname! BIOS GET Description^, SMBIOSBIOSVersion /FORMAT:CSV^|FindStr .^|More +1^|FindStr /n .') Do Call :_Func "%%A" "Версия BIOS:          %%B,%%C" "" "!cfile!"
For /F "Tokens=2,3* Delims=,:" %%A In ('WMIC /node:!cpcname! path Win32_VideoController GET Name^, AdapterRAM /FORMAT:CSV^|FindStr .^|More +1^|FindStr /n .') Do Call :_Func "%%A" "Видеокарта:        %%C,%%B" "" "!cfile!"
For /F "Tokens=2,3* Delims==:" %%A In ('WMIC /node:!cpcname! path Win32_VideoController GET VideoModeDescription /VALUE^|FindStr .^|FindStr /n .') Do Call :_Func "%%A" "Разрешение экрана:     %%C" "" "!cfile!"
For /F "Tokens=2,3* Delims=,:" %%A In ('WMIC /node:!cpcname! DISKDRIVE Where ^"InterfaceType^=^'IDE^' or InterfaceType^=^'SCSI^'^" GET Model^, Size^, SerialNumber /FORMAT:CSV^|FindStr .^|More +1^|FindStr /n .') Do Call :_Func "%%A" "Жесткий диск:        %%B,%%C" "" "!cfile!"
For /F "Tokens=2,3* Delims==:" %%A In ('WMIC /node:!cpcname! path Win32_CDROMDrive GET Name /VALUE^|FindStr .^|FindStr /n .') Do Call :_Func "%%A" "Привод:            %%B" "" "!cfile!"
For /F "Tokens=2,3* Delims==:" %%A In ('WMIC /node:!cpcname! path Win32_NetworkAdapter Where ^"AdapterTypeId^=0 And NetConnectionStatus^=2^" GET Name /VALUE^|FindStr .^|FindStr /n .') Do Call :_Func "%%A" "Сетевая карта:        %%B" "" "!cfile!"
For /F "Tokens=2,3* Delims==:" %%A In ('WMIC /node:!cpcname! path Win32_SoundDevice GET Name /VALUE^|FindStr .^|FindStr /n .') Do Call :_Func "%%A" "Звуковая карта:        %%B" "" "!cfile!"
For /F "Tokens=2,3* Delims==," %%A In ('WMIC /node:!cpcname! product get name^, version^, installdate /FORMAT:CSV^|FindStr .^|More +1^|FindStr /n .') Do Call :_Func "2" "Установленное ПО:       %%B (%%C) (%%A)" "" "!cfile!"
)
)
GoTo :EOF
:_Func
    CHCP 1251 1>nul
    If %~1 EQU 1 Echo.%~2 >%4
    If %~1 GTR 1 Echo.%~2 >>%4
    CHCP 866 >nul
 
Рано благодарить, испытайте.

Выше не тот сценарий указал (он работает только для локального АРМ), исправляюсь:

Код:
@Echo off
setlocal enableextensions enabledelayedexpansion

set cdtime=%date:~-10%
if not exist "%~dp0GetInfoYouPC" md "%~dp0GetInfoYouPC"
For /F "Delims=" %%I In (%~dp0pc.list) Do (
Set cpcname=%%~I
set cfile="%~dp0GetInfoYouPC/!cpcname!_%cdtime%.txt"
ping -n 1 !cpcname! | find "TTL"
if !errorlevel!==0 (
For /F "Tokens=1,3* Delims=,:" %%A In ('WMIC /node:!cpcname! OS GET Caption^,Version^,OSArchitecture^,InstallDate /FORMAT:CSV^|FindStr .^|More +1^|FindStr /n .') Do Call :_Func "%%A" "Операционная система:    %%B,%%C" "" "!cfile!"
For /F "Tokens=2,3* Delims=,:" %%A In ('WMIC /node:!cpcname! CPU GET socketdesignation^, Name^, MaxClockSpeed /FORMAT:CSV^|FindStr .^|More +1^|FindStr /n .') Do Call :_Func "%%A" "Процессор:        %%C,%%B" "" "!cfile!"
For /F "Tokens=2,3* Delims=,:" %%A In ('WMIC /node:!cpcname! memorychip get banklabel^, capacity^, devicelocator /FORMAT:CSV^|FindStr .^|More +1^|FindStr /n .')  Do Call :_Func "%%A" "Оперативная память:    %%B,%%C" "" "!cfile!"
For /F "Tokens=2,3  Delims==:" %%A In ('WMIC /node:!cpcname! COMPUTERSYSTEM GET TotalPhysicalMemory /VALUE^|FindStr .^|FindStr /n .') Do Call :_Func "%%A" "Оперативная память(в):    %%B" "" "!cfile!"
For /F "Tokens=2,3* Delims=,:" %%A In ('WMIC /node:!cpcname! BASEBOARD GET Manufacturer^, Product /FORMAT:CSV^|FindStr .^|More +1^|FindStr /n .') Do Call :_Func "%%A" "Материнская плата:    %%B,%%C" "" "!cfile!"
For /F "Tokens=2,3* Delims=,:" %%A In ('WMIC /node:!cpcname! BIOS GET Description^, SMBIOSBIOSVersion /FORMAT:CSV^|FindStr .^|More +1^|FindStr /n .') Do Call :_Func "%%A" "Версия BIOS:          %%B,%%C" "" "!cfile!"
For /F "Tokens=2,3* Delims=,:" %%A In ('WMIC /node:!cpcname! path Win32_VideoController GET Name^, AdapterRAM /FORMAT:CSV^|FindStr .^|More +1^|FindStr /n .') Do Call :_Func "%%A" "Видеокарта:        %%C,%%B" "" "!cfile!"
For /F "Tokens=2,3* Delims==:" %%A In ('WMIC /node:!cpcname! path Win32_VideoController GET VideoModeDescription /VALUE^|FindStr .^|FindStr /n .') Do Call :_Func "%%A" "Разрешение экрана:     %%C" "" "!cfile!"
For /F "Tokens=2,3* Delims=,:" %%A In ('WMIC /node:!cpcname! DISKDRIVE Where ^"InterfaceType^=^'IDE^' or InterfaceType^=^'SCSI^'^" GET Model^, Size^, SerialNumber /FORMAT:CSV^|FindStr .^|More +1^|FindStr /n .') Do Call :_Func "%%A" "Жесткий диск:        %%B,%%C" "" "!cfile!"
For /F "Tokens=2,3* Delims==:" %%A In ('WMIC /node:!cpcname! path Win32_CDROMDrive GET Name /VALUE^|FindStr .^|FindStr /n .') Do Call :_Func "%%A" "Привод:            %%B" "" "!cfile!"
For /F "Tokens=2,3* Delims==:" %%A In ('WMIC /node:!cpcname! path Win32_NetworkAdapter Where ^"AdapterTypeId^=0 And NetConnectionStatus^=2^" GET Name /VALUE^|FindStr .^|FindStr /n .') Do Call :_Func "%%A" "Сетевая карта:        %%B" "" "!cfile!"
For /F "Tokens=2,3* Delims==:" %%A In ('WMIC /node:!cpcname! path Win32_SoundDevice GET Name /VALUE^|FindStr .^|FindStr /n .') Do Call :_Func "%%A" "Звуковая карта:        %%B" "" "!cfile!"
For /F "Tokens=2,3* Delims==," %%A In ('WMIC /node:!cpcname! product get name^, version^, installdate /FORMAT:CSV^|FindStr .^|More +1^|FindStr /n .') Do Call :_Func "2" "Установленное ПО:       %%B (%%C) (%%A)" "" "!cfile!"
)
)
GoTo :EOF
:_Func
    CHCP 1251 1>nul
    If %~1 EQU 1 Echo.%~2 >%4
    If %~1 GTR 1 Echo.%~2 >>%4
    CHCP 866 >nul
В общем, я вставил код в блокнот, сделал бат файл, он создаёт папку, а в неё ничего не подтягивает, создал так же текстовик pc.list, всё та же проблема.
 
С правами какого пользователя запускаете?
С правами администратора. А как именно обратится к АРМ? Возможно ли по айпи? Или какой то другой способ?
 
Последнее редактирование:
С правами администратора.
Какого администратора?

Возможно ли по айпи?
Можно;

Или какой то другой способ?
Что Вы понимаете под др. способом?
Сценарий можно чуть чуть переделать и запускать локально на каждом АРМ, а не удалённо от доменного администратора/ пользователя с достаточными правами для удалённого подключения к АРМ.
 
Какого администратора?
Есть права для удалённого подключения.
Что Вы понимаете под др. способом?
Сценарий можно чуть чуть переделать и запускать локально на каждом АРМ, а не удалённо от доменного администратора/ пользователя с достаточными правами для удалённого подключения к АРМ.
Другой способ имелось ввиду помимо айпи.
Я не совсем пойму действия, я делаю бат файл с этим сценарием:
Выше не тот сценарий указал (он работает только для локального АРМ), исправляюсь:

undefined
После создаю текстовик pc.list и я так понимаю что вставляю туда айпи компьютеров.
После кидаю это в сеть или в сеть кидать не обязательно?
Извините, что не всё понимаю, просто я не работал с сетями, а тем более с их инвентаризацией.
 
Последнее редактирование:
0. Создаёте для удобства папку по короткому пути, пусть будет "c:\Test";
1. В папке создаете *.cmd сценарий из этого сообщения копирую содержимое тэга код под спойлером;
2. В папке создаёте файл "pc.list" в котором построчно прописываете либо имя АРМ, либо его IP;
3. От имени доменного администратора запускаете сценарий созданный в п.1;
4. В папке из п.0 создастся папка "GetInfoYouPC" в которой окажутся текстовые файлы с полученной информацией от АРМ.

Сам сценарий простой, в нём, с помощью команды ping проверяется доступность АРМ в сети, после чего с помощью инструментария WMIC запрашивается системная информация, затем, которая, способом перенаправления вывода записывается в создаваемый текстовый файл с именем/ IP АРМ.
 
0. Создаёте для удобства папку по короткому пути, пусть будет "c:\Test";
1. В папке создаете *.cmd сценарий из этого сообщения копирую содержимое тэга код под спойлером;
2. В папке создаёте файл "pc.list" в котором построчно прописываете либо имя АРМ, либо его IP;
3. От имени доменного администратора запускаете сценарий созданный в п.1;
4. В папке из п.0 создастся папка "GetInfoYouPC" в которой окажутся текстовые файлы с полученной информацией от АРМ.

Сам сценарий простой, в нём, с помощью команды ping проверяется доступность АРМ в сети, после чего с помощью инструментария WMIC запрашивается системная информация, затем, которая, способом перенаправления вывода записывается в создаваемый текстовый файл с именем/ IP АРМ.
Понял, спасибо, буду пробовать
 
0. Создаёте для удобства папку по короткому пути, пусть будет "c:\Test";
1. В папке создаете *.cmd сценарий из этого сообщения копирую содержимое тэга код под спойлером;
2. В папке создаёте файл "pc.list" в котором построчно прописываете либо имя АРМ, либо его IP;
3. От имени доменного администратора запускаете сценарий созданный в п.1;
4. В папке из п.0 создастся папка "GetInfoYouPC" в которой окажутся текстовые файлы с полученной информацией от АРМ.

Сам сценарий простой, в нём, с помощью команды ping проверяется доступность АРМ в сети, после чего с помощью инструментария WMIC запрашивается системная информация, затем, которая, способом перенаправления вывода записывается в создаваемый текстовый файл с именем/ IP АРМ.
Пишет, что CMD не поддерживает UNC. Я кинул файлы в сеть, по умолчанию выбрана системная папка Windows, не знаете что делать?
 
Назад
Сверху Снизу