如何从批处理文件中读取文件(文本或二进制文件)?有一种方法可以在二进制模式或文本模式下读取它吗?
在NT风格的cmd.exe下,您可以使用循环遍历文本文件的行
FOR /F %i IN (file.txt) DO @echo %i
在命令提示符下键入"help for"以获取更多信息.(不知道你使用的"DOS"是否有效)
您可以使用for命令:
FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do @echo %i %j %k
类型
for /?
在命令提示符下.此外,您可以解析ini文件!
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表示
一种非常简单的方法是使用以下命令:
set /p mytextfile=< %pathtotextfile%\textfile.txt echo %mytextfile%
这只会显示文本文件中的第一行文本。另一种方法是使用以下命令:
type %pathtotextfile%\textfile.txt
这会将所有数据放在屏幕上的文本文件中。希望这可以帮助!