for 提取文本整行内容的方法
在DOS(即Windows的命令提示符环境)中读取文本文件(例如.txt文件)并逐行处理,可以使用几种不同的方法。
以下是一些常见的方法:
方法1:使用type命令
type命令可以显示文本文件的内容,但它不支持逐行处理。如果你想查看文件内容,可以使用它。如果要逐行读取,可以考虑结合for循环。
方法2:使用for循环
for循环可以逐行读取文件内容。例如:
@echo off
for /F "delims=" %%A in (filename.txt) do (
echo %%A
)这里,filename.txt是要读取的文件名。for /F "delims=" %%A in (filename.txt) do会逐行读取文件,并将每行内容存储在变量%%A中,然后你可以对每行内容进行操作,比如在这个例子中是输出每行内容。
通常我们需要提取文本整行内容时都是这么写的。
for /f "delims=" %%a in (a.txt) do echo.%%a
但是分号开头的行呢,for也会忽略掉,很多时候我们需要这些行,怎么办。
用findstr 等外部命令太麻烦,用eol 忽略一个不可见字符,不失为一个不错的办法,但始终忽略了某个字符开头的行,且获取这个不可见字符也比较麻烦。
其实有更简单的方法,就是把eol放在最后。
@echo off rem 提取所有行,可同时配合tokens使用,但无法以空格作分割符。 for /f "delims= eol=" %%a in (a.txt) do echo.%%a pause
案例
例如我们想将当前文件夹下的目录读取出来, 并前后加上//,例如 jb51目录变成 /jb51/
在dos下通过 dir /b >> list.txt 将目录保存到list.txt中,记住是 >>不能用 >
例如当前目录有如下目录 list.txt内容如下
BaiduSyncdisk BaiduYunDownload Careland CloudMusic jb51tools KuGou logfiles MailMasterData movie music os PHPnow phpstudy QQMiniDL server study
然后通过如下命令
@echo off rem 提取所有行,可同时配合tokens使用,但无法以空格作分割符。 for /f "delims= eol=" %%a in (ff.txt) do echo /%%a/ >> f2.txt pause
执行后就发现f2.txt文本内容变成了如下
/BaiduSyncdisk/ /BaiduYunDownload/ /Careland/ /CloudMusic/ /ff.txt/ /jb51tools/ /KuGou/ /logfiles/ /MailMasterData/ /movie/ /music/ /os/ /PHPnow/ /phpstudy/ /QQMiniDL/ /server/ /study/
这样就完成了。
方法3:使用findstr命令
如果你需要基于特定模式匹配来逐行读取文件,可以使用findstr命令。例如,只显示包含特定文本的行:
findstr "pattern" filename.txt
这里,pattern是你想匹配的文本模式。
方法4:使用PowerShell(更高级的功能)
如果你需要更高级的文本处理功能,可以考虑使用PowerShell脚本。例如,逐行读取并处理:
powershell -Command "Get-Content 'filename.txt' | ForEach-Object { $_ }"这将在PowerShell中读取filename.txt文件的内容,并对每一行执行操作(在这个例子中是直接输出)。你可以替换{ $_ }部分来执行更复杂的操作。
示例:使用PowerShell处理每行并执行操作
powershell -Command "Get-Content 'filename.txt' | ForEach-Object { Write-Output 'Processing: $_' }"这个命令会为文件中的每一行添加前缀“Processing: ”。
结论
根据你的具体需求(比如是否需要基于模式匹配、是否需要更高级的文本处理功能),你可以选择上述方法中的一种或几种来逐行读取和处理文本文件。对于简单的文本处理任务,直接使用DOS批处理中的for循环通常就足够了。对于更复杂的文本处理需求,PowerShell提供了更加强大的功能。


最新评论