batch file:如何读取文件?

如何从batch file中读取文件(文本或二进制文件)? 有一种方法来读取它在二进制模式或文本模式?

你可以使用for命令:

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

types

 for /? 

在命令提示符下。 另外,你可以parsingini文件 !

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

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

在命令提示符处键入“help for”以获取更多信息。 (不知道你是用什么“DOS”工作)

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 ) 

在启用和禁用延迟扩展之间切换是安全使用string所必需的,如!^^^xy!z
这是因为set "var=%%a"的行只在DisabledDelayedExpansion时是安全的,否则感叹号将被删除,并且脱字符被用作(辅助)转义字符,并且它们也被删除。
但是使用variablesvar对于EnabledDelayedExpansion来说只是安全的,因为即使call %%var%%也会失败,内容就像"&"&

编辑:添加集/ p变种
第二种方法是用set /p读取一个文件,唯一的缺点是每行限制为1024个字符,并且在行结束时删除控制字符。
但好处是,您不需要延迟切换,并且将值存储在variables中更容易

 @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! ) ) 

为了读取它的“二进制”到hex表示
你可以看看SO:使用batch file将二进制文件转换为HEX表示

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

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

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

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

 type %pathtotextfile%\textfile.txt 

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

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

 cat myfile.txt