CMD/BAT - [решено] Работа с циклом

Аватара пользователя
Nilf

Re: CMD/BAT - [решено] Работа с циклом

Сообщение Nilf »

Цитата 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 уберите
Аватара пользователя
Elven

Re: CMD/BAT - [решено] Работа с циклом

Сообщение Elven »

у меня нет под рукой cmd чтобы проверить наверняка. больше всего похоже на какие-то грабли с переменной/переменными.

для проверки значения можно вывести все используемые переменные, например так:



Код:

Код: Выделить всё

echo ipinfile = %ipinfile%
echo username = %username%

ну и так далее.

но скорей всего дело в set, вроде бы в нем кавычки не нужны, т.е.



Код:

Код: Выделить всё

set ipinfile=%%~A
Аватара пользователя
alpap

Re: CMD/BAT - [решено] Работа с циклом

Сообщение alpap »

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

Re: CMD/BAT - [решено] Работа с циклом

Сообщение megaloman »

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

Re: CMD/BAT - [решено] Работа с циклом

Сообщение Iska »

Поэтому iCount, sUserName, sPassword, aNames и т.п.
Аватара пользователя
megaloman

Re: CMD/BAT - [решено] Работа с циклом

Сообщение megaloman »

Iska, Вы конечно правы, стиль, батюшка, это всё!
Цитата Декарт:



Верно определяйте слова, и вы освободите мир от половины недоразумений.
Аватара пользователя
megaloman

Re: CMD/BAT - [решено] Работа с циклом

Сообщение megaloman »

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
Аватара пользователя
Iska

Re: CMD/BAT - [решено] Работа с циклом

Сообщение Iska »

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



Скрытый текст

[spoiler]Изображение[/spoiler]
Аватара пользователя
megaloman

Re: CMD/BAT - [решено] Работа с циклом

Сообщение megaloman »

Цитата 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 уберите
CMD/BAT - [решено] Работа с циклом




Большое спасибо за Ваш вариант! Но получается что мне будет необходим тогда файлик choise.exe либо choise.com? Ежили его не будет, в случае например с XP, то ничего работать не будет? А если этот файлик воткнуть из ранней в позднюю или наоборот, то он не сможет выполниться, будет говорить что это не системная программа.
Аватара пользователя
Nilf

Re: CMD/BAT - [решено] Работа с циклом

Сообщение Nilf »

Nilf, Солнце встало, сдохли мухи: продолжаем в том же духе Изображение


Всё то же самое, сделан аналог Choice на Set

[spoiler]Код:
[/spoiler]

Код: Выделить всё

@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 не тестировал)
Ответить

Вернуться в «Скриптовые языки администрирования Windows»