Работа с переменными в bat
Сейчас объединяю значения двух переменных через временный файл. А хотелось бы обойтись без файлов, чтобы красивее было, и быстрее тоже. Подскажите как можно это сделать?
set region=N16-
wmic bios get serialnumber | findstr /V SerialNumber > 0.tmp
set /p serial="" <0.tmp
del 0.tmp
cls
echo %region%%serial:~0,7%| clip
Этот код делает следующее:
- Создаем переменную region с значением "N16-"
- Узнаем серийный номер компьютера и записываем его в файл
- Создаем переменную serial и кладем в нее содержимое файла
- Удаляем файл
- Выводим объединённые переменные и кладем их в буфер обмена
Проблема во второй строке: никак не могу нагуглить как вывод команды положить сразу в переменную, минуя чехарду с файлами?
Пробую так:
FOR /F "usebackq skip=1" %i IN (`wmic bios get serialnumber`) DO echo %i | clip
Но вывод команды многострочный. В итоге в буфере обмена лежит строка: Режим вывода команд на экран (ECHO) включен.
Ответы (3 шт):
Вот самый короткий вариант, который удалось сделать:
setlocal EnableDelayedExpansion
set serial=none
FOR /F "usebackq skip=1" %%i IN (`wmic bios get serialnumber`) DO IF !serial!==none set serial=%%i
ECHO N16-%serial%| clip
Если кто может лучше, буду рад посмотреть другие варианты.
Пришел к такому варианту:
FOR /F "tokens=2 delims==" %%i in ('wmic bios get serialnumber /VALUE') ^
do powershell -command "Rename-Computer -NewName N16-%%i"
Получаем серийник, формируем имя и СРАЗУ переименовываем компьютер.
В третьей строке ввод пользователя, а вывад можно через set serial= и далее вторая строка.