我正在尝试创建一个批处理设置文件,该文件读取电脑的序列号并将其添加到文本文件中。问题是获取序列号的命令在脚本中不起作用,但当我将其复制粘贴到 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”时,我得到了序列号。我做错了什么?
批处理脚本在解析
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
这应该可以解决问题并正确捕获序列号。
你好,你的跳过和分隔符已关闭
试试这个
skip=2 tokens=2 delims==
skip 是您要跳过的行数, tokens 是您要获取的内容的位置,delim 是本例中的分隔符“=”
它对我有用