I have yet another Batch file scenario to present to ya if someone would be kind enough to assist me.
The following is only an extraction of a larger, master bat file (it's also a dummy mock-up so excuse the crazy "echo"'s):
title Server WMIC
REM FULLL WMIC BELOW
rem wmic /node:%store1% csproduct get Vendor,Name,IdentifyingNumber /format:list
for /f "tokens=1,2,3" %%A in ('wmic /node:C1000 csproduct get IdentifyingNumber /format:list ^| find="="') do set test1=%%A %%B
rem pause >nul 2>nul
ping -n 10 127.0.0.1 >nul 2>nul
I know those more skilled than I already know what the above does but I like to describe it anyway lol.
It populates the IdentifyingNumber from a server named "C1000". I will reciprocate the same thing to "vendor" and "name" from WMIC if this works but IdentifyingNumber is most imperative.
I would like to convert the returned string name "IdentifyingNumber" into the string name "SerialNumber" (or "Serial#" if the hash/pound symbol is allowed).
However, I cannot seem to come up with the code to do such. I tried in a different test batch file to do an "if exists" clause but i cannot separate the "text=text" from the string even if i do several %%A %%B %%C (because "identifyingnumber=123456" is all one string).
Since my IF statements aren't that great I yet know if you can do wildcards in a statement like "If test1 =="*" (set test2=SerialNumber)..." I've tried If "test1=", if "test1 like blah" but apparently batch doesn't work like SQL. lol
I cannot find a good online resource (outside of webdeveloper) that teaches the "==" and other operators else I'd prob have learned a resolve.
I hope this made sense and if it didn't I will gladly clarify. I am just flat out of ideas on how to achieve this result, if it is even possible. If the desired resolve is not possible I do apologize for the inconvenience.
10-12-2012, 07:57 AM
Can someone please assist me? I would really appreciate it.
11-01-2012, 09:38 PM
Follow up. Can someone please help me out? I'm sorry to continue to bother WD forum but nobody has reviewed this.
11-08-2012, 03:10 PM
I can't quite work out exactly what it is you're trying to do.
Do you want the test1 variable to contain the string "Serial#=123456" instead of "IdentifyingNumber=123456", or are you trying to create a variable named "SerialNumber" that stores the value "123456"?
If it's the former, how about this
for /f "tokens=2 delims==" %%a in ('wmic /node:"%node%" csproduct get IdentifyingNumber /format:list ^| find "="') do set test1=Serial#=%%a
... or if it's the latter
for /f "tokens=1,2 delims==" %%a in ('wmic /node:"%node%" csproduct get Vendor^,Name^,IdentifyingNumber /format:list ^| find "="') do set !%%a=%%b
If you need the variable to be named SerialNumber instead of IdentifyingNumber you could perhaps handle that case specifically
for /f "tokens=1,2 delims==" %%a in ('wmic /node:"%node%" csproduct get Vendor^,Name^,IdentifyingNumber /format:list ^| find "="') do (
if /i %%a==IdentifyingNumber ( set SerialNumber=%%b ) else ( set !%%a=%%b )
11-08-2012, 10:24 PM
I think you nailed it right on, Tom! Thank you very much. I tested it in a dev batch file and then put it in my main production batch file and it works flawlessly!
I understand now how to address this need using dos batch scripts but I simply couldn't put the logic together originally. I didn't know that you could make the output with this specific of a script output as variable=something+%variable2% rather than the plain variable=%variable2%.
I have quoted this topic (and thus you) in my production file and thank you again for your detailed assistance.