Дублировать результаты из пакетного файла

Дублировать результаты из пакетного файла

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

Проблема, с которой я столкнулся, скорее косметическая. Он дает мне информацию, но по какой-то причине он дает мне результаты дважды. Две строки, которые возвращаются дублированными, это:

echo User logged on to %computerName% is: %%i

echo Serial number of %computerName% is: %%j

Кто-нибудь знает почему? Может кто-нибудь что-нибудь подсказать? Вот полный сценарий.

@echo off
:beginning
set /p computerName=Enter the computer name:
for /f "skip=1 delims=" %%i in ('wmic /node:"%computerName%" computersystem get username') do (
  echo User logged on to %computerName% is: %%i
)

for /f "skip=1 delims=" %%j in ('wmic /node:"%computerName%" bios get serialnumber') do (
  echo Serial number of %computerName% is: %%j
)

echo.

:menu
echo Choose one of the following options:
echo 1. Run the script again
echo 2. Turn to command prompt

echo.

set /p menuOption=Enter your choice:

if "%menuOption%"=="1" goto start
if "%menuOption%"=="2" goto end

:start
echo.
goto main

:end
cmd /k

:main
goto beginning

решение1

1.Постарайтесь быть более конкретными, отфильтровав wmicпараметры, которые возвращают более простую кодировку выходных строк, отличную отUCS-2 LE БОМкоторый возвращает вас в текущую форму/команду, что-то вроде использованияwmic . ... /format:xml

2.Обратите внимание, что вы используетеСистемная переменнаякоторый имеет связанное назначение значения в%COMPUTERNAME%,изменить имя переменной...

3.Рассмотрите возможность использования другого потока в вашемif %integer% EQU %integer%условие goto :labelдля тамgoto another :label, и это облегчит визуализацию потока возможных команд/взаимодействий с выбором пользователей.

@echo off

:beginning
set /p "_computerName=Enter the computer name: "

for /f tokens^=4delims^=^>^< %%i in ('
   wmic /node:"%_computerName%" computersystem get username /format:xml^|find "/VALUE"
  ')do echo User logged on to %_computerName% is: %%~i


for /f tokens^=4delims^=^>^< %%i in ('
   wmic /node:"%_computerName%" bios get serialnumber /format:xml^|find "/VALUE"
  ')do echo Serial number of %_computerName% is: %%~i

:menu
echo.
echo Choose one of the following options:
echo 1. Run the script again
echo 2. Turn to command prompt

echo.
set /p "_menuOption=Enter your choice: "

if %_menuOption% equ 2 (
     "%ComSpec%" /d /q /k
    )else if %_menuOption% equ 1 (
     set _computerName=
     goto :beginning
    )else timeout 5 | echo\Invalid choice!

решение2

Я нашел решение, ниже приведены исправленные строки.

Мне пришлось добавить^| findstr /r /v "^$"

for /f "skip=1 delims=" %%i in ('wmic /node:"%computerName%" computersystem get username ^| findstr /r /v "^$"') do ( echo User logged on to %computerName% is: %%i ) 

for /f "skip=1 delims=" %%j in ('wmic /node:"%computerName%" bios get serialnumber ^| findstr /r /v "^$"') do ( echo Serial number of %computerName% is: %%j )

Связанный контент