Вопрос или проблема
WMIC ComputerSystem where Name=ИМЯ_КОМПЬЮТЕРА call Rename Name=НовоеИмя
Этот фрагмент скрипта, который я нашел здесь, рассказывает, как изменить имя, но сначала вам нужно его найти, и что мне нужно, так это чтобы батник нашел его и сохранил для использования в этом скрипте, чтобы потом изменить его.
Если мне нужно будет искать его самому, то проще просто изменить через свойства устройства, так как батник будет содержать другие вещи, а приведенный выше скрипт будет только мешать. Скрипт уже содержит отключение UAC, отключение брандмауэра и создание папки с последующим ее расшариванием (что я также хотел бы знать, как настроить, чтобы предоставить полный доступ к разрешению всем,
я видел это здесь, но это не сработало.).(нет, это ничего плохого, странного или неправильного, это просто плохая компания, которая делает вещи неправильно).
Этот батник можно запустить с правами администратора и он покажет вам меню с двумя опциями :
- [1] Переименовать имя компьютера
- [2] Восстановить старое имя компьютера
@echo off
Mode 85,10
setlocal enableDelayedExpansion
Title Переименовать ПК с помощью WMIC
If [%1] NEQ [Admin] Goto RunAsAdmin
Set "TmpFile=%AppData%\%~n0.txt"
Set "File_Old_PC_Name=%~dp0Old_PC_Name.BAK"
If Not Exist "%TmpFile%" (
echo "%ComputerName%">"%TmpFile%"
) Else (
echo "%ComputerName%">>"%TmpFile%"
)
Call :RemoveDuplicateEntry "%TmpFile%" "%File_Old_PC_Name%"
:menuLOOP
Mode 85,10
Title Переименовать ПК с помощью WMIC
Cls & color 0B
echo(
echo( ================================Меню================================
echo(
@for /f "tokens=2* delims=_ " %%A in ('"findstr /b /c:":menu_" "%~f0""') do (
echo %%A %%B
)
echo(
echo( ====================================================================
set choice=
echo( & set /p choice=Выберите вариант или нажмите ENTER для выхода: || GOTO :EOF
echo( & call :menu_[%choice%]
GOTO:menuLOOP
::----------------------------------------------------------------------------------------------------------
:menu_[1] Переименовать имя компьютера
cls & Mode 120,10
echo(
echo( Пожалуйста, введите новое имя для этого ПК :
set /P "NewName="
(
echo Answ = MsgBox("Вы уверены, что хотите переименовать ваш компьютер в ""%NewName%"" ?"_
echo ,VbYesNo+VbQuestion,"%NewName% ?"^)
echo If Answ = VbYes then
echo wscript.Quit(0^)
echo Else
echo wscript.Quit(1^)
echo End If
)>"%tmp%\%~n0_.vbs"
Cscript /nologo "%tmp%\%~n0_.vbs"
If ["!errorlevel!"] EQU ["0"] (
Call :RenamePC "%NewName%" && Call :Ask4Reboot
) Else (
Goto :menu_[1]
)
Exit /B
::----------------------------------------------------------------------------------------------------------
:menu_[2] Восстановить старое имя компьютера
cls
set /a Cnt=0
@for /f "delims=" %%a in ('Type "%File_Old_PC_Name%"') do (
set /a Cnt+=1
Set OLD!Cnt!=%%a
)
echo(
@for /l %%N in (1 1 %Cnt%) do echo %%N - !OLD%%N!
echo(
:get selection
set selection=
set /p "selection=Введите номер старого имени компьютера: "
echo вы выбрали %selection% - !OLD%selection%!
Call :RenamePC !OLD%selection%! && Call :Ask4Reboot
Exit /B
::----------------------------------------------------------------------------------------------------------
:RenamePC
WMIC ComputerSystem where Name="%ComputerName%" call Rename Name="%~1"
Exit /B
::----------------------------------------------------------------------------------------------------------
:Ask4Reboot
(
echo Set Ws = CreateObject("wscript.shell"^)
echo Answ = MsgBox("Хотите перезагрузить ваш компьютер ?"_
echo ,VbYesNo+VbQuestion,"Хотите перезагрузить ваш компьютер ?"^)
echo If Answ = VbYes then
echo Return = Ws.Run("cmd /c shutdown -r -t 10 -c ""Вам нужно перезагрузиться через 10 секунд."" -f",0,True^)
echo Else
echo wscript.Quit(1^)
echo End If
)>"%tmp%\%~n0.vbs"
Start "" "%tmp%\%~n0.vbs"
Exit /B
::-----------------------------------------------------------------------------------------------------------
:RunAsAdmin
cls & color 0E & Mode 90,5
echo(
echo( ==========================================================
echo( Пожалуйста, подождите немного ... Запуск от имени администратора ....
echo( ==========================================================
Powershell start -verb runas '%0' Admin & Exit
::-----------------------------------------------------------------------------------------------------------
:RemoveDuplicateEntry <InputFile> <OutPutFile>
Powershell ^
$Contents=Get-Content '%1'; ^
$LowerContents=$Contents.ToUpper(^); ^
$LowerContents ^| select -unique ^| Out-File '%2'
Exit /b
::-----------------------------------------------------------------------------------------------------------
Самый простой способ – использовать переменную системы %ComputerName%
:
Wmic ComputerSystem where Caption='%ComputerName%' rename NewName
Или, используя Wmic
для получения текущего имени и использования его в цикле для формирования команды, которая устанавливает новое имя:
Командная строка:
@for /f skip^=1^usebackq %i in (` Wmic /node:. ComputerSystem get Caption ^|findstr .^|More`)do @<con: Wmic ComputerSystem where Caption='%~i' rename NewName >nul &&@echo\zOk||@echo\nOp!
Батник:
@echo off
for /f skip^=1^usebackq %%i in (`Wmic /node:. ComputerSystem get Caption ^| findstr . ^| More
`)do <con: Wmic ComputerSystem where Caption='%%~i' rename NewName>nul && echo\zOk || echo\nOp!
Замечание: Запустите от имени администратора и перезагрузите, чтобы увидеть результат.
Ответ или решение
Чтобы изменить имя компьютера через пакетный файл (batch file) без предварительного поиска имени, можно использовать встроенные переменные и утилиту WMIC. Вот детальное руководство о том, как это сделать.
Шаги для создания пакетного файла
-
Создание пакетного файла: Откройте текстовый редактор (например, Блокнот) и создайте новый файл с расширением
.bat
, например,RenamePC.bat
. -
Содержимое пакетного файла: Вставьте следующий код в файл. Этот код сначала получает текущее имя компьютера, затем предлагает ввести новое имя и, по подтверждению, выполняет переименование.
@echo off
setlocal enabledelayedexpansion
:: Получаем текущее имя компьютера
for /f "tokens=2 delims==" %%i in ('wmic computersystem get name /format:list ^| find "="') do set "CurrentName=%%i"
:: Запрос нового имени
echo Текущая имя компьютера: !CurrentName!
set /p NewName="Введите новое имя компьютера: "
:: Подтверждение
echo Вы уверены, что хотите изменить имя компьютера с "!CurrentName!" на "!NewName!"? (y/n)
set /p Confirm="Подтверждение: "
if /i "!Confirm!" neq "y" (
echo Изменение имени компьютера отменено.
exit /b
)
:: Изменяем имя компьютера
wmic computersystem where name="!CurrentName!" call Rename name="!NewName!"
:: Перезагрузка
echo Компьютер должен быть перезагружен для применения изменений. Перезагрузить сейчас? (y/n)
set /p Reboot="Подтверждение: "
if /i "!Reboot!" == "y" (
shutdown /r /t 0
)
endlocal
exit /b
Объяснение кода
-
Получение текущего имени компьютера: Используется команда
wmic computersystem get name /format:list
, чтобы получить текущее имя. Результат обрабатывается с помощьюfor
, чтобы извлечь имя компьютера и сохранить его в переменнойCurrentName
. -
Ввод нового имени: Пользователь вводит новое имя компьютера. Это имя сохраняется в переменной
NewName
. -
Подтверждение изменения: Скрипт запрашивает у пользователя подтверждение перед изменением. Если пользователь вводит не "y", выполняется выход.
-
Изменение имени компьютера: С помощью команды
wmic
имя компьютера изменяется на новое, введенное пользователем. -
Перезагрузка компьютера: Скрипт спрашивает, хочет ли пользователь перезагрузить компьютер для применения изменений, и выполняет перезагрузку, если получен положительный ответ.
Подсказки по запуску пакета
- Запуск с правами администратора: Пакетный файл должен быть запущен с правами администратора, иначе команда
wmic
не сможет изменить имя компьютера. - Тестирование скрипта: Перед использованием на рабочих машинах протестируйте пакетный файл в безопасной обстановке, чтобы убедиться, что он работает корректно.
Заключение
Используя предложенный пакетный файл, вы можете легко изменить имя компьютера, не теряя времени на его предварительный поиск. Этот подход значительно упрощает процесс и делает его более автоматизированным, что идеально подходит для системных администраторов и IT-специалистов.