我想知道如何循环通过文本文件中的每一行使用Windows批处理文件和处理每行文本相继。
当前回答
修改示例在这里列出我们的Rails应用程序在Heroku -谢谢!
cmd /C "heroku list > heroku_apps.txt"
find /v "=" heroku_apps.txt | find /v ".TXT" | findstr /r /v /c:"^$" > heroku_apps_list.txt
for /F "tokens=1" %%i in (heroku_apps_list.txt) do heroku run bundle show rails --app %%i
完整代码在这里。
其他回答
使用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中逐行读取文件)
如果你有NT-family的Windows(使用cmd.exe作为shell),试试FOR /F命令。
我需要把整条线作为一个整体来处理。以下是我发现有效的方法。
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
公认的答案是好的,但有两个局限性。 它删除空行和以;
要读取任何内容的行,您需要延迟展开切换技术。
@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,但似乎没有办法克服这一点。
@ kraus先生的回答很有启发性。另外,如果您想加载与批处理文件位于同一目录中的文件,请在文件名前加上%~dp0。这里有一个例子:
cd /d %~dp0
for /F "tokens=*" %%A in (myfile.txt) do [process] %%A
注意:如果你的文件名或目录(例如上面例子中的myfile.txt)有一个空格(例如:'my file.txt'或'c:\程序文件'),使用:
for /F "tokens=*" %%A in ('type "my file.txt"') do [process] %%A
,使用type关键字调用type程序,该程序显示文本文件的内容。如果您不想承受调用type命令的开销,您应该将目录更改为文本文件的目录。注意,带空格的文件名仍然需要type。
我希望这能帮助到一些人!
推荐文章
- Windows和Linux上的c++编译:ifdef开关
- 如何验证批处理文件中是否存在一个文件?
- 如何循环通过文件匹配通配符在批处理文件
- 异步运行Windows批处理文件命令
- XAMPP -端口80被PID 4的“无法打开进程”使用!12
- 为什么git在Windows下记不住我的密码
- Git克隆/拉不断冻结在“存储密钥在缓存?”
- 如何在批处理文件中请求管理员访问
- 有没有替换Windows (Visual C)的unistd.h ?
- 从Windows批处理文件设置系统环境变量?
- 在批处理文件中处理子字符串的最佳方法是什么?
- 在Sublime Text 2中使用Ctrl+D进行多个选择时,我如何跳过匹配?
- #定义WIN32_LEAN_AND_MEAN具体排除了什么?
- 如何添加一个设置路径只执行批处理文件?
- 最好的轻量级web服务器(只有静态内容)的Windows