首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >逗号分隔的wmic命令

逗号分隔的wmic命令
EN

Stack Overflow用户
提问于 2016-01-20 15:38:51
回答 1查看 1.9K关注 0票数 0

我制作了这个脚本,它使用wmic从远程计算机获取信息。

代码语言:javascript
复制
set /p "user=write UserName="
set /p "password=write Password="


for /f "tokens=*" %%a in (ip.txt) do ( 

    wmic /node:%%a /user:%user% /password:%password% computersystem get Name /format:table
    wmic /node:%%a /user:%user% /password:%password% computersystem get Model /format:table
    wmic /node:%%a /user:%user% /password:%password% computersystem get totalphysicalmemory /format:table
    wmic /node:%%a /user:%user% /password:%password% cpu get Name /format:table
    wmic /node:%%a /user:%user% /password:%password% path Win32_VideoController get Name /format:table
    wmic /node:%%a /user:%user% /password:%password% os get Caption /format:table
    wmic /node:%%a /user:%user% /password:%password% csproduct get identifyingnumber /format:table
    wmic /node:%%a /user:%user% /password:%password% desktopmonitor get screenheight /format:table
    wmic /node:%%a /user:%user% /password:%password% desktopmonitor get screenwidth /format:table

  )>>a.csv

但是输出有点奇怪,它用"enter“分隔,知道如何分隔逗号吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-20 20:17:35

您可以尝试以下代码片段:

代码语言:javascript
复制
@echo off
setlocal EnableDelayedExpansion
set /P "user=write UserName="
set /P "password=write Password="
> "a.csv" (
    for /F "usebackq tokens=*" %%a in ("ip.txt") do (
        set "lineString="
        for /F "tokens=1,* delims==" %%A in ('wmic /node:%%a /user:%user% /password:%password% computersystem             get Name                /value') do for /F "delims=" %%Z in ("%%B") do set "lineString=!lineString!,%%Z"
        for /F "tokens=1,* delims==" %%A in ('wmic /node:%%a /user:%user% /password:%password% computersystem             get Model               /value') do for /F "delims=" %%Z in ("%%B") do set "lineString=!lineString!,%%Z"
        for /F "tokens=1,* delims==" %%A in ('wmic /node:%%a /user:%user% /password:%password% computersystem             get totalphysicalmemory /value') do for /F "delims=" %%Z in ("%%B") do set "lineString=!lineString!,%%Z"
        for /F "tokens=1,* delims==" %%A in ('wmic /node:%%a /user:%user% /password:%password% cpu                        get Name                /value') do for /F "delims=" %%Z in ("%%B") do set "lineString=!lineString!,%%Z"
        for /F "tokens=1,* delims==" %%A in ('wmic /node:%%a /user:%user% /password:%password% path Win32_VideoController get Name                /value') do for /F "delims=" %%Z in ("%%B") do set "lineString=!lineString!,%%Z"
        for /F "tokens=1,* delims==" %%A in ('wmic /node:%%a /user:%user% /password:%password% os                         get Caption             /value') do for /F "delims=" %%Z in ("%%B") do set "lineString=!lineString!,%%Z"
        for /F "tokens=1,* delims==" %%A in ('wmic /node:%%a /user:%user% /password:%password% csproduct                  get identifyingnumber   /value') do for /F "delims=" %%Z in ("%%B") do set "lineString=!lineString!,%%Z"
        for /F "tokens=1,* delims==" %%A in ('wmic /node:%%a /user:%user% /password:%password% desktopmonitor             get screenheight        /value') do for /F "delims=" %%Z in ("%%B") do set "lineString=!lineString!,%%Z"
        for /F "tokens=1,* delims==" %%A in ('wmic /node:%%a /user:%user% /password:%password% desktopmonitor             get screenwidth         /value') do for /F "delims=" %%Z in ("%%B") do set "lineString=!lineString!,%%Z"
        if defined lineString echo(!lineString:~1!
    )
)
endlocal
exit /B

wmic输出存储在变量lineString中的,-separated字符串中。对于捕获命令的输出,for /F循环是完美的。但是,wmic命令生成Unicode输出,因此需要两个嵌套的for /F循环来执行适当的Unicode/ANSI转换;一个循环将在字符串中留下孤立的尾部回车字符。

wmic的输出格式已从/format:table更改为/value,以获得如下所示的输出:Caption=Microsoft Windows 7 Enterprise,因此for /F循环可以将=作为分隔符并获得所需的值。

除此之外,我还改变了以下几点:

在您的代码中,您分别重定向了每一个循环迭代的输出。为了避免这种情况,()被放置在(最外层的) for /F循环中,所以整个数据被重定向到a.csv。因此,重定向操作符已经从附加类型的>>更改为(过)写类型的>

延迟膨胀已启用,这是在修改和读取for循环中的变量(lineString)或在()之间的代码块时所必需的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34904273

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档