Batch file 如何在文本文件上格式化批处理命令结果
我正在使用下面的批处理脚本检索计算机信息Batch file 如何在文本文件上格式化批处理命令结果,batch-file,Batch File,我正在使用下面的批处理脚本检索计算机信息 ( systeminfo | findstr /c:"Host Name" /c:"Domain" /c:"OS Name" /c:"OS Version" /c:"System Manufacturer" /c:"System Model" /c:"System type" /c:"Total Physical Memory" /c:"Available Physical Memory" wmic bios get serialnu
(
systeminfo | findstr /c:"Host Name" /c:"Domain" /c:"OS Name" /c:"OS Version" /c:"System Manufacturer" /c:"System Model" /c:"System type" /c:"Total Physical Memory" /c:"Available Physical Memory"
wmic bios get serialnumber
) > "getPCinfo.txt"
然后文本文件上的结果是
Host Name: Host
OS Name: Microsoft Windows 10 Pro
OS Version: 10.0.16299 N/A Build 16299
System Manufacturer: Dell Inc.
System Model: Latitude 7480
BIOS Version: Dell Inc. 1.7.3, 10/11/2017
Total Physical Memory: 8,077 MB
Available Physical Memory: 2,450 MB
Domain: Domain.Domain.Domain.net
S e r i a l N u m b e r
3 R K 5 M H 2
我可以知道如何将序列号格式化为与先前信息相同的格式,如:-
S e r i a l N u m b e r : 3 R K 5 M H 2
这应该对你有用
@echo off
systeminfo | findstr /c:"Host Name" /c:"Domain" /c:"OS Name" /c:"OS Version" /c:"System Manufacturer" /c:"System Model" /c:"System type" /c:"Total Physical Memory" /c:"Available Physical Memory">"getPCinfo.txt"
FOR /F "tokens=1,2 delims==" %%G IN ('wmic bios get serialnumber /value ^|find /I "serialnumber"') DO >>"getPCinfo.txt" echo %%G : %%H
这应该对你有用
@echo off
systeminfo | findstr /c:"Host Name" /c:"Domain" /c:"OS Name" /c:"OS Version" /c:"System Manufacturer" /c:"System Model" /c:"System type" /c:"Total Physical Memory" /c:"Available Physical Memory">"getPCinfo.txt"
FOR /F "tokens=1,2 delims==" %%G IN ('wmic bios get serialnumber /value ^|find /I "serialnumber"') DO >>"getPCinfo.txt" echo %%G : %%H
这是一个字符编码问题:
systeminfo
返回ASCII/ANSI文本,但wmic
返回Unicode文本
已经展示了一种将wmic
输出转换为ASCII/ANSI文本的方法,尽管为了避免像孤立回车(CR)字符这样的转换人工制品,我会以稍微不同的方式编写:
systeminfo | findstr/c:“主机名”/c:“域”/c:“操作系统名”/c:“操作系统版本”/c:“系统制造商”/c:“系统型号”/c:“系统类型”/c:“总物理内存”/c:“可用物理内存”>“getPCInfo.txt”
对于/F“delims=“%%H in('wmic BIOS get SerialNumber/VALUE')do for/F”令牌=1*delims==“%%I in(%%H”)do>>“getPCInfo.txt”echo%%I:%%J
无论如何,这里有另一种使用临时文件的方法:
systeminfo | findstr/c:“主机名”/c:“域”/c:“操作系统名”/c:“操作系统版本”/c:“系统制造商”/c:“系统型号”/c:“系统类型”/c:“总物理内存”/c:“可用物理内存”>“getPCInfo.txt”
wmic bios获取serialnumber/VALUE>“getPCInfo.tmp”
键入“getPCInfo.tmp”>>“getPCInfo.txt”
删除“getPCInfo.tmp”
仅当宿主
cmd
实例未在Unicode模式下运行时(请参见其/U
选项),但默认值仍然是ASCII/ANSI(/A
)。这是一个字符编码问题:systeminfo
返回ASCII/ANSI文本,但wmic
返回Unicode文本
已经展示了一种将wmic
输出转换为ASCII/ANSI文本的方法,尽管为了避免像孤立回车(CR)字符这样的转换人工制品,我会以稍微不同的方式编写:
systeminfo | findstr/c:“主机名”/c:“域”/c:“操作系统名”/c:“操作系统版本”/c:“系统制造商”/c:“系统型号”/c:“系统类型”/c:“总物理内存”/c:“可用物理内存”>“getPCInfo.txt”
对于/F“delims=“%%H in('wmic BIOS get SerialNumber/VALUE')do for/F”令牌=1*delims==“%%I in(%%H”)do>>“getPCInfo.txt”echo%%I:%%J
无论如何,这里有另一种使用临时文件的方法:
systeminfo | findstr/c:“主机名”/c:“域”/c:“操作系统名”/c:“操作系统版本”/c:“系统制造商”/c:“系统型号”/c:“系统类型”/c:“总物理内存”/c:“可用物理内存”>“getPCInfo.txt”
wmic bios获取serialnumber/VALUE>“getPCInfo.tmp”
键入“getPCInfo.tmp”>>“getPCInfo.txt”
删除“getPCInfo.tmp”
仅当宿主
cmd
实例未在Unicode模式下运行时(请参见其/U
选项),但默认值为ASCII/ANSI(/A
)时,此选项才起作用。我不喜欢脚本中的行太长-您太快了。此批处理使用findstr的默认正则表达式模式,锚定在以
/B
并用点替换搜索字符串中的空格
:: Q:\Test\2018\06\22\Get-PCInfo.cmd
@Echo off
FOR /F "tokens=1,2 delims==" %%A IN ('
wmic bios get serialnumber /value ^|find /I "serialnumber"
') DO For %%C in (%%B) Do Set "BIOS=%%A: %%C"
Set "Find=Host.Name Domain OS.Name OS.Version System.Manufacturer"
Set "Find=%Find% System.Model System.type Total.Physical.Memory"
Set "Find=%Find% BIOS.Version Available.Physical.Memory"
( systeminfo | findstr /I /B "%Find%"
Echo=%BIOS%
) >getPCinfo.txt
样本输出:
> type getPCinfo.txt
Host Name: HOST
OS Name: Microsoft Windows 10 Pro
OS Version: 10.0.16299 N/A Build 16299
System Manufacturer: System manufacturer
System Model: System Product Name
System Type: x64-based PC
BIOS Version: American Megatrends Inc. 1408 , 09/21/2010
Total Physical Memory: 24.566 MB
Available Physical Memory: 14.753 MB
Domain: Doamin
SerialNumber: Number
我不喜欢脚本中有太长的行,因为您太快就失去了概述。
此批处理使用findstr的默认正则表达式模式,锚定在以
/B
并用点替换搜索字符串中的空格
:: Q:\Test\2018\06\22\Get-PCInfo.cmd
@Echo off
FOR /F "tokens=1,2 delims==" %%A IN ('
wmic bios get serialnumber /value ^|find /I "serialnumber"
') DO For %%C in (%%B) Do Set "BIOS=%%A: %%C"
Set "Find=Host.Name Domain OS.Name OS.Version System.Manufacturer"
Set "Find=%Find% System.Model System.type Total.Physical.Memory"
Set "Find=%Find% BIOS.Version Available.Physical.Memory"
( systeminfo | findstr /I /B "%Find%"
Echo=%BIOS%
) >getPCinfo.txt
样本输出:
> type getPCinfo.txt
Host Name: HOST
OS Name: Microsoft Windows 10 Pro
OS Version: 10.0.16299 N/A Build 16299
System Manufacturer: System manufacturer
System Model: System Product Name
System Type: x64-based PC
BIOS Version: American Megatrends Inc. 1408 , 09/21/2010
Total Physical Memory: 24.566 MB
Available Physical Memory: 14.753 MB
Domain: Doamin
SerialNumber: Number
这是一个未经测试的PowerShell版本,只是因为systeminfo需要多长时间: PCInfo.ps1
$Properties=@{
主机名=(GWMI Win32操作系统).CSName
OS_Name=(GWMI Win32_OperatingSystem)。标题
OS_Version=GWMI Win32_操作系统|%{$\u.Version+'build'+$\u.BuildNumber}
系统\制造商=(GWMI Win32 \计算机系统)。制造商
System_Model=(GWMI Win32_Computersystem).Model
BIOS_版本=(GWMI Win32_BIOS)。SMBIOS版本
总物理内存=GWMI Win32物理内存|测量容量-总和|%{[String]$([Math]::四舍五入($.Sum/1MB),0))+'MB'}
可用的物理内存=GWMI Win32操作系统|%{[String]$([Math]::Round($.FreePhysicalMemory*1KB/1MB),0))+'MB'}
Domain=GWMI Win32_Computersystem |%{$\.DNSHostName+'.+$\.Domain}
序列号=(GWMI Win32_BIOS).SerialNumber}
$ColumnWidth=($Properties.Keys | Measure-最大长度)。最大值
$Properties.GetEnumerator()|排序名称|%{{{0,-$ColumnWidth}:{1}“-F$_.Key,$_.Value}
要运行它,请根据需要更改路径,并在命令提示下输入以下内容:
PowerShell-NoP-ExecutionPolicy RemoteSigned-File“C:\Users\YHTAN\Desktop\PCInfo.ps1”>“C:\Users\YHTAN\Desktop\PCInfo.txt”
这是一个未经测试的PowerShell版本,只是因为systeminfo需要多长时间:
PCInfo.ps1
$Properties=@{
主机名=(GWMI Win32操作系统).CSName
OS_Name=(GWMI Win32_OperatingSystem)。标题
OS_Version=GWMI Win32_操作系统|%{$\u.Version+'build'+$\u.BuildNumber}
系统\制造商=(GWMI Win32 \计算机系统)。制造商
System_Model=(GWMI Win32_Computersystem).Model
BIOS_版本=(GWMI Win32_BIOS)。SMBIOS版本
总物理内存=GWMI Win32物理内存|测量容量-总和|%{[String]$([Math]::四舍五入($.Sum/1MB),0))+'MB'}
可用的物理内存=GWMI Win32操作系统|%{[String]$([Math]::Round($.FreePhysicalMemory*1KB/1MB),0))+'MB'}
Domain=GWMI Win32_Computersystem |%{$\.DNSHostName+'.+$\.Domain}
序列号=(GWMI Win32_BIOS).SerialNumber}
$ColumnWidth=($Properties.Keys | Measure-最大长度)。最大值
$Properties.GetEnumerator()|排序名称|%{{{0,-$ColumnWidth}:{1}“-F$_.Key,$_.Value}
要运行它,请根据需要更改路径,并在命令提示下输入以下内容:
PowerShell-NoP-ExecutionPolicy RemoteSigned-Fi