【问题标题】:Batch: Assign lines to variables批处理:将行分配给变量
【发布时间】:2016-10-28 15:38:01
【问题描述】:

我有一个文本文件 (text.txt),其中列出了一个人的姓名,后跟他们最喜欢的颜色(见下文)。我想将变量“name”分配给这个人的名字,将变量“color”分配给这个人最喜欢的颜色。

现在,我的代码通过跳过每隔一行正确地提取名称,但它没有分配该人最喜欢的颜色。非常感谢任何帮助。

text.txt

john
blue
matt
red
susan
yellow

我的脚本:

@echo off
setlocal enabledelayedexpansion
set x=0
for /f "delims=" %%a in (C:\text.txt) do (
  set /a "x=(x+1) %% 2"
  if !x! == 1 set color=%%a
  if !x! == 0 call echo !color!
)

当前输出:

john
matt
susan

【问题讨论】:

  • 要在01之间切换x,你也可以使用set /A x=1-x...
  • @aschipfl ... 或set /A x=!x^!x 启用延迟扩展)。

标签: batch-file text


【解决方案1】:

您的循环中存在逻辑问题。您必须先阅读名称,然后阅读颜色,并且只有在您拥有这两个信息时才能打印。

@echo off
setlocal enabledelayedexpansion
set x=0
for /f "delims=" %%a in (text.txt) do (
  if !x! == 0 set name=%%a
  if !x! == 1 (
    set color=%%a
    echo !name!,!color!
  )
  set /a "x=(x+1) %% 2"
)

结果:

john,blue
matt,red
susan,yellow

【讨论】:

    【解决方案2】:

    也许这种方法更简单/更清晰:

    @echo off
    setlocal enabledelayedexpansion
    set "name="
    for /f "delims=" %%a in (C:\text.txt) do (
       if not defined name (
          set "name=%%a"
       ) else (
          echo !name!,%%a
          set "name="
       )
    )
    

    【讨论】:

      猜你喜欢
      • 2021-02-04
      • 1970-01-01
      • 2019-05-12
      • 2013-04-18
      • 1970-01-01
      • 1970-01-01
      • 2023-03-28
      • 2022-01-04
      • 1970-01-01
      相关资源
      最近更新 更多