今天我想创建一个简单的脚本,认为将结果存储到以下命令的var中很容易:
wmic bios get serialnumber | findstr /N /V SerialNumber
结果:
2:H3GK4S1
3:
问题是当我尝试使用wmic获取序列时,它会按预期返回字符串,但也会返回一个空字符串/行。当我尝试将序列存储到变量时,它会存储它,然后直接用空字符串覆盖它。这是我现在几乎开始工作的功能:
FOR /F "tokens=*" %g IN ('Wmic Bios Get SerialNumber ^| FINDSTR /N /V SerialNumber') DO (SET serial=%g & ECHO %g)
这给出了以下输出:
FOR /F "tokens=*" %g IN ('Wmic Bios Get SerialNumber ^| FINDSTR /N /V SerialNumber') DO (SET serial=%g & ECHO %g)
2:H3GK4S1
3:
从上面可以看出,循环覆盖了串行变量,如果有人可以帮助我找到正确的指令来实现这一点,那就太疯狂了。
答案 0 :(得分:2)
尝试this:
build.gradle
请注意,这是一个应该直接在命令提示符中执行的命令。对于批处理文件,您需要将for循环令牌中的FOR /F "tokens=*" %g IN ('Wmic Bios Get SerialNumber /format:value') DO for /f "tokens=* delims=" %# in ("%g") do set "serial=%#"
echo %serial%
加倍。
答案 1 :(得分:2)
在命令提示符下:
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
或在批处理文件中:
@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
修改
如果您乐意在批处理文件中使用带标签的部分:
@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
答案 2 :(得分:1)
在批处理文件中,您还可以使用goto
在第一次迭代后结束循环:
@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: =%]