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