
Я создал пакетный файл, который дает мне возможность ввести имя компьютера, и он скажет мне, кто вошел в устройство, а также серийный номер этого устройства. Я довольно часто извлекаю эти два конкретных фрагмента информации для своей работы, так что это очень полезно.
Проблема, с которой я столкнулся, скорее косметическая. Он дает мне информацию, но по какой-то причине он дает мне результаты дважды. Две строки, которые возвращаются дублированными, это:
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 )