![]() |
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Работа с циклом |
|
CMD/BAT - [решено] Работа с циклом
|
Новый участник Сообщения: 19 |
Всем доброго времени суток!
Господа, в продолжении темы http://forum.oszone.net/thread-349049.html. Навоял вот такую штуку, но она не спешит работать, подскажите пожалуйста, где косяк? Все наверняка очень плохо, и проблемы с синтаксисом. Идея заключается в том чтобы забирать из текстового файла IP адреса, и подставлять их в цикл, для автоматического удаленного заведения пользователей сразу на нескольких удаленных ПК. echo off echo Введите имя пользователя set /p username= echo Введите пароль set /p password= echo Введите имя нового пользователя set /p newuser= echo Введите пароль нового пользователя set /p newpass= rem количество переменных (ip) считывается из файла for /f "usebackq" %%S in (`find /c /v ""^<"ip.txt"`) do (set /a NumStr=%%S) rem забирает в переменную ipinfile значение из файла IP.txt :M2 if [NOT] NumStr = 0 goto M0 goto M1 :M0 for /f "skip=%NumStr% - 1" %%A IN ("IP.txt") do (set "ipinfile=%%~A"&&goto:M3) :M3 set /a NumStr = NumStr - 1 wmic /user:"%username%" /password:"%password%"/node:"%ipinfile%" process call create "cmd /c net user %newuser% /add" wmic /user:"%username%" /password:"%password%"/node:"%ipinfile%" process call create "cmd /c net user %newuser% %newpass%" wmic /user:"%username%" /password:"%password%"/node:"%ipinfile%" process call create "cmd /c net localgroup Администраторы %newuser% /add" wmic /user:"%username%" /password:"%password%"/node:"%ipinfile%" process call create "cmd /c net localgroup Administrators %newuser% /add" goto M2 :M1 pause |
|
Отправлено: 08:45, 25-06-2021 |
Ветеран Сообщения: 2735
|
Профиль | Отправить PM | Цитировать Цитата ip.txt:
@Echo Off Set "IpTxt=Z:\Box_In\Ip.txt" :nameuser cls SET /P "nameuser=Введите имя пользователя >" SET /P "password=Введите пароль пользователя %nameuser% >" Echo Введенное имя пользователя "%nameuser%" Echo. :newuser SET /P "newuser=Введите имя нового пользователя >" SET /P "newpass=Введите пароль нового пользователя %newuser% >" Cls. Echo Введенное имя пользователя "%nameuser%" Echo Введенное имя нового пользователя "%newuser%" "%newpass%" Echo. CHOICE /C NUCB /N /M "N-новый пользователь, U-пользователь, C-завершить, B-сделать" :begin If %ErrorLevel%==1 GoTo :newuser If %ErrorLevel%==2 GoTo :nameuser If %ErrorLevel%==3 Exit /B For /f "usebackq tokens=1 delims= " %%i in ("%IpTxt%") Do ( Echo wmic /user:"%nameuser%" /password:"%password%"/node:"%%i" process call create "cmd /c net user %newuser% /add" Echo wmic /user:"%nameuser%" /password:"%password%"/node:"%%i" process call create "cmd /c net user %newuser% %newpass%" Echo wmic /user:"%nameuser%" /password:"%password%"/node:"%%i" process call create "cmd /c net localgroup Администраторы %newuser% /add" Echo wmic /user:"%nameuser%" /password:"%password%"/node:"%%i" process call create "cmd /c net localgroup Administrators %newuser% /add" ) Echo. CHOICE /C NUC /N /M "N-новый пользователь, U-пользователь, C-завершить" CLS GoTo :begin Exit /B 0 |
|
------- Последний раз редактировалось megaloman, 26-06-2021 в 09:36. Причина: Корректировка %username% по замечанию alpap Отправлено: 16:06, 25-06-2021 | #11 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 1274
|
Профиль | Отправить PM | Цитировать megaloman, нельзя брать имя %username%, это имя переопределит система в cmd и не будет выхода на удаленные компьютеры, останемся на локальном юзере.
|
Отправлено: 19:20, 25-06-2021 | #12 |
Ветеран Сообщения: 2735
|
Профиль | Отправить PM | Цитировать alpap, Не вспомнил %username%, наверное возможны неприятности, жара в 36 градусов сказывается. Потестировал, но не так всё просто, не очень-то переопределяется. При перезапуске окна CMD всё возвращается на круги своя. На всякий случай исправил.
|
------- Последний раз редактировалось megaloman, 26-06-2021 в 10:04. Отправлено: 19:54, 25-06-2021 | #13 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Поэтому iCount, sUserName, sPassword, aNames и т.п.
|
Отправлено: 09:16, 26-06-2021 | #14 |
Ветеран Сообщения: 2735
|
Профиль | Отправить PM | Цитировать Iska, Вы конечно правы, стиль, батюшка, это всё!
Цитата Декарт:
|
|
------- Отправлено: 09:29, 26-06-2021 | #15 |
Ветеран Сообщения: 2735
|
Профиль | Отправить PM | Цитировать Iska, alpap, Вообще-то что касается аккуратности и осмотрительности, то, ИМХО, было бы полезным применять SetLocal. Это может избавить от последствий недомыслия при образовании имен переменных.
|
------- Отправлено: 09:58, 26-06-2021 | #16 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать megaloman, конечно. У меня прям шаблон под это дело задан в Far Manager'е при создании пакетного файла:
Скрытый текст
![]() |
Отправлено: 10:45, 26-06-2021 | #17 |
Ветеран Сообщения: 2735
|
Профиль | Отправить PM | Цитировать Iska, Шаблон - это конечно полезно. Теперь я понимаю (постоянно недоумевал), почему у Ваших CMD всегда упорно присутствуют
SetLocal EnableExtensions EnableDelayedExpansion Тут бы я не согласился: SetLocal - полезно А вот EnableDelayedExpansion я стараюсь всеми силами избегать: как-то споткнулся, что в именах файлов присутствовали "!" С фаром, конечно, удобно: Вы запускаете bat-файл, открывается CMD-окно, Вы бесчинствуете, переопределяете переменные окружения, затем, после завершения сценария CMD-окно закрывается и все эти бесчинства отменяются. При работе в CMD-окне, запущенного, допкустим, в пуске, если не перезапускать его, получим переопределённые для этого сеанса CMD переменные окружения. |
------- Отправлено: 11:15, 26-06-2021 | #18 |
Новый участник Сообщения: 19
|
Профиль | Отправить PM | Цитировать Цитата megaloman:
|
|
Отправлено: 07:31, 28-06-2021 | #19 |
Ветеран Сообщения: 2735
|
Профиль | Отправить PM | Цитировать Nilf, Солнце встало, сдохли мухи: продолжаем в том же духе
![]() Всё то же самое, сделан аналог Choice на Set
@Echo Off Set "IpTxt=Z:\Box_In\Ip.txt" :nameuser cls SET /P "nameuser=Введите имя пользователя >" SET /P "password=Введите пароль пользователя %nameuser% >" Echo Введенное имя пользователя "%nameuser%" Echo. :newuser SET /P "newuser=Введите имя нового пользователя >" SET /P "newpass=Введите пароль нового пользователя %newuser% >" Cls. Echo Введенное имя пользователя "%nameuser%" Echo Введенное имя нового пользователя "%newuser%" "%newpass%" Echo. :Choice1 Set "Answer=" Set /P "Answer=Введите N-новый пользователь, U-пользователь, C-завершить, B-сделать >" :begin If /I "%Answer%"=="N" GoTo :newuser If /I "%Answer%"=="U" GoTo :nameuser If /I "%Answer%"=="C" Exit /B If /I Not "%Answer%"=="B" (Echo Ввод неверный: "%Answer%" &GoTo :Choice1) For /f "usebackq tokens=1 delims= " %%i in ("%IpTxt%") Do ( Echo wmic /user:"%nameuser%" /password:"%password%"/node:"%%i" process call create "cmd /c net user %newuser% /add" Echo wmic /user:"%nameuser%" /password:"%password%"/node:"%%i" process call create "cmd /c net user %newuser% %newpass%" Echo wmic /user:"%nameuser%" /password:"%password%"/node:"%%i" process call create "cmd /c net localgroup Администраторы %newuser% /add" Echo wmic /user:"%nameuser%" /password:"%password%"/node:"%%i" process call create "cmd /c net localgroup Administrators %newuser% /add" ) Echo. :Choice2 Set "Answer=" Set /P "Answer=Введите N-новый пользователь, U-пользователь, C-завершить >" CLS If /I Not "%Answer%"=="N" If /I Not "%Answer%"=="U" If /I Not "%Answer%"=="C" (Echo Ввод неверный: "%Answer%" &GoTo :Choice2) GoTo :begin Exit /B 0 |
------- Последний раз редактировалось megaloman, 29-06-2021 в 14:15. Отправлено: 12:48, 28-06-2021 | #20 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - Циклом выполнить GET curl | mulrus | Скриптовые языки администрирования Windows | 3 | 07-08-2018 18:15 | |
CMD/BAT - Работа с циклом в BAT файле | mforim | Скриптовые языки администрирования Windows | 1 | 31-12-2017 18:32 | |
CMD/BAT - [решено] Помогите разобраться с циклом | Andrei_IW | Скриптовые языки администрирования Windows | 9 | 11-07-2016 10:09 | |
PowerShell - Проблема с циклом | tuguror | Скриптовые языки администрирования Windows | 8 | 19-09-2015 17:39 | |
Нужна помощь: Не могу справится с циклом | killer.bin | AutoIt | 1 | 09-06-2009 14:42 |
|