Работа с переменными в 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

Этот код делает следующее:

  1. Создаем переменную region с значением "N16-"
  2. Узнаем серийный номер компьютера и записываем его в файл
  3. Создаем переменную serial и кладем в нее содержимое файла
  4. Удаляем файл
  5. Выводим объединённые переменные и кладем их в буфер обмена

Проблема во второй строке: никак не могу нагуглить как вывод команды положить сразу в переменную, минуя чехарду с файлами?

Пробую так:

FOR /F "usebackq skip=1" %i IN (`wmic bios get serialnumber`) DO echo %i | clip

Но вывод команды многострочный. В итоге в буфере обмена лежит строка: Режим вывода команд на экран (ECHO) включен.


Ответы (3 шт):

Автор решения: Tenk

Вот самый короткий вариант, который удалось сделать:

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

Если кто может лучше, буду рад посмотреть другие варианты.

→ Ссылка
Автор решения: Tenk

Пришел к такому варианту:

FOR /F "tokens=2 delims==" %%i in ('wmic bios get serialnumber /VALUE') ^
    do powershell -command "Rename-Computer -NewName N16-%%i"

Получаем серийник, формируем имя и СРАЗУ переименовываем компьютер.

→ Ссылка
Автор решения: Urik

В третьей строке ввод пользователя, а вывад можно через set serial= и далее вторая строка.

→ Ссылка