Форум программистов, компьютерный форум, киберфорум
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/18: Рейтинг темы: голосов - 18, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 26.10.2013
Сообщений: 30
1

Цикл в пакетном файле

26.11.2014, 23:26. Показов 3645. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здраствуйте передо мной поставили следующую задачу:

Пакетный файл, предназначенный для создания отчета, содержащего «Software part»
(программная часть), включающую информацию о содержимом корневых каталогов
всех логических дисков в системе и «Hardware part» (аппаратная часть),
включающую сведения о конфигурации компьютера и ОС, сведения о безопасности,
параметры оборудования, такие как ОЗУ, дисковое пространство, сетевые карты и
другие. Файл-отчет копируется в некоторый сетевой каталог, задаваемый пакетным
параметром, под именем, отражающим имя компьютера, с которого получен этот
отчет. В конце выводится сообщение вида «Отчет находится в сетевом каталоге
<путь>».

посидев поискав....нашел вот такой вариант...


Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
@Echo On
Set put=%1
:start
Cls
If Not Exist %put%\ (
    Echo Каталог не найден
    Pause >nul
    cls
    Echo Выберите директорию \\admin-pc\report - пример
    Set /p put=
    Goto :start)
For /f "Skip=3 Tokens=1" %%s In ('getmac') Do Call :mac %%s
Goto:eof
:mac
If "%1"=="Отключен" Goto :getM
Set mac=%1.inf
(   Echo Drivers    
    Driverquery
    Echo ===========================
    Echo Prosess
    Tasklist
    Echo ===========================
    Echo Service)>"%put%\%mac%" 
>>"%put%\%mac%" (
    wmic.exe Service get Name, Status, StartMode | more)
Echo Отчет находится в сетевом каталоге %put%\
Pause >nul
Exit
:getM
но некоторые моменты в нем мне остались не совсем понятны:
1) что происходит в цикле фор (ну вижу что пропускается обработка первых трех строк от начала файла, далее смотрю что вроде как передается в цикл таки первая строка (Tokens), что происходит дальше в строке цикла я немного не понял....
далее по коду идет следование на метку метка...как я понял она нас ведет в конец файла..
по коду дальше задается метка мак (как я понимаю отсюда в процесе мы вытянем мак-адрес компа)
Далее в ифе проверяем состояение бата, если он отключен то идем на метку гетМ за выход
Далее сэтом объявляется имя файла, выводятся драйверы и процесы...а вот что происходит далее? мы выводим на экран путь и мак адрес или как? ....

вот примерный ход моих мыслей в попытке понять что тут происходит, прошу поправьте меня если что то не так понял из происходящего и объясните на тех местах которые я указал как не до конца понятые....
Заранее спасибо...
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.11.2014, 23:26
Ответы с готовыми решениями:

Меню в пакетном файле
Есть такой код, нужно что бы после каждой команды батник не закрывался, помогите пожалуйста. @Echo...

Использование списка значений в качестве параметров в пакетном файле
доброй ночи господа. весь вечер мучаюсь, помогите нужно создать пакетный файл с использованием...

Использование параметров в пакетном файле для удаления файлов
Здравствуйте! Почему батник вот так работает: @echo off chcp 1251&gt;nul set /p...

Изменение значений переменных в основном пакетном файле из вызываемого им пакетного файла
Допустим есть два батника, один вызывающий другой через call. ######## BAT.bat ######## echo off...

4
Эксперт WindowsАвтор FAQ
17996 / 7697 / 892
Регистрация: 25.12.2011
Сообщений: 11,470
Записей в блоге: 16
28.11.2014, 22:18 2
Цитата Сообщение от shakhtar95 Посмотреть сообщение
1) что происходит в цикле фор (ну вижу что пропускается обработка первых трех строк от начала файла, далее смотрю что вроде как передается в цикл таки первая строка (Tokens), что происходит дальше в строке цикла я немного не понял....
Не первая строка, а каждая строка за одну итерацию цикла. Tokens=1 - это часть строки до первого разделителя (табуляции или пробела).
Цитата Сообщение от shakhtar95 Посмотреть сообщение
Далее в ифе проверяем состояение бата
сетевой карты
Цитата Сообщение от shakhtar95 Посмотреть сообщение
мы выводим на экран путь и мак адрес или как?
Вывод перенаправляется в файл спецсимволом >
(потому как все команды попадают под скобки).
1
0 / 0 / 0
Регистрация: 26.10.2013
Сообщений: 30
28.11.2014, 22:36  [ТС] 3
спасибо, можно еще уточнее по циклу.... а каково его практическое значение в данном случае (в файле в целом) цикла и что происходит в этом куске
Цитата Сообщение от shakhtar95 Посмотреть сообщение
%%s In ('getmac') Do Call :mac %%s
...
Прошу прощение что прошу столько уточнений, просто хочется иметь полное представление что тут происходит в тех местах которые не совсем разобрал...
0
Эксперт WindowsАвтор FAQ
17996 / 7697 / 892
Регистрация: 25.12.2011
Сообщений: 11,470
Записей в блоге: 16
29.11.2014, 16:52 4
Лучший ответ Сообщение было отмечено shakhtar95 как решение

Решение

Введите в окно консоли getmac и узнаете.
Код по метке :mac будет обрабатывать каждую строчку вывода команды getmac (кроме первых 3 и до момента пока строки не закончатся или пока первое слово не станет = "Отключен").

Добавлено через 3 минуты
Практическое значение здесь:

Call :mac %%s - в первый аргумент подпрограммы mac попадает MAC-адрес.
Set mac=%1.inf - дальше его присвоение переменной mac.
>"%put%\%mac%" - mac используется как имя файла, в который записывается отчет.
Сколько MAC-ов выдаст getmac, столько и файлов-отчетов будет.
1
0 / 0 / 0
Регистрация: 26.10.2013
Сообщений: 30
29.11.2014, 17:01  [ТС] 5
Огромное вам спасибо
0
29.11.2014, 17:01
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.11.2014, 17:01
Помогаю со студенческими работами здесь

Почему макрос работает, если создавать и запускать его в Командной строке, а если в пакетном файле, то нет?
Подскажите почему если вводить последовательно в командной строке DOSKEY npp=&quot;C:\Program...

Цикл в файле
FileWriter file = new FileWriter(&quot;D:\\text.txt&quot;); for(int j = 0; j&lt; text.size(); j++){ ...

Работа в пакетном режиме
Народ, помогите, пожалуйста! Не могу понять в чем дело. До сих пор все работало. Имеется две базы...

sql в пакетном режиме
Цитата : Можно мне на пальцах это объяснить?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru