【问题标题】:Get computer specs, and save the the results automatically获取计算机规格,并自动保存结果
【发布时间】:2020-10-01 13:05:16
【问题描述】:

我在每个命令之后添加了YOUR-COMMAND | Out-File -FilePath c:\PATH\TO\FOLDER\OUTPUT.txt,但仍然没有使用 pc 规格创建文件。将脚本保存在批处理文件中后,会弹出 cmd 并显示规范,但我需要将其自动保存在桌面上。

@echo off
echo Checking your system info, Please wait...
ipconfig | find /i "IPv4" 
systeminfo | findstr /c:"Host Name" 
systeminfo | findstr /c:"OS Name" 
systeminfo | findstr /c:"System type" 
systeminfo | findstr /c:"Domain" 
systeminfo | findstr /c:"OS Version" 
systeminfo | findstr /c:"System Model"
systeminfo | findstr /c:"Total Physical Memory" 
systeminfo | findstr /c:"System Manufacturer" 

echo.
echo Service Tag:
wmic bios get serialnumber

echo.
echo Hard Drive Space:
wmic diskdrive get Name, Manufacturer, Model, InterfaceType, MediaType, SerialNumber, size

echo.
echo CPU:
wmic cpu list brief

echo.
echo Memory:
wmic MemoryChip get BankLabel, Capacity, MemoryType, TypeDetail, Speed

echo.
echo BaseBoard:
wmic baseboard get product,Manufacturer,version,serialnumber

pause

【问题讨论】:

  • 我强烈建议您不要连续运行 8 次像 systeminfo.exe 这样运行非常非常缓慢的实用程序。您没有考虑过使用八种不同的findstr.exe 搜索模式运行一次吗? Out-File -FilePath 是 PowerShell 语法,适用于 .ps1 脚​​本,而不是 .cmd.bat 脚本。您使用了 [batch-file] 标签,您确定要使用批处理文件解决方案吗?还是您想要 PowerShell 解决方案?
  • 我对这个领域不熟悉,但我遇到了一个情况,我需要得到大约 190 pc 站的上述计算机规格。所以我需要与此类似的东西,我可以给每个 pc 用户运行并将结果以文本/excel 的形式发回给我。但这是我能得到的最多的
  • 我只是告诉你不要像克里斯那样做。如果您想看看会发生什么,请按原样运行您的脚本,并告诉我们完成需要多长时间!此外,您将在任何输出文件中遇到另一个问题,因为 WMI 输出的编码方式不同,并且您生成的 .txt 文件将具有混合编码,这可能会破坏输出!
  • 是的,其实最终的结果并不是想要的。有人告诉我做一个 for 循环,但编码不是我的领域,不能得到一个工作脚本而不是这个:(
  • 实际上有数百个 Windows NT 批处理、Windows CMD、WSH 和 PowerShell 示例,这些脚本在网络上都可用,它们执行库存类型输出。您是否考虑过看看一些,并根据您的需要调整它们?

标签: windows batch-file autosave


【解决方案1】:

根据 Compo 的建议,更有效的方法是对 Systeminfo 的单个实例执行多个 findstr 命令。下面使用宏来制定和格式化成功的 findstr 命令的输出,每个要找到的字符串通过子字符串修改提供给宏。运行 system info 命令的 For /F 循环用括号括起来,以启用重定向到完整命令输出的 .txt 文件,而不是执行多个写入操作。

关于宏使用的相同方法可以应用于 wmic 命令。

@Echo Off & Setlocal DISABLEdelayedexpansion
@Echo Off & Setlocal DISABLEdelayedexpansion
CD "%~dp0"
 Set "FSTR=( Echo/"%%~A" | %__AppDir__%findstr.exe /LIC:"$Str" > Nul 2> Nul ) && (Set "$$Str=%%~A" & <Nul Set /P "=$Str=" & <Nul Set/P "=!$$Str:*:=!" &Echo/)"
 Set "Wmic=For %%n in (1 2)Do if %%n==2 ( >>"%~n0_Outfile.txt" Echo/!Field!:&For /F "UsebackQ Delims=" %%G in (`" wmic Attrib /Format:Value 2^> Nul "`)Do If Not "%%~G" == "" For /F "Delims=" %%i in ("%%~G")Do ( 1>> "%~n0_outfile.txt" Echo/%%~i))Else Set Field="
Setlocal EnableDelayedExpansion
(For /F "Delims=" %%A in ('%__AppDir__%systeminfo.exe /FO List')Do (
 %FSTR:$Str=Host Name%
 %FSTR:$Str=OS Name%
 %FSTR:$Str=System type%
 %FSTR:$Str=System Model%
 %FSTR:$Str=Total Physical Memory%
 %FSTR:$Str=System Manufacturer%
))>"%~n0_outfile.txt"
 %WMIC:Attrib=bios get serialnumber%Bios
 %WMIC:Attrib=diskdrive get Name, Manufacturer, Model, InterfaceType, MediaType, SerialNumber, size%Hard Drive
 %WMIC:Attrib=cpu list brief%Cpu
 %WMIC:Attrib=MemoryChip get BankLabel, Capacity, MemoryType, TypeDetail, Speed%Memory
 %WMIC:Attrib=baseboard get product,Manufacturer,version,serialnumber%BaseBoard
Type "%~n0_outfile.txt"
Endlocal & Endlocal

【讨论】:

  • 关于 wmic 输出,嵌套 for 循环是一种用于从输出中去除错误回车的方法,请参阅此question and it's answers 了解更多信息。
【解决方案2】:

这是一个有趣的问题。 我不知道很多 pc specs 命令,但我知道如何将输出保存到文件中。您需要将&gt;&gt; OUTPUT.txt 附加到代码的每一行。

我已经为你做到了。这是代码!

@echo off
echo Checking your system info, Please wait... >> OUTPUT.txt
ipconfig | find /i "IPv4" >> OUTPUT.txt
systeminfo | findstr /c:"Host Name" >> OUTPUT.txt
systeminfo | findstr /c:"OS Name" >> OUTPUT.txt
systeminfo | findstr /c:"System type" >> OUTPUT.txt
systeminfo | findstr /c:"Domain" >> OUTPUT.txt
systeminfo | findstr /c:"OS Version" >> OUTPUT.txt
systeminfo | findstr /c:"System Model" >> OUTPUT.txt
systeminfo | findstr /c:"Total Physical Memory" >> OUTPUT.txt
systeminfo | findstr /c:"System Manufacturer" >> OUTPUT.txt

echo. >> OUTPUT.txt
echo Service Tag: >> OUTPUT.txt
wmic bios get serialnumber >> OUTPUT.txt

echo. >> OUTPUT.txt
echo Hard Drive Space: >> OUTPUT.txt
wmic diskdrive get Name, Manufacturer, Model, InterfaceType, MediaType, SerialNumber, size >> OUTPUT.txt

echo. >> OUTPUT.txt
echo CPU: >> OUTPUT.txt
wmic cpu list brief >> OUTPUT.txt

echo. >> OUTPUT.txt
echo Memory: >> OUTPUT.txt
wmic MemoryChip get BankLabel, Capacity, MemoryType, TypeDetail, Speed >> OUTPUT.txt

echo. >> OUTPUT.txt
echo BaseBoard: >> OUTPUT.txt
wmic baseboard get product,Manufacturer,version,serialnumber >> OUTPUT.txt

pause

【讨论】:

  • 我做了类似的事情,但打印出来的 wmic 部分并不清楚。但感谢您的反馈
  • 我建议您在输出到一个文件时永远不要使用这种类型的语法。为了这样做,output.txt 需要为每个命令行打开、写入然后关闭。这浪费了很多资源。
猜你喜欢
  • 2022-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多