我想知道如何循环通过文本文件中的每一行使用Windows批处理文件和处理每行文本相继。
当前回答
从命令行打印文本文件中的所有行(使用delayeexpansion):
set input="path/to/file.txt"
for /f "tokens=* delims=[" %i in ('type "%input%" ^| find /v /n ""') do (
set a=%i
set a=!a:*]=]!
echo:!a:~1!)
适用于前导空白、空行、空白行。
在win10 CMD上测试
其他回答
如果你有NT-family的Windows(使用cmd.exe作为shell),试试FOR /F命令。
改进第一个“FOR /F..”的答案: 我要做的是调用执行MyList.txt中列出的每个脚本,所以它对我有用:
for /F "tokens=*" %A in (MyList.txt) do CALL %A ARG1
——或者,如果你想在多行上做:
for /F "tokens=*" %A in (MuList.txt) do (
ECHO Processing %A....
CALL %A ARG1
)
编辑:上面给出的例子是从命令提示符执行for循环;在批处理脚本中,需要添加一个额外的%,如下所示:
---START of MyScript.bat---
@echo off
for /F "tokens=*" %%A in ( MyList.TXT) do (
ECHO Processing %%A....
CALL %%A ARG1
)
@echo on
;---END of MyScript.bat---
公认的答案是好的,但有两个局限性。 它删除空行和以;
要读取任何内容的行,您需要延迟展开切换技术。
@echo off
SETLOCAL DisableDelayedExpansion
FOR /F "usebackq delims=" %%a in (`"findstr /n ^^ text.txt"`) do (
set "var=%%a"
SETLOCAL EnableDelayedExpansion
set "var=!var:*:=!"
echo(!var!
ENDLOCAL
)
Findstr用于用行号和冒号作为每行的前缀,因此空行不再是空的。
delayeexpansion需要被禁用,当访问%%a参数时,否则是感叹号!插入符号^将丢失,因为它们在该模式中具有特殊含义。
但是要从行中删除行号,需要启用延迟扩展。 设置"var=!var:*:=!"删除第一个冒号之前的所有冒号(使用delims=:也会删除一行开头的所有冒号,而不仅仅是findstr中的冒号)。 endlocal对下一行再次禁用延迟扩展。
唯一的限制现在是线长限制~8191,但似乎没有办法克服这一点。
使用cmd.exe和
for /F "tokens=*" %F in (file.txt) do whatever "%F" ...
仅适用于“正常”文件。对于巨大的文件,它失败得很惨。
对于大文件,你可能需要使用Powershell和类似的东西:
[IO.File]::ReadLines("file.txt") | ForEach-Object { whatever "$_" }
或者如果你有足够的内存:
foreach($line in [System.IO.File]::ReadLines("file.txt")) { whatever "$line" }
这对我来说是一个250 MB的文件,包含200多万行,其中for /F…命令行写了几千行就卡住了。
关于foreach和foreach - object的区别,请参见了解foreach和foreach - object。
(字幕:在PowerShell中逐行读取文件)
我需要把整条线作为一个整体来处理。以下是我发现有效的方法。
for /F "tokens=*" %%A in (myfile.txt) do [process] %%A
带有星号(*)的tokens关键字将提取整行的所有文本。如果你不加星号,它只会拉出一行中的第一个单词。我想这和空格有关。
在TechNet上的命令
如果文件路径中有空格,则需要使用usebackq。为例。
for /F "usebackq tokens=*" %%A in ("my file.txt") do [process] %%A
推荐文章
- 如何使用Windows命令行更改目录
- 如何使用批处理文件写入文本文件?
- 如何在NERDTree中显示隐藏文件(以句点开始)?
- Objective-C for Windows
- “注册”一个.exe,这样你就可以从Windows中的任何命令行运行它
- Windows批处理文件的隐藏特性
- Windows递归grep命令行
- 如何创建自己的URL协议?(例如:/ /……)
- 在Windows批处理脚本中格式化日期和时间
- 映射一个网络驱动器供服务使用
- 如何在windows中使用命令提示符(cmd)列出文件。我试过在Linux中使用“ls”,但它显示一个错误?
- Windows上最好的免费c++分析器是什么?
- 如何在Windows上运行多个Python版本
- 运行计划任务的最佳方式
- Windows上Git文件的权限