【问题标题】:Batch Echoing from Lateral to Horizontal从横向到横向的批量回波
【发布时间】:2013-07-10 20:49:40
【问题描述】:

我有以下问题:包含此大致信息的常规列表:

Computer1
DateImplemented
Computer2
DateImplemented
Computer3
DateImplemented
<this goes on for a while>

我想让它做什么:

Computer1,DateImplemented
Computer2,DateImplemented
<etc>

我一直在尝试很多方法,但我得到的唯一输出是:

Computer1
DateImplemented.

这将是 50 到 50 种解决方案非常简单或非常困难的场景之一。

提前谢谢你!

【问题讨论】:

  • Stack Overflow 是一个面向专业和爱好者程序员的问答网站。问题必须表明对要解决的问题的基本了解。告诉我们您尝试过什么,为什么它不起作用,以及它应该如何起作用。另请参阅:Stack Overflow question checklist.

标签: windows batch-file scripting


【解决方案1】:

大概是这样的吧?

@echo off
setlocal enableextensions enabledelayedexpansion
set LINENUM=0
set PREVLINE=
for /f "delims=" %%a in ('type list.txt') do (
  set /a LINENUM+=1
  set CURRLINE=%%a
  set /a REMAINDER=!LINENUM! %% 2
  if !REMAINDER! EQU 0 echo !PREVLINE!,!CURRLINE!
  set PREVLINE=!CURRLINE!
)
endlocal

(当然,假设您的数据在 list.txt 中)

【讨论】:

  • +1,效果很好,除了感叹号 ! 和空行,但如果需要,可以修复。
  • 正确--如果输入文件包含空行或需要转义的字符,此脚本将不起作用。 PowerShell 会是更好的选择。
  • 转义不是重点,它适用于&amp;&gt;&lt;|%^delayed expansion 杀死感叹号!for 循环空行。这可以批量修复。您可以切换delayed expansion 并用行号填充空行(以后可以删除)。
  • 取模运算符确定当前行号是奇数还是偶数。
【解决方案2】:
@echo off
setlocal EnableDelayedExpansion
set computer=
for /F "delims=" %%a in (list.txt) do (
   if not defined computer (
      set "computer=%%a"
   ) else (
      echo !computer!,%%a
      set computer=
   )
)

与往常一样,如果需要,可以修改此批处理文件以管理特殊批处理字符。

【讨论】:

  • 非常感谢你们。现在我知道如何最终做到这一点。 :)
猜你喜欢
  • 1970-01-01
  • 2012-07-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-12
  • 2017-07-27
  • 1970-01-01
相关资源
最近更新 更多