当前位置:  开发笔记 > 程序员 > 正文

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

如何解决《批处理文件:如何读取文件?》经验,为你挑选了4个好方法。

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



1> devio..:

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

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

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


如果找到空白字符,此命令将退出读取行.我最终最终使用了FOR/F"tokens =*"%% i IN(file.txt)DO @ECHO %% i
它应该是'%% i`.
有用!如果您正在使用控制台尝试%i,如果您使用的是bat文件,请尝试%% i.
谢谢Jim Fell.如果只有我记得在把头发拉出来之前阅读评论!

2> johnstok..:

您可以使用for命令:

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

类型

for /?

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


这是一个非常复杂的示例,从特定格式的文本文件中解析非常具体的信息,而不给出任何解释.根据`for /?`命令*将解析myfile.txt中的每一行,忽略以分号开头的行,将第2和第3个标记从每行传递给for body,并用逗号和/或空格分隔标记*.

3> jeb..:

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表示



4> 小智..:

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

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

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

type %pathtotextfile%\textfile.txt

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

推荐阅读
wurtjq
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有