批处理文件:如何读取文件?

时间:2008-10-15 19:37:39

标签: file batch-file

如何从批处理文件中读取文件(文本或二进制文件)?有一种方法可以在二进制模式或文本模式下读取它吗?

9 个答案:

答案 0 :(得分:63)

在NT风格的cmd.exe下,您可以使用

循环浏览文本文件的行
FOR /F %i IN (file.txt) DO @echo %i

在命令提示符下键入“help for”以获取更多信息。 (不知道你使用的“DOS”是否有效)

答案 1 :(得分:38)

您可以使用for命令:

FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do @echo %i %j %k

类型

for /?

在命令提示符下。另外,您可以parse ini files

答案 2 :(得分:34)

FOR-LOOP通常有效,但存在一些问题。 FOR不接受空行,超过~8190的行是有问题的。 如果禁用延迟扩展,则扩展仅可靠。

CR / LF与单一LF的检测似乎也有点复杂 NUL字符也是有问题的,因为FOR-Loop立即取消了阅读。

直接二进制阅读因此几乎不可能。

空行的问题可以用技巧解决。使用findstr命令为每行添加行号,并在读取后删除前缀。

@echo off
SETLOCAL DisableDelayedExpansion
FOR /F "usebackq delims=" %%a in (`"findstr /n ^^ t.txt"`) do (
    set "var=%%a"
    SETLOCAL EnableDelayedExpansion
    set "var=!var:*:=!"
    echo(!var!
    ENDLOCAL
)

在启用和停用延迟展开之间切换,以便安全使用字符串,例如!^^^xy!z
这是因为行set "var=%%a"仅对 DisabledDelayedExpansion 是安全的,否则会删除感叹号并将插入符号用作(辅助)转义字符,它们也会被删除。
但是使用变量var仅对 EnabledDelayedExpansion 是安全的,因为即使call %%var%%也会因"&"&之类的内容而失败。

编辑:添加了set / p变体
第二种方法是使用set /p读取文件,唯一的缺点是每行限制为~1024个字符,它会删除行尾的控制字符。
但优点是,您不需要延迟切换,并且更容易将值存储在变量

@echo off
setlocal EnableDelayedExpansion
set "file=%~1"

for /f "delims=" %%n in ('find /c /v "" %file%') do set "len=%%n"
set "len=!len:*: =!"

<%file% (
  for /l %%l in (1 1 !len!) do (
    set "line="
    set /p "line="
    echo(!line!
  )
)

将“二进制”读入十六进制表示
你可以看一下SO: converting a binary file to HEX representation using batch file

答案 3 :(得分:5)

一种非常简单的方法是使用以下命令:

set /p mytextfile=< %pathtotextfile%\textfile.txt
echo %mytextfile%

这将仅显示文本文件中的第一行文本。另一种方法是使用以下命令:

type %pathtotextfile%\textfile.txt

这会将所有数据放在屏幕上的文本文件中。希望这有帮助!

答案 4 :(得分:0)

那么有很多不同的方法,但是如果您只想显示文本而不是将其存储在任何地方,那么您只需使用:findstr /v "randomtextthatnoonewilluse" filename.txt

答案 5 :(得分:0)

正确的代码:

setlocal enabledelayedexpansion
for /f "usebackq eol= tokens=* delims= " %%a in (`findstr /n ^^^^ "name with spaces.txt"`) do (
    set line=%%a
    set "line=!line:*:=!"
    echo(!line!
)
endlocal
pause

答案 6 :(得分:-1)

使用:
set /p var=< file.ext
这是最简单的方法,适用于大多数批量版本。

答案 7 :(得分:-2)

用于在屏幕上显示myfile.txt文件内容的代码

设置%filecontent%= 0 = 0
输入%filename%>>%filecontent%
回声%filecontent%

答案 8 :(得分:-4)

如果您只想在cmd上显示它,可以使用:

cat myfile.txt