【问题标题】:Batch Script FOR loop to change file批处理脚本 FOR 循环更改文件
【发布时间】:2013-10-01 07:46:53
【问题描述】:

我有一个如下所示的文件:

磁盘:总线 0 机箱 7 磁盘 14。 状态:启用 原始容量:402.61GB 用户容量:214.29GB 伦编号:18 LUN 类型:RAID 5 热备件更换:不适用 固件:C3A8 供应商:日立 型号:HUS15604 CLAR450 绑定签名:0xcdc0 CLARiiON TLA 部件号:005049032 驱动类型:FC 当前速度:4Gbps 最高速度:4Gbps 磁盘:总线 0 机箱 7 磁盘 13。 状态:启用 原始容量:402.61GB 用户容量:214.29GB 伦编号:18 LUN 类型:RAID 5 热备件更换:不适用 固件:C3A8 供应商:日立 型号:HUS15604 CLAR450 绑定签名:0xcdc0 CLARiiON TLA 部件号:005049032 驱动类型:FC 当前速度:4Gbps 最高速度:4Gbps 磁盘:总线 0 机箱 7 磁盘 12。 状态:启用 原始容量:402.61GB 用户容量:214.29GB 伦编号:18 LUN 类型:RAID 5 热备件更换:不适用 固件:C3A8 供应商:日立 型号:HUS15604 CLAR450 绑定签名:0xcdc0 CLARiiON TLA 部件号:005049032 驱动类型:FC 当前速度:4Gbps 最高速度:4Gbps

我想读取文件并写入如下所示:

磁盘状态 Raw_Capacity User_Capacity 总线 0 机箱 7 磁盘 14。启用 402.61GB 214.29GB 总线 0 机柜 7 磁盘 13. 启用 402.61GB 214.29GB 总线 0 机柜 7 磁盘 12。启用 402.61GB 214.29GB

尝试使用 FOR 循环。任何帮助表示赞赏,谢谢。

【问题讨论】:

  • 向我们展示您到目前为止所尝试的内容.. 这不是谷歌..
  • 您使用的是什么操作系统? “批处理文件”是什么意思? Windows CMD.EXE?为什么你必须使用它?不能用PowerShell吗?

标签: windows batch-file cmd


【解决方案1】:

你可以试试这个:

@echo off &setlocal enabledelayedexpansion
for /f "delims=" %%a in (file) do (
    set "line=%%a"
    if /i "!line:Disk:=!" neq "!line!" <nul set/p"=!line:*Disk:=!   "
    if /i "!line:Raw=!" neq "!line!" <nul set/p"=!line:*Capacity:=! "
    if /i "!line:User=!" neq "!line!" <nul set/p"=!line:*Capacity:=!"
    if /i "!line:Maximum Speed=!" neq "!line!" echo(
)

输出是:

总线 0 机柜 7 磁盘 14. 402.61GB 214.29GB 总线 0 机柜 7 磁盘 13. 402.61GB 214.29GB 总线 0 机柜 7 磁盘 12. 402.61GB 214.29GB

【讨论】:

    【解决方案2】:

    file.log 是这里的输入文件。我使用了 Endoro 的技术,但做了一些小的改动。

    @echo off
    setlocal enabledelayedexpansion
    (
    echo Disk            State     Raw_Capacity  User_Capacity
    for /f "usebackq delims=" %%a in ("file.log") do (
        set "line=%%a"
        if /i "!line:Disk:=!" neq "!line!" <nul set/p"=!line:*Disk:=!   "
        if /i "!line:State=!" neq "!line!" <nul set/p"=!line:*State:=!   "
        if /i "!line:Raw=!"   neq "!line!" <nul set/p"=!line:*Capacity:=! "
        if /i "!line:User=!"  neq "!line!" <nul set/p"=!line:*Capacity:=!"&echo(
    )
    )>"output file.txt"
    

    【讨论】:

      【解决方案3】:

      主题的另一个变体:)

      @echo off
      setlocal enableDelayedExpansion
      >output.txt (
        echo Disk            State     Raw_Capacity  User_Capacity
        for /f "tokens=1* delims=:" %%A in (input.txt) do (
          for %%V in (Disk State "Raw Capacity") do if %%~V==%%A set "%%A=%%B"
          if "%%A"=="User Capacity" echo !Disk!  !State! !Raw Capacity!              %%B
        )
      )
      

      【讨论】:

        猜你喜欢
        • 2023-03-27
        • 1970-01-01
        • 2023-04-08
        • 1970-01-01
        • 1970-01-01
        • 2011-02-05
        • 2017-02-03
        • 2023-03-06
        • 1970-01-01
        相关资源
        最近更新 更多