cmd 命令在批处理文件中不起作用,但在普通 cmd 中起作用

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

我正在尝试创建一个批处理设置文件,该文件读取电脑的序列号并将其添加到文本文件中。问题是获取序列号的命令在脚本中不起作用,但当我将其复制粘贴到 cmd 中时它可以工作

cmd代码是:

@echo off
set CURRENT_DIR=%~dp0
@echo off
cd /d "%~dp0"
:: Check if running as administrator
net session >nul 2>&1
if %errorLevel% neq 0 (
    echo Running as administrator...
    powershell -Command "Start-Process '%0' -Verb RunAs"
    exit /b
)
echo.
echo Current Directory: %CD%
if not exist "%CURRENT_DIR%\Tracking" (
    mkdir "%CURRENT_DIR%\Tracking"
)
for /f "skip=1 tokens=2 delims=" %%a in ('wmic bios get serialnumber /value') do (
    set "TRACKID=%%a"
    goto :next
)
:next
echo %TRACKID% > "%CURRENT_DIR%\Tracking\track_id.txt"
echo Serial Number: %TRACKID%
pause

在tracking_id.txt中,我发现“Echo is OFF”而不是序列号,但是当我在cmd中运行命令“wmic bios get serialnumber”时,我得到了序列号。我做错了什么?

batch-file cmd command-line
2个回答
0
投票

批处理脚本在解析

wmic bios get serialnumber
的输出时似乎遇到了问题。要解决此问题,您可以修改脚本以使用
findstr /r [0-9]
从输出中过滤掉非数字字符。这是修改后的脚本:

@echo off
set CURRENT_DIR=%~dp0
cd /d "%~dp0"

:: Check if running as administrator
net session >nul 2>&1
if %errorLevel% neq 0 (
    echo Running as administrator...
    powershell -Command "Start-Process '%0' -Verb RunAs"
    exit /b
)

echo.
echo Current Directory: %CD%
if not exist "%CURRENT_DIR%\Tracking" (
    mkdir "%CURRENT_DIR%\Tracking"
)

for /f "skip=1 tokens=2 delims=" %%a in ('wmic bios get serialnumber /value ^| findstr /r [0-9]') do (
    set "TRACKID=%%a"
)

echo %TRACKID% > "%CURRENT_DIR%\Tracking\track_id.txt"
echo Serial Number: %TRACKID%
pause

这应该可以解决问题并正确捕获序列号。


0
投票

你好,你的跳过和分隔符已关闭

试试这个

skip=2 tokens=2 delims==

skip 是您要跳过的行数, tokens 是您要获取的内容的位置,delim 是本例中的分隔符“=”

它对我有用

© www.soinside.com 2019 - 2024. All rights reserved.