我正在尝试在名为
wmic baseboard get serialnumber
的文件中使用此字符串 HOST_MAC
重定向命令 execution.txt
的输出。
这是我的批处理文件:
@echo off
::REM Get the serial number using WMIC
FOR /F "tokens=* USEBACKQ" %%F IN (`wmic baseboard get serialnumber`) DO (
SET var=%%F
)
::REM Concatenate the serial number with the string "HOST_MAC"
set "host_mac=HOST_MAC=%var%"
::REM Save the result to a file
echo %host_mac% > "C:\Users\Dell\Desktop\execution.txt"
pause
execution.txt 文件必须如下所示:
HOST_MAC="OUTPUT_OF_COMMAND"
但是我得到的是
HOST_MAC=
并且命令没有按预期重定向输出。
我面临的问题是
wmic
命令生成带有尾随空格的输出,这会影响串联过程。
我通过改变解决了这个问题:
在
FOR /F
循环中,我们指定tokens=2 delims==~
来提取(=)
命令输出中等号wmic
后面的值。这消除了任何前导空格。
set
命令现在在 %var%
周围包含双引号。这确保了变量中的任何空格都被保留并且不会干扰连接。
这是应用我的更改后的脚本:
@echo off
:: Get the serial number using WMIC
FOR /F "tokens=2 delims==" %%F IN ('wmic baseboard get serialnumber /value') DO (
SET "var=%%F"
)
:: Concatenate the serial number with the string "HOST_MAC"
set "host_mac=HOST_MAC="%var%""
:: Save the result to a file
echo %host_mac% > "C:\Users\Dell\Desktop\execution.txt"
pause
"tokens=* USEBACKQ"
导致输出中看不到 CR LF
控制字符。所以我建议你这段代码:
@echo off
::REM Get the serial number using WMIC
FOR /F %%F IN ('wmic baseboard get serialnumber ^| findstr /r "[0-9]"') DO (
SET var=%%F
)
::REM Concatenate the serial number with the string "HOST_MAC"
set "host_mac=HOST_MAC="%var%""
::REM Save the result to a file
echo %host_mac% > "C:\Users\Dell\Desktop\execution.txt"
pause
输出:
HOST_MAC="921891283912839"