我希望删除包含特定单词的文件中的一行。 (*关键词)

时间:2014-06-11 15:15:30

标签: batch-file

我希望删除包含特定单词的行(在我的例子中是[* KEYWORD])。这些文件的扩展名为“.blk”。这些文件位于同一文件夹中的不同子文件夹中。我写了这个跟随代码。

@setlocal enabledelayedexpansion
@echo off
dir "C:\Users\XFIWSM\Desktop\batch_files\T30\*.blk /s/b > dirlist.txt
for /F %%i in (dirlist.txt) do (
    type %%i
    findstr /v "KEYWORD"
    > %%i.blk
   )
   pause 

根据肯先生提供的答案,我已尝试使用上述代码。但是,似乎没有任何效果。我创建了一个名为dirlist.txt的空文件。但是这个文件也没有用* .blk文件的路径写。另外,我希望在同一位置保存同名的.blk文件。因此,我正在尝试使用> %% i.blk ...任何人都可以帮助我,我哪里错了?

2 个答案:

答案 0 :(得分:1)

您不能以不同的方式对指定目录中的文件使用type(您的文件位于指定目录的子文件夹中,而不是目录本身)。

我的建议是使用dir命令,使用适当的开关搜索子目录(/s)并生成一个裸列表(没有大小,日期和文件夹/卷名称)( /b),并将其重定向到文本文件。然后,您可以使用for /f循环读取该目录列表中的每一行并进一步处理。

@setlocal enabledelayedexpansion
@echo off
dir "D:\Master\SPRINGBACK\DPK\T08\*.blk /s/b > dirlist.txt
for /F %%i in (dirlist.txt) do (
  :: Process each file here
)

有关从文件中删除特定文本行的信息,您可以看到How to remove lines (or text in given lines) from file in batch?

答案 1 :(得分:0)

如果你的机器有grep,(如果使用windows,请在sourceforge上检查unxutils),你可以使用这个命令: grep" KEYWORD" -v * .blk> filewithlineremoved.blk