DOS/BAT

关注公众号 jb51net

关闭
首页 > 脚本专栏 > DOS/BAT > 文本整行内容

for 提取文本整行内容的方法

投稿:mdxy-dxy

for 提取文本整行内容的方法,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提供了更加强大的功能。

阅读全文