如何使用"读取批处理文件的多行("

时间:2016-04-11 23:09:05

标签: batch-file

所以,很久以前我真的进入批处理文件。我回到那里,但对于我的生活,我无法找到从文件中获取文本行的首选方式。

它是这样的:

(
set /p %var1%=
set /p %var2%=
)>textfile.txt

谢谢。

1 个答案:

答案 0 :(得分:1)

糟糕! : - )

您正在尝试从文件中读取,而不是写入文件。因此,您需要<,而不是>

此外,您只在扩展变量时使用百分比,而不是在定义变量时使用百分比。

最后,您应该在阅读之前明确地取消定义任何先前的值,因为读取空行将保留任何现有的变量值。

(
  set "var1="
  set /p "var1="
  set "var2="
  set /p "var2="
) <textfile.txt

正如rojo在他的评论中所说,如果你正在阅读任意数量的行,你可能最好使用数组概念。但是,您必须首先确定要读取的总行数。

@echo off
setlocal enableDelayedExpansion

:: Determine number of lines
for /f %%N in ('find /c /v "" <textfile.txt') do set "cnt=%%N"

:: Read the file into an array
<textfile.txt (
  for /l %%N in (1 1 %cnt%) do (
    set "str.%%N="
    set /p "str.%%N="
  )
)

:: Display the array values
for /l %%N in (1 1 %cnt%) do echo(!str.%%N!)

使用SET / P是将文件读入变量的最快方法,它避免了FOR / F关于空行的问题,如果启用了延迟扩展,则!被破坏。但SET / P有其自身的局限性:

  • 源文件中的行必须以\ r \ n(回车和换行符)
  • 终止
  • 每行必须<= 1021字节长
  • 从行
  • 中删除尾随控制字符