【问题标题】:How to parse/extract data from .nfo files如何从 .nfo 文件中解析/提取数据
【发布时间】:2015-07-01 09:43:27
【问题描述】:

如何从 .nfo 文件中解析/提取数据?

我有很多带有服务器信息的 .nfo 文件。我需要从每个 .nfo 文件中收集各种信息。例如,我需要列出:

  • 操作系统名称
  • 处理器
  • 内存
  • 驱动器和大小
  • 数据类型(哪些类型的数据位于服务器上)

如何将此信息解析为 Excel 或文本文件?由于我有超过 150 个 .nfo 文件,我不想打开每个文件并复制/过去。

希望你能帮助我。

【问题讨论】:

  • 添加示例内容。
  • 我不确定如何添加示例内容。我通过命令获取了.nfo文件:msinfo32 /computer "Server name" /nfo "filename.nfo" /categories + systemsummary
  • 学习 Perl 或 Python 等具有良好文本操作支持的编程语言。
  • @user2266449 非常有用的评论...
  • 这是针对一般问题的一般评论。如果您已经添加了一行代码或为实际解决问题付出了一些努力,而不是仅仅要求其他人为您完成工作,那么我很乐意帮助您解决具体问题。

标签: xml shell batch-file cmd server


【解决方案1】:

我猜您可能希望解析 MSINFO32 的 .nfo 输出。下面的代码是我发现解析整个文件最直接的方法,并提供易于管理的列表。这使用 ElementTree:

https://docs.python.org/3/library/xml.etree.elementtree.html

import xml.etree.ElementTree as ET

tree = ET.parse('MSINFO32.nfo')
root = tree.getroot()

for element in root.iter('Data'):
    out = []
    for n in range(len(element)):
        out.append('{0}'.format(element[n].text))
    print(out)

输出如下:

['OS Name', 'Microsoft Windows 10 Enterprise Evaluation']
['Version', '10.0.15063 Build 15063']
['Other OS Description ', 'Not Available']
['OS Manufacturer', 'Microsoft Corporation']
['System Name', 'WIN10BLANK']
['System Manufacturer', 'Microsoft Corporation']
['System Model', 'Virtual Machine']
['System Type', 'x64-based PC']
['System SKU', 'Unsupported']

【讨论】:

    【解决方案2】:

    我不 Data types 打印其他内容。msinfo32 将其报告打印为 unicode xml 文件,因此如果首先将它们转换为 ascii,它们可以被解析为文本文件:

    (如果所有.nfo文件都在同一个目录下)

    @echo off
    
    setlocal enableDelayedExpansion
    ::OS Name
    ::Processor
    ::Total Physical Memory
    ::Drive
    ::Size
    
    set "line1="
    set "line2="
    for %%X in (*.nfo) do (
        echo+
        echo ---%%X---
        echo+
        type "%%~fX" > "%temp%\%%~nxX"
        rem exit /b 0
        for /f "usebackq tokens=3 delims=[]" %%# in ("%temp%\%%~nxX") do (
            rem echo %%#
            set "line2=!line1!"
            set "line1=%%#"
            rem echo !line1!
            rem echo !line1! !line2!
            if "!line2!" equ "Size" (
                echo !line2! - !line1!
            )
    
            if "!line2!" equ "Drive" (
                echo !line2! - !line1!
            )
    
            if "!line2!" equ "Total Physical Memory" (
                echo !line2! - !line1!
            )
    
            if "!line2!" equ "OS Name" (
                echo !line2! - !line1!
            )
    
            if "!line2!" equ "Processor" (
                echo !line2! - !line1!
            )
        )
    
        del /q /f "%temp%\%%~nxX" >nul 2>&1
    )
    

    【讨论】:

    • npocmaka:非常感谢。我会调查的。在多驱动器的情况下,例如 C:, D:, E:,。然后,我想打印每个驱动器名称及其大小。也许我可以在 2. for-loop 中添加一个 while-loop。
    • @etyM - 我认为这将适用于多个驱动器。
    • npocmaka:非常感谢您的工作,谢谢。我确实得到了一些有趣的结果。让服务器有以下驱动器:A:、C:、D:、E:、F:,其中 A: 是软盘,E: 是 cd-rom。运行您的脚本返回 2 次 E 驱动器,其中第一个有 2 个大小。还有其他尺寸不存在的线条。你知道我为什么会得到这个吗?
    • 最后,我想要一个具有以下格式的文本 (.txt) 输出:服务器名称,驱动器 #1 - 驱动器 #1 的大小,驱动器 #2 - 驱动器 #2 的大小,. ..(重复该特定服务器的所有驱动器。
    • 我认为问题在于,在 nfo 文件中有许多名为“驱动器”和“大小”的主题。例如,在存储下,我们有驱动器和磁盘——脚本占据了一切。我只对存储驱动器号和大小感兴趣。
    猜你喜欢
    • 2018-12-28
    • 2014-09-15
    • 2011-04-25
    • 1970-01-01
    • 1970-01-01
    • 2011-10-12
    • 1970-01-01
    • 2020-03-08
    • 1970-01-01
    相关资源
    最近更新 更多