收集UUID和Serial number的批处理文件



我一直在使用这个批处理文件收集序列号和UUID号并输出到CSV,现在它不再工作。

@echo off
set outputfile="Y:HPUUDI.csv"
for /f "delims== tokens=2" %%i in ('wmic csproduct Get "UUID" /value') do SET CSPRODUCT=%%i
for /f "delims== tokens=2" %%i in ('wmic bios get serialnumber /value') do SET SERIAL=%%i
echo UUID,Serial,>>%outputfile%
echo %CSPRODUCT%,%SERIAL%,>>%outputfile%

如果有人能看看这个文件并帮助我了解哪里出了问题,我将不胜感激

我不明白你说的"不再工作"是什么意思。? 问问题的时候请明确一点!

这里有一个测试,告诉我这在你这边是否有效,我会根据你的反应编辑这个答案!


@echo off
set "outputfile=%~dp0UUDI.csv"
@for /f %%i in (
'wmic csproduct Get "UUID" /value ^& wmic bios get serialnumber /value'
) do (
@for /f %%j in ("%%i") do set "%%j" & echo "%%j"
)
echo UUID,SerialNumber>"%outputfile%"
echo %UUID%,%SERIALNumber%>>"%outputfile%"
If exist "%outputfile%" Start "" "%outputfile%" & Exit

我能看到你提供的代码改变它的行为的唯一原因,是它已经被Mofi注释了。也就是说,您以某种方式将WMIC.exe的位置从%Path%环境中移除。

我决定提供另一种方法来实现您的目标,使用您选择的命令实用程序WMIC.exe,并使用其完整路径,以防止将来出现这种依赖。

WMIC命令通常是较慢的命令之一,因此此方法只调用它一次。您所需要做的就是将当前在1214行上的命令Echo,它们像13行一样分开。如果您的任何命令需要Get多个属性,您应该用插入转义逗号分隔它们,例如Get Property1^,Property2。然后,结果(受行/环境长度限制)将保存到变量%Title%%Record%中,这些变量稍后可以输出到循环外的文件中。注意:所有的命令都应该使用/Value,或者更正确的/Format:List

示例(不要忘记根据需要调整4行上的输出文件路径):

@Echo Off
SetLocal EnableExtensions DisableDelayedExpansion
Set "outputfile=Y:HPUUDI.csv"
Set "WMIC=%SystemRoot%System32wbemWMIC.exe"
Set "FIND=%SystemRoot%System32find.exe"
Set "Title="
Set "Record="
For /F "Tokens=1,* Delims==" %%G In ('
(
Echo CSProduct Get UUID /Value
^&
Echo BIOS Get SerialNumber /Value
^)
^| %WMIC% ^| %FIND% "="
') Do (If Not Defined Title (Set "Title=%%G") Else (
SetLocal EnableDelayedExpansion
For /F "Tokens=*" %%I In ("!Title!") Do (EndLocal
Set "Title=%%I,%%G"))
If Not Defined Record (Set "Record=%%H") Else (
SetLocal EnableDelayedExpansion
For /F "Tokens=*" %%I In ("!Record!") Do (EndLocal
Set "Record=%%I,%%H")))
If Defined Title (  Echo %Title%
Echo %Record%) 1>"%outputfile%"

最新更新