Resultados duplicados del archivo por lotes

Resultados duplicados del archivo por lotes

Creé un archivo por lotes que me permite ingresar el nombre de una computadora y me dirá quién inició sesión en el dispositivo, así como el número de serie de ese dispositivo. Extraigo bastante estos dos fragmentos de información específicos para mi trabajo, por lo que son muy útiles.

El problema con el que me he encontrado es más bien una cuestión cosmética. Me está dando la información pero por alguna razón me está dando los resultados dos veces. Las dos líneas que aparecen duplicadas son:

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

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

¿Alguien sabe por qué? ¿Alguien podría ofrecer alguna opinión? Aquí está el guión completo.

@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

Respuesta1

1.Intente ser más específico filtrando wmicopciones que devuelvan cadenas de salida de codificación más sencillas diferentes a lasUCS-2 LE BOMque lo devuelve en el formulario/comando actual, algo así como usarwmic . ... /format:xml

2.Observe que está haciendo uso de unVariables del sistemaque tiene una asignación de valor asociada en%COMPUTERNAME%,cambiar el nombre de la variable...

3.Considere usar un flujo diferente en suif %integer% EQU %integer%condición goto :labelpara allígoto another :label, y esto facilitará la visualización del flujo de posibles comandos/interacciones con las elecciones de los usuarios.

@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!

Respuesta2

Encontré una solución, a continuación se corrigen las líneas.

tuve que agregar^| 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 )

información relacionada