使用.bat(CMD)从TXT文件中删除选定的行

时间:2016-10-25 10:45:32

标签: batch-file cmd

这是我的TXT文件:

 Volume in drive N is ABSdrive
 Volume Serial Number is BLA - BLA

 Directory of n:\ggg\gggg\ggg\ggggg

25/10/2016  09:46           138,813 gggggg.csv
               1 File(s)        00000 bytes
               0 Dir(s)  00000000 bytes free

我需要的是仅包含此行的.txt文件

25/10/2016  09:46           138,813 gggggg.csv

顶部或底部没有空行仅包含带有此信息的单行文本文件。

是否可以通过使用.bat文件来制作它?

4 个答案:

答案 0 :(得分:5)

findstr /r /c:"^[0-9]" yourfile.txt > targetfile.txt

这个以数字开头的行,因为这是你在问题中所需要的。

答案 1 :(得分:0)

您可以使用findstr命令并将输出写入新文本文件outfile.txt 然后,您可以在文件中搜索该确切的字符串。但是,如果搜索到的字符串与该行完全匹配,则只会将输出写入文件。

findstr /x "25/10/2016  09:46           138,813 gggggg.csv" infile.txt > outfile.txt

有关findstr命令的更多信息,我建议打开一个新的cmd并输入

findstr /?

希望这有帮助

答案 2 :(得分:0)

将文件夹拖放到此批处理文件中。

@Echo Off
Set "SrcDir=%~1"
If Not Defined SrcDir Set "SrcDir=%CD%"
(For /F EOL^=^ Delims^=^^ %%A In ('Dir/A-D "%SrcDir%"') Do Echo=%%A)>output.txt

它应该将output.txt文件输出到该文件夹​​。 (如果没有给出输入文件夹,那么它应该将output.txt提供给当前目录)

如果您只想解析文件中的数据,请按照以下方式进行调整:

@Echo Off
Set "SrcFile=%~1"
If Not Defined SrcFile Exit/B
(For /F UseBackQEOL^=^ Delims^=^^ %%A In ("%SrcFile%") Do Echo=%%A)>output.txt

只需将文件拖放到其上或调整它以将%~1替换为第二行的文件路径/名称。

答案 3 :(得分:0)

使用for /F loop解析文字:

@echo off
for /F "usebackq skip=5 delims=" %%E in ("\path\to\your\text\file.txt") do (
    set "LINE=%%E"
    goto :EXIT_FOR
)
:EXIT_FOR
echo %LINE%

skip=5选项告诉for /F忽略前五行。在读取第一个非跳过的行之后,goto命令离开循环。因此,变量LINE最终将保留感兴趣的线。

您还可以检查是否已定义变量,而不是使用goto来选择一行特定文本,如下所示:

@echo off
set "LINE="
for /F "usebackq skip=5 delims=" %%E in ("\path\to\your\text\file.txt") do (
    if not defined LINE set "LINE=%%E"
)
echo %LINE%

文本文件内容看起来像dir命令的输出(类似dir "n:\ggg\gggg\ggg\ggggg\gggggg.csv")。您可以直接通过for /F解析此类命令输出,而不必先将其存储到文本文件中 - 请参阅:

@echo off
for /F "skip=5 delims=" %%E in ('dir "n:\ggg\gggg\ggg\ggggg\gggggg.csv"') do (
    set "LINE=%%E"
    goto :EXIT_FOR
)
:EXIT_FOR
echo %LINE%

或者:

@echo off
set "LINE="
for /F "skip=5 delims=" %%E in ('dir "n:\ggg\gggg\ggg\ggggg\gggggg.csv"') do (
    if not defined LINE set "LINE=%%E"
)
echo %LINE%