如何逐行读取文本文件并使用批处理文件修改每一行?

时间:2018-08-25 13:06:17

标签: batch-file

假设有一个包含以下内容的文本文件:

L1
L2
L3

我想要一个批处理文件,该文件将从文件中读取每一行,然后将它们变成变量。例如,这些将是变量:

line1 = L1
line2 = L2
line3 = L3

如何使用批处理文件完成此操作?

1 个答案:

答案 0 :(得分:0)

Windows命令处理器旨在运行命令和应用程序。它不适用于编辑文本文件。实际上,与Windows命令处理器cmd.exe执行的批处理文件相比,每种脚本或编程语言都比该命令更好。

对于使用character encoding(每个字符一个字节或UTF-8)的简单文本文件示例,可以使用简单的批处理文件:

@echo off
setlocal EnableExtensions EnableDelayedExpansion
set "LineNumber=0"
del "%TEMP%\TextFile.tmp" 2>nul

for /F "usebackq delims=" %%I in ("TextFile.txt") do (
    set /A LineNumber+=1
    echo line!LineNumber! = %%I
) >>"%TEMP%\TextFile.tmp"

if exist "%TEMP%\TextFile.tmp" move /Y "%TEMP%\TextFile.tmp" "TextFile.txt"
if errorlevel 1 del "%TEMP%\TextFile.tmp"
endlocal

但是此批处理文件无法处理正确的行

  • 不包含任何字符(空行),
  • 以分号;开头,
  • 包含一个或多个感叹号!

更好但较慢的批处理文件为:

@echo off
setlocal EnableExtensions DisableDelayedExpansion
set "LineNumber=0"
del "%TEMP%\TextFile.tmp" 2>nul

for /F delims^=^ eol^= %%A in ('%SystemRoot%\System32\findstr.exe /N "^" "TextFile.txt" 2^>nul') do (
    set "Line=%%A"
    set /A LineNumber+=1
    setlocal EnableDelayedExpansion
    echo line!LineNumber! = !Line:*:=!
    endlocal
) >>"%TEMP%\TextFile.tmp"

if exist "%TEMP%\TextFile.tmp" move /Y "%TEMP%\TextFile.tmp" "TextFile.txt"
if errorlevel 1 del "%TEMP%\TextFile.tmp"
endlocal

How to read and print contents of text file line by line?上查看我的答案,为什么 FOR 循环要复杂得多才能更好地处理文本文件。

使用这两个批处理文件无法处理具有UTF-16UTF-32字符编码的文本文件。

要了解所使用的命令及其工作方式,请打开命令提示符窗口,在其中执行以下命令,并非常仔细地阅读每个命令显示的所有帮助页面。

  • del /?
  • echo /?
  • endlocal /?
  • findstr /?
  • for /?
  • if /?
  • move /?
  • set /?
  • setlocal /?

另请参阅有关Using command redirection operators的Microsoft文章。