Ioncap
Ioncap

Reputation: 77

store part of outcome command to variable

Hello dear people and others,

Today i wanted to create a simple script, thought it would be easy to store the outcome to var of the following command:

wmic bios get serialnumber | findstr /N /V SerialNumber

Outcome:

2:H3GK4S1
3:

The problem is when i try to get the serial with wmic, it returns the string as expected but also an empty string/line. When i try to store the serial to a variable it stores it and then directly overwrites it with the empty string. This is the function i nearly got working now:

FOR /F "tokens=*" %g IN ('Wmic Bios Get SerialNumber ^| FINDSTR /N /V SerialNumber') DO (SET serial=%g & ECHO %g)

And this gives the following output:

FOR /F "tokens=*" %g IN ('Wmic Bios Get SerialNumber ^| FINDSTR /N /V SerialNumber') DO (SET serial=%g & ECHO %g)
2:H3GK4S1
3:

As can be seen above, the loop overwrites the serial var, if someone can help me towards the right directon to get this working, would be mad.

Upvotes: 2

Views: 1607

Answers (3)

Compo
Compo

Reputation: 38579

At the Command Prompt:

For /F "Tokens=1* Delims==" %g In ('WMIC BIOS Get SerialNumber /Value') Do @For /F "Tokens=*" %i In ("%h") Do @Set "serial=%i" & Echo %i

Or in a batch file:

@For /F "Tokens=1* Delims==" %%g In ('WMIC BIOS Get SerialNumber /Value'
) Do @For /F "Tokens=*" %%i In ("%%h") Do @Set "serial=%%i" & Echo %%i
@Pause

Edit
If you're happy to use a labelled section in your batch file:

@Echo Off
Set "serial="
For /F "Skip=1 Delims=" %%A In ('WMIC BIOS Get SerialNumber') Do If Not Defined serial Call :Sub %%A
Set serial 2>Nul
Pause
GoTo :EOF

:Sub
Set "serial=%*"
GoTo :EOF

Upvotes: 3

SachaDee
SachaDee

Reputation: 9545

In a batch file, you can also use a goto to end the loop after the first iteration :

@echo off

for /f "tokens=2 delims=:" %%a in ('wmic bios get serialnumber ^| findstr /N /V SerialNumber') do (
  set "$var=%%a"
  goto:next
)

exit/b

:next
echo Result=^> [%$var: =%]

Upvotes: 1

npocmaka
npocmaka

Reputation: 57252

Try like this:

FOR /F "tokens=*" %g IN ('Wmic Bios Get SerialNumber /format:value') DO for /f "tokens=* delims=" %# in ("%g") do set "serial=%#"

echo %serial%

Mind that's a command that should be executed in the command prompt directly.For a batch file you'll need to double the % in the for loop tokens.

Upvotes: 2

Related Questions