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

Batch file 我希望删除文件中包含特定单词的一行。(*关键字),batch-file,Batch File,我希望删除包含特定单词的行(在我的示例中是[*关键字])。这些文件的扩展名为“.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

我希望删除包含特定单词的行(在我的示例中是[*关键字])。这些文件的扩展名为“.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 

根据Ken先生提供的答案,我已尝试使用上述代码。但是,似乎什么都不起作用。我创建了一个名为dirlist.txt的空文件。但该文件也没有使用*.blk文件的路径写入。我还希望在同一位置保存同名的.blk文件。因此,我尝试使用>%%i.blk。。。谁能帮帮我,我哪里出了问题

如果您的计算机带有grep(如果使用windows,请在sourceforge上签出unxutils),则可以使用以下命令:
grep“KEYWORD”-v*.blk>filewithlineremoved.blk

您不能像您那样对不在指定目录中的文件使用
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
)

有关从文件中删除特定文本行的信息,您可以看到

不确定这与“系统找不到这些文件”有什么关系?我从未在任何版本的Windows(或之前的DOS)上看到错误消息“系统找不到这些文件”。我也不能使用我能想到的
type
findstr
的任何组合来重现该错误消息。关于这个问题,你能说得更具体些吗?试着只运行命令的
类型
部分(删除
|
及其后的所有内容)-会出现什么错误?相同的错误“系统找不到指定的文件”这是另一个错误。:-)在这里提供错误消息时,细节很重要。在
D:\Master\SPRINGBACK\DPK\T08
中是否至少有一个扩展名为
.blk
的文件?如果没有,你就不能键入它。当然我会的。问题是,我在T08文件夹中有几个文件夹。每个文件夹只包含一个扩展名为.blk的文件。那么该文件夹中就没有
.blk
文件;每个子文件夹中都有一个
.blk
文件。无论是在提问时,还是在阅读评论或答案时,细节都很重要。:-)该文件夹下的文件夹不在该文件夹中;它在它的子文件夹中。