无法将命令的输出与.bat文件中的字符串连接

问题描述 投票:0回答:2

我正在尝试在名为

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=
并且命令没有按预期重定向输出。

batch-file cmd
2个回答
0
投票

我面临的问题是

wmic
命令生成带有尾随空格的输出,这会影响串联过程。

我通过改变解决了这个问题:

  1. FOR /F
    循环中,我们指定
    tokens=2 delims==~
    来提取
    (=)
    命令输出中等号
    wmic
    后面的值。这消除了任何前导空格。

  2. 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

0
投票

"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"
© www.soinside.com 2019 - 2024. All rights reserved.