
Ich habe eine Batchdatei erstellt, die mir die Möglichkeit gibt, einen Computernamen einzugeben und mir dann mitteilt, wer am Gerät angemeldet ist und welche Seriennummer das Gerät hat. Ich benötige diese beiden spezifischen Informationen für meine Arbeit ziemlich oft, daher ist das sehr hilfreich.
Das Problem, auf das ich gestoßen bin, ist eher kosmetischer Natur. Es gibt mir die Informationen, aber aus irgendeinem Grund werden mir die Ergebnisse zweimal angezeigt. Die beiden Zeilen, die doppelt zurückgegeben werden, sind:
echo User logged on to %computerName% is: %%i
echo Serial number of %computerName% is: %%j
Weiß jemand warum? Kann jemand etwas dazu sagen? Hier ist das vollständige Skript.
@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
Antwort1
1.Versuchen Sie, spezifischer zu sein, indem Sie wmic
Optionen filtern, die eine einfachere Kodierung von Ausgabezeichenfolgen zurückgeben, die sich von derUCS-2 LE BOMdas bringt Sie in die aktuelle Form/den aktuellen Befehl zurück, etwa wie mitwmic . ... /format:xml
2.Beachten Sie, dass Sie eineSystemvariablemit einer zugehörigen Bewertung in%COMPUTERNAME%
,Ändern Sie den Namen der Variable...
3.Erwägen Sie die Verwendung eines anderen Ablaufs in Ihremif %integer% EQU %integer%
Voraussetzung goto :label
für dortgoto another :label
, und dies erleichtert die Visualisierung des Ablaufs möglicher Befehle/Interaktionen mit den Auswahlmöglichkeiten der Benutzer.
@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!
Antwort2
Ich habe eine Lösung gefunden, unten sind die korrigierten Zeilen.
Ich musste hinzufügen^| 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 )