我希望删除包含特定单词的行(在我的例子中是[*KEYWORD])。这些文件的扩展名为"。block"。这些文件位于同一文件夹中的不同子文件夹中。我写了下面的代码:
@setlocal enabledelayedexpansion
@echo off
dir "C:UsersXFIWSMDesktopbatch_filesT30*.blk /s/b > dirlist.txt
for /F %%i in (dirlist.txt) do (
type %%i
findstr /v "KEYWORD"
> %%i.blk
)
pause
根据Ken先生提供的答案,我已经尝试了以上的代码。但是,似乎什么都不起作用。我已经创建了一个名为dirlist.txt的空文件。但是这个文件也不是用路径*来写的。黑色的文件。我还希望在同一位置保存同名的。blk文件。因此,我尝试使用> %%i。黑色……谁能帮帮我,我到底哪里错了?
您不能对不在指定目录中的文件使用type
(您的文件位于指定目录的子文件夹中,而不是在目录本身中)。
我的建议是使用dir
命令,使用适当的开关来搜索子目录(/s
)并生成一个裸列表(没有大小、日期和文件夹/卷名称)(/b
),并将其重定向到一个文本文件。然后,您可以使用for /f
循环读取该目录清单中的每一行,并进一步处理它。
@setlocal enabledelayedexpansion
@echo off
dir "D:MasterSPRINGBACKDPKT08*.blk /s/b > dirlist.txt
for /F %%i in (dirlist.txt) do (
:: Process each file here
)
有关从文件中删除特定文本行的信息,请参见如何在批处理中从文件中删除行(或给定行中的文本)?
如果你有一台使用grep的机器(如果使用windows,在sourceforge上检出unxutil),你可以使用这个命令:grep"关键字"-v *。BLK> filewithlinermoved . BLK