假设有一个包含以下内容的文本文件:
L1
L2
L3
我想要一个批处理文件,该文件将从文件中读取每一行,然后将它们变成变量。例如,这些将是变量:
line1 = L1
line2 = L2
line3 = L3
如何使用批处理文件完成此操作?
答案 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-16或UTF-32字符编码的文本文件。
要了解所使用的命令及其工作方式,请打开命令提示符窗口,在其中执行以下命令,并非常仔细地阅读每个命令显示的所有帮助页面。
del /?
echo /?
endlocal /?
findstr /?
for /?
if /?
move /?
set /?
setlocal /?
另请参阅有关Using command redirection operators的Microsoft文章。