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

file batch-file

357885 观看

9回复

13795 作者的声誉

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

作者: Lucas Gabriel Sánchez 的来源 发布者: 2008 年 10 月 15 日

回应 (9)


64

33013 作者的声誉

在NT风格的cmd.exe下,您可以使用循环遍历文本文件的行

FOR /F %i IN (file.txt) DO @echo %i

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

作者: devio 发布者: 15.10.2008 07:45

39

42721 作者的声誉

决定

您可以使用for命令:

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

类型

for /?

在命令提示符下。此外,您可以解析ini文件

作者: johnstok 发布者: 15.10.2008 07:47

35

59517 作者的声誉

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:使用批处理文件将二进制文件转换为HEX表示

作者: jeb 发布者: 25.12.2010 05:54

-4

101 作者的声誉

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

cat myfile.txt 
作者: himnabil 发布者: 22.12.2014 02:43

1

26 作者的声誉

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

作者: NetvorMcWolf 发布者: 13.09.2016 09:32

6

176 作者的声誉

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

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

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

type %pathtotextfile%\textfile.txt

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

作者: J. Bond 发布者: 10.08.2017 11:28

-1

1 作者的声誉

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

作者: MAX 发布者: 18.05.2018 04:21

-2

1 作者的声誉

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

set%filecontent%= 0
type%filename%>>%filecontent%
echo%filecontent%

作者: Jani Pierwszy 发布者: 18.10.2018 03:29

0

1 作者的声誉

更正代码:

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

作者: Celes 发布者: 14.06.2019 02:29
32x32