场景:
我正在尝试重新格式化应用程序的输出(Wpkg, command wpkg.js /query:a
)。我仅限于标准命令行工具。
命令输出由重复的软件包标题块及其参数组成,即:
Mozilla Firefox
ID: mozilla-firefox
Revision: 23.0.1.1
Reboot: false
Execute: -
Priority: 100
Status: Installed
Mozilla Thunderbird
ID: mozilla-thunderbird
Revision: 17.0.8.1
Reboot: false
Execute: -
Priority: 100
Status: Installed
这会产生难以阅读的长输出。我也不需要所有信息。
因此,对于每个块,我尝试在一个变量中收集有趣的信息,然后将其输出到一行中,得到如下结果:
Mozilla Firefox mozilla-firefox 23.0.1.1 Installed
Mozilla Thunderbird mozilla-thunderbird 17.0.8.1 Installed
问题:
为此,我首先开始使用以下代码解析输出:
rem Split all lines into two tokens
@for /f "tokens=1,2" %%G IN ('%WPKG_CMD% /query:a') DO @(
rem With first token, check what to do:
rem I can get known strings (Store, Ignore)
rem or I can get package name (NewLine)
@set WpkgListAll_ToDo=NewLine
@if [%%G]==[ID:] set WpkgListAll_ToDo=Store
@if [%%G]==[Revision:] set WpkgListAll_ToDo=Store
@if [%%G]==[Reboot:] set WpkgListAll_ToDo=Ignore
@if [%%G]==[Execute:] set WpkgListAll_ToDo=Ignore
@if [%%G]==[Priority:] set WpkgListAll_ToDo=Ignore
@if [%%G]==[Status:] set WpkgListAll_ToDo=Store
rem Echo for debug purpose
@echo [%%G][%WpkgListAll_ToDo%]
rem Next follows some unimportant code
)
从上面的代码中,我完全期望得到以下调试输出:
[Mozilla][NewLine]
[Revision:][Store]
[Reboot:][Ignore]
[Execute:][Ignore]
[Priority:][Ignore]
[Status:][Store]
[Mozilla][NewLine]
[ID:][Store]
[Revision:][Store]
[Reboot:][Ignore]
[Execute:][Ignore]
[Priority:][Ignore]
[Status:][Store]
我得到的是......:
[Mozilla][]
[Revision:][]
[Reboot:][]
[Execute:][]
[Priority:][]
[Status:][]
[Mozilla][]
[ID:][]
[Revision:][]
[Reboot:][]
[Execute:][]
[Priority:][]
[Status:][]
...我一直在努力理解为什么,但我失败了。
问题:
谁能解释我为什么输出失败了,我应该怎么做才能让它正确?