我是批处理脚本的新手。我需要删除不要包含文件中某些单词的文件夹中的所有文件
找到了这段代码
@echo off
setlocal
pushd C:\Users\admin\Desktop\bat
findstr /ip /c:"importantWord" *.txt > results.txt
popd
endlocal
那我怎么能白色列出这些文件,并删除所有其他文件? 或者我认为有一个简单的方法,只需检查!包含并删除 但我不知道怎么办?
答案 0 :(得分:0)
这应该有效:
@ECHO OFF
SETLOCAL EnableDelayedExpansion
SET "pathToFolder=C:\FolderToEmpty"
SET "wordToSearch=ImportantWord"
FOR /F "tokens=*" %%F IN ('dir %pathToFolder% /b *.txt') DO (
findstr /IP %wordToSearch% "%pathToFolder%\%%F">nul
IF !ERRORLEVEL!==1 (
DEL /Q "%pathToFolder%\%%F"
)
)
您必须设置要删除文件的文件夹的正确路径,并将ImportantWord替换为您要查找的子字符串。
答案 1 :(得分:0)
据说,这个问题可以通过组合这些findstr
开关的非常简单的方式来解决:/ V在搜索字符串未找到时显示结果,而/ M显示只是文件的名称;那就是:
@echo off
setlocal
cd C:\Users\admin\Desktop\bat
for /F "delims=" %%a in ('findstr /ipvm /c:"importantWord" *.txt') do del "%%a"
不幸的是,/ V和/ M开关的组合不能正常工作:/ V的结果基于行(不是文件),所以a需要修改方法:
@echo off
setlocal
cd C:\Users\admin\Desktop\bat
rem Create an array with all files
for %%a in (*.txt) do set "file[%%a]=1"
rem Remove files to preserve from the array
for /F "delims=" %%a in ('findstr /ipm /c:"importantWord" *.txt') do set "file[%%a]="
rem Delete remaining files
for /F "tokens=2 delims=[]" %%a in ('set file[') do del "%%a"
这种方法很有效,特别是对于大文件,因为findstr
命令只报告文件的名称,并在第一个字符串匹配后停止搜索。
答案 2 :(得分:0)
@echo off
setlocal
set "targetdir=C:\Users\admin\Desktop\bat"
pushd %targetdir%
for /f "delims=" %%a in ('dir /b /a-d *.txt') do (
findstr /i /p /v /c:"importantWord" "%%a" >nul
if not errorlevel 1 echo del "%%a"
)
popd
endlocal
不确定您要对/p
文件执行什么操作 - 包含非ansi字符的文件似乎会返回错误级别1
。 if not errorlevel 1
将回显不包含所需字符串的文件 - 删除echo
以实际删除文件