Имя пользователя:
Пароль:
 | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Работа с циклом

Ответить
Настройки темы
CMD/BAT - [решено] Работа с циклом

Новый участник


Сообщения: 19
Благодарности: 0

Профиль | Отправить PM | Цитировать


Всем доброго времени суток!

Господа, в продолжении темы 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

 

Ветеран


Contributor


Сообщения: 2735
Благодарности: 1699

Профиль | Отправить PM | Цитировать


Цитата ip.txt:
192.168.31.1
192.168.31.2
192.168.31.3
192.168.31.4
Код: Выделить весь код
@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
В боевой версии Echo уберите

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 26-06-2021 в 09:36. Причина: Корректировка %username% по замечанию alpap

Это сообщение посчитали полезным следующие участники:

Отправлено: 16:06, 25-06-2021 | #11



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Ветеран


Сообщения: 1274
Благодарности: 564

Профиль | Отправить PM | Цитировать


megaloman, нельзя брать имя %username%, это имя переопределит система в cmd и не будет выхода на удаленные компьютеры, останемся на локальном юзере.
Это сообщение посчитали полезным следующие участники:

Отправлено: 19:20, 25-06-2021 | #12


Ветеран


Contributor


Сообщения: 2735
Благодарности: 1699

Профиль | Отправить PM | Цитировать


alpap, Не вспомнил %username%, наверное возможны неприятности, жара в 36 градусов сказывается. Потестировал, но не так всё просто, не очень-то переопределяется. При перезапуске окна CMD всё возвращается на круги своя. На всякий случай исправил.

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 26-06-2021 в 10:04.


Отправлено: 19:54, 25-06-2021 | #13


Ветеран


Сообщения: 27449
Благодарности: 8088

Профиль | Отправить PM | Цитировать


Поэтому iCount, sUserName, sPassword, aNames и т.п.
Это сообщение посчитали полезным следующие участники:

Отправлено: 09:16, 26-06-2021 | #14


Ветеран


Contributor


Сообщения: 2735
Благодарности: 1699

Профиль | Отправить PM | Цитировать


Iska, Вы конечно правы, стиль, батюшка, это всё!
Цитата Декарт:
Верно определяйте слова, и вы освободите мир от половины недоразумений.

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.

Это сообщение посчитали полезным следующие участники:

Отправлено: 09:29, 26-06-2021 | #15


Ветеран


Contributor


Сообщения: 2735
Благодарности: 1699

Профиль | Отправить PM | Цитировать


Iska, alpap, Вообще-то что касается аккуратности и осмотрительности, то, ИМХО, было бы полезным применять SetLocal. Это может избавить от последствий недомыслия при образовании имен переменных.
Код: Выделить весь код
@Echo Off
cls
	Echo 1111   %UserName%
SetLocal
	Echo 2222   %UserName%

	Set "UserName=kuku"

	Echo 3333   %UserName%
EndLocal
	Echo 4444   %UserName%
pause
Exit /B

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.

Это сообщение посчитали полезным следующие участники:

Отправлено: 09:58, 26-06-2021 | #16


Ветеран


Сообщения: 27449
Благодарности: 8088

Профиль | Отправить PM | Цитировать


megaloman, конечно. У меня прям шаблон под это дело задан в Far Manager'е при создании пакетного файла:
Скрытый текст

Отправлено: 10:45, 26-06-2021 | #17


Ветеран


Contributor


Сообщения: 2735
Благодарности: 1699

Профиль | Отправить PM | Цитировать


Iska, Шаблон - это конечно полезно. Теперь я понимаю (постоянно недоумевал), почему у Ваших CMD всегда упорно присутствуют
SetLocal EnableExtensions EnableDelayedExpansion
Тут бы я не согласился: SetLocal - полезно
А вот EnableDelayedExpansion я стараюсь всеми силами избегать: как-то споткнулся, что в именах файлов присутствовали "!"
С фаром, конечно, удобно: Вы запускаете bat-файл, открывается CMD-окно, Вы бесчинствуете, переопределяете переменные окружения, затем, после завершения сценария CMD-окно закрывается и все эти бесчинства отменяются.
При работе в CMD-окне, запущенного, допкустим, в пуске, если не перезапускать его, получим переопределённые для этого сеанса CMD переменные окружения.

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Отправлено: 11:15, 26-06-2021 | #18


Новый участник


Сообщения: 19
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата megaloman:
Цитата ip.txt:
192.168.31.1
192.168.31.2
192.168.31.3
192.168.31.4
Код:
@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
В боевой версии Echo уберите »
Большое спасибо за Ваш вариант! Но получается что мне будет необходим тогда файлик choise.exe либо choise.com? Ежили его не будет, в случае например с XP, то ничего работать не будет? А если этот файлик воткнуть из ранней в позднюю или наоборот, то он не сможет выполниться, будет говорить что это не системная программа.

Отправлено: 07:31, 28-06-2021 | #19


Ветеран


Contributor


Сообщения: 2735
Благодарности: 1699

Профиль | Отправить 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
В XP вроде бы выполняется (WMIC не тестировал)

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 29-06-2021 в 14:15.

Это сообщение посчитали полезным следующие участники:

Отправлено: 12:48, 28-06-2021 | #20



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Работа с циклом

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
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




 
Переход