如何从批处理文件中读取文件(文本或二进制文件)?有一种方法可以在二进制模式或文本模式下读取它吗?
答案 0 :(得分:63)
在NT风格的cmd.exe下,您可以使用
循环浏览文本文件的行FOR /F %i IN (file.txt) DO @echo %i
在命令提示符下键入“help for”以获取更多信息。 (不知道你使用的“DOS”是否有效)
答案 1 :(得分:38)
您可以使用for命令:
FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do @echo %i %j %k
类型
for /?
在命令提示符下。另外,您可以parse ini files!
答案 2 :(得分:34)
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: converting a binary file to HEX representation using batch file
答案 3 :(得分:5)
一种非常简单的方法是使用以下命令:
set /p mytextfile=< %pathtotextfile%\textfile.txt
echo %mytextfile%
这将仅显示文本文件中的第一行文本。另一种方法是使用以下命令:
type %pathtotextfile%\textfile.txt
这会将所有数据放在屏幕上的文本文件中。希望这有帮助!
答案 4 :(得分:0)
那么有很多不同的方法,但是如果您只想显示文本而不是将其存储在任何地方,那么您只需使用:findstr /v "randomtextthatnoonewilluse" filename.txt
答案 5 :(得分:0)
正确的代码:
setlocal enabledelayedexpansion
for /f "usebackq eol= tokens=* delims= " %%a in (`findstr /n ^^^^ "name with spaces.txt"`) do (
set line=%%a
set "line=!line:*:=!"
echo(!line!
)
endlocal
pause
答案 6 :(得分:-1)
使用:
set /p var=< file.ext
这是最简单的方法,适用于大多数批量版本。
答案 7 :(得分:-2)
用于在屏幕上显示myfile.txt文件内容的代码
设置%filecontent%= 0 = 0
输入%filename%>>%filecontent%
回声%filecontent%
答案 8 :(得分:-4)
如果您只想在cmd上显示它,可以使用:
cat myfile.txt