wmic 命令的批处理脚本中的文本乱码 [英] Text garble in batch script for wmic command

查看:14
本文介绍了wmic 命令的批处理脚本中的文本乱码的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试运行批处理脚本来获取基本的计算机信息,如 CPU、RAM 和活动网卡.这是我的代码

I'm trying to run the batch script to acquired the basic computer information like CPU,RAM and active Network card.Here is my code

@Echo OFF

set newline=^& echo.

echo Manufacturer Information> test1.txt

systeminfo|findstr /c:"Host Name" /c:"OS Name" /c:"System Model:" /c:"System Type:" /c:"Total Physical Memory:" >>test1.txt

echo CPU Information:>> test1.txt

wmic cpu get Name /Format:list >> test1.txt

echo %newline%Process Information:>> test1.txt

wmic computersystem get NumberofProcessors /Format:list >> test1.txt

echo %newline%NIC Information:>> test1.txt

wmic nicconfig where "IPEnabled=TRUE" get ipaddress, macaddress,defaultipgateway /format:list >>test1.txt

输出外观:

制造商信息主机名:DK-IT 操作系统名称:
Microsoft Windows 8.1 单语言系统模型:
Inspiron 7537 系统类型:基于 x64 的 PC 总物理内存:6,043 MB CPU 信息:

Manufacturer Information Host Name: DK-IT OS Name:
Microsoft Windows 8.1 Single Language System Model:
Inspiron 7537 System Type: x64-based PC Total Physical Memory: 6,043 MB CPU Information:

 N a m e = I n t e l ( R )   C o r e ( T M )   i 5 - 4 2 0 0 U   C P U   @   1 . 6 0 G H z 



Process Information:


 N u m b e r O f P r o c e s s o r s = 1 



NIC Information:


 D e f a u l t I P G a t e w a y = { " 1 0 . 5 . 1 . 1 " }     I P A d d r e s s = { " 1 0 . 5 . 4 . 5 4 " , " f e 8 0 : : 1 0 e b : 1 d

2 d : 2 0 8 8 : 8 b a 1 " } M A C A d d r e s s = 0 C : 8 B : F D: 9 C : 8 0 : 4 7

2 d : 2 0 8 8 : 8 b a 1 " } M A C A d d r e s s = 0 C : 8 B : F D : 9 C : 8 0 : 4 7

 D e f a u l t I P G a t e w a y =     I P A d d r e s s = { " 1 9 2 . 1 6 8 . 1 9 9 . 1 " }     M A C A d d r e s s = 0 0 : 5 0 : 5 6 :

C 0 : 0 0 : 0 1

C 0 : 0 0 : 0 1

默认 I P G a t e w a y = I P A d d d r e s s = { " 1 9 2.1 6 8 .1 9 0 .1 ", " f e 8 0 : : 6 4 b 2 : 2 a a a : e f 6 4 : fa 9 a " } M A C A d d d r e s s = 0 0 : 5 0 : 5 6 : C 0 : 0 0 : 0 8

D e f a u l t I P G a t e w a y = I P A d d r e s s = { " 1 9 2 . 1 6 8 . 1 9 0 . 1 " , " f e 8 0 : : 6 4 b 2 : 2 a a a : e f 6 4 : f a 9 a " } M A C A d d r e s s = 0 0 : 5 0 : 5 6 : C 0 : 0 0 : 0 8

谁能帮忙修改批处理文件输出的视图?

Can someone help to modify the view of batch file output?

推荐答案

您的问题是 SYSTEMINFO 产生 ANSII 输出(与大多数命令一样),但 WMIC 产生 Unicode 输出.两者混合得不好.

Your problem is SYSTEMINFO produces ANSII output (as do most commands), but WMIC produces Unicode output. The two do not mix well.

以下是三种都能产生 ANSII 输出的解决方案.

Below are three solutions that all produce ANSII output.

1) 将 WMIC 输出通过管道传输到 MORE

MORE 将 Unicode 转换为 ANSII.我还将该结果通过管道传递给 FINDSTR 以消除空行.这个解决方案的唯一问题是转换的一个怪癖导致 WMIC 输出在每行的末尾有一个额外的回车( 代替)

MORE converts Unicode to ANSII. I also pipe that result to FINDSTR to eliminate blank lines. The only problem with this solution is that a quirk with the conversions causes the WMIC output to have an extra carriage return at the end of each line (<CR><CR><LF> instead of <CR><LF>)

@echo OFF
>test1.txt (
  echo Manufacturer Information:
  systeminfo|findstr /c:"Host Name" /c:"OS Name" /c:"System Model:" /c:"System Type:" /c:"Total Physical Memory:"

  echo(
  echo CPU Information:
  wmic cpu get Name /Format:list | more | findstr .
  wmic computersystem get NumberofProcessors /Format:list | more | findstr .

  echo(
  echo NIC Information:
  wmic nicconfig where IPEnabled=TRUE get ipaddress, macaddress,defaultipgateway /format:list | more | findstr .
)


------------------------------


------------------------------

其余的解决方案都格式正确,没有任何额外的<CR>

The remaining solutions are all properly formatted, without any extra <CR>

2) 将 WMIC 输出写入临时文件,后跟 TYPE

临时文件为 Unicode 格式,TYPE 正确地将 Unicode 转换为 ANSII.我仍然将结果传送到 FINDSTR 以消除空行.

The temp file is in Unicode format, and TYPE properly converts the Unicode to ANSII. I still pipe the result to FINDSTR to eliminate blank lines.

@echo OFF
>test2.txt (
  echo Manufacturer Information:
  systeminfo|findstr /c:"Host Name" /c:"OS Name" /c:"System Model:" /c:"System Type:" /c:"Total Physical Memory:"

  echo(
  echo CPU Information:
  call :wmic cpu get Name /Format:list
  call :wmic computersystem get NumberofProcessors /Format:list

  echo(
  echo NIC Information:
  call :wmic nicconfig where IPEnabled=TRUE get ipaddress, macaddress,defaultipgateway /format:list
)
exit /b

:wmic
wmic %* >test.tmp
type test.tmp | findstr .
del test.tmp
exit /b


3) 通过两个 FOR/F 循环运行 WMIC.

第一个 FOR/F 将 WMIC 输出转换为 ANSII,但它在每一行的末尾都有额外的 .第二个 FOR/F 去掉不需要的尾随 .FOR/F 自动去除空行.

The first FOR /F converts the WMIC output to ANSII, but it has the extra <CR> at the end of each line. The second FOR /F strips off the unwanted trailing <CR>. FOR /F automatically strips blank lines.

@echo OFF
>test3.txt (
  echo Manufacturer Information:
  systeminfo|findstr /c:"Host Name" /c:"OS Name" /c:"System Model:" /c:"System Type:" /c:"Total Physical Memory:"

  echo(
  echo CPU Information:
  call :wmic cpu get Name /Format:list
  call :wmic computersystem get NumberofProcessors /Format:list

  echo(
  echo NIC Information:
  call :wmic nicconfig where IPEnabled=TRUE get ipaddress, macaddress,defaultipgateway /format:list
)
exit /b

:wmic
for /f "delims=" %%A in ('"wmic %*"') do for /f "delims=" %%B in ("%%A") do echo %%B
exit /b

这篇关于wmic 命令的批处理脚本中的文本乱码的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆