Задать вопрос
@m0rfo

Как запустить несколько команд в одном bat файле?

Добрый день, необходимо создать файл, при запуске которого будет создаваться локальная учетная запись, добавляться в группу Администраторов и локальный пользователь User будет исключаться из данной группы. В cmd прописал следующую последовательность команд:

net user /add admin password & net localgroup Администраторы admin /add & net localgroup Администраторы User /delete

через командную строку все отрабатывает корректно, но при сохранении в bat отрабатывает только первая команда, как можно выйти из положения?
  • Вопрос задан
  • 207 просмотров
Подписаться 1 Простой 7 комментариев
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    Python-разработчик
    10 месяцев
    Далее
  • Skillbox
    1C-разработчик
    8 месяцев
    Далее
  • Нетология
    Python-разработчик с нуля
    6 месяцев
    Далее
Решения вопроса 1
master_z
@master_z
Программист
В .bat файлах достаточно писать команды каждую на отдельной строке.

Это не значит, что команды не обрабатываются — скорее всего, они не выполняются по другой причине. Чтобы понять, что именно происходит, нужно смотреть сообщения об ошибках после каждой операции.

Важно учитывать:
  • Сохраняйте файл в DOS/ANSI кодировке.
  • Имена пользователей и групп нужно писать точно, при наличии пробелов — в кавычках: "Администраторы".
  • Смотрите ошибки после выполнения команд.
  • Запускать нужно от имени администратора.


Пример рабочего батника:

@echo off
net user /add admin password
net localgroup "Администраторы" admin /add
net localgroup "Администраторы" User /delete
pause


Если не получится — могу подробно разобрать ситуацию, пиши в телегу, ссылка в профиле.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
moderatorh
@moderatorh
В IT с 1987-го года.
Все правильно!
В бат файле проще всего новую команду писать с новой строки.
Ваша задача решается примерно так:
@echo off
setlocal enabledelayedexpansion

:: Получаем переданный логин или генерируем случайный
set "username=%~1"

if "!username!"=="" (
    call :GenerateRandomName username
)

:: Проверка и повторная генерация, если имя занято (до 10 попыток)
set max_attempts=10
set attempt=0

:CheckUser
net user "!username!" >nul 2>&1
if %errorlevel% equ 0 (
    echo Пользователь "!username!" уже существует.
    set /a attempt+=1
    if !attempt! geq %max_attempts% (
        echo Не удалось сгенерировать уникальное имя за %max_attempts% попыток. Завершение.
        exit /b 1
    )
    call :GenerateRandomName username
    goto CheckUser
)

:: Создаём пользователя
echo Создаём пользователя: !username!
net user "!username!" "" /add
if %errorlevel% neq 0 (
    echo Ошибка при создании пользователя.
    exit /b 1
)

:: Добавляем в группу Администраторы
echo Добавляем пользователя в группу Администраторы...
net localgroup Администраторы "!username!" /add
if %errorlevel% neq 0 (
    echo Ошибка при добавлении в группу Администраторы.
    exit /b 1
)

:: Убираем "User" из группы Администраторы (если есть)
echo Проверяем, состоит ли User в группе Администраторы...
net localgroup Администраторы | findstr /i "\\User$" >nul
if %errorlevel% equ 0 (
    echo Убираем User из группы Администраторы...
    net localgroup Администраторы User /delete >nul 2>&1
) else (
    echo Пользователь User не входит в группу Администраторы — пропускаем.
)

echo Готово. Учётная запись "!username!" создана и назначена администратором.
pause
exit /b 0

:: =====================
:: Подпрограмма генерации случайного имени
:GenerateRandomName
setlocal
:: Инициализируем %random% (иногда требуется)
call :GetRandom rand 1000 9999
set "name=User_!rand!"
endlocal & set "%1=%name%"
exit /b

:GetRandom
set /a %1=%random% %% (%3 - %2 + 1) + %2
exit /b
Ответ написан
Комментировать
@m0rfo Автор вопроса
691b03d4956af826352511.png

Все равно не получается, сократил до создания пользователя и добавления в группу, пользователь создается в группу не добавляется, обьясните пожалуйста на моем примере, что делаю не так?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы