在某些路径下,我有一些不同类型的文件类型。例如.txt,.bas,.cls等。
除了少数文件,我只需要删除该路径中的文本文件。
例如,如果路径具有a.txt
,b.txt
,c.txt
,aa.bas
,bb.cls
,则该路径应仅删除a.txt
。它不应删除b.txt
和c.txt
(也不应删除其他扩展名文件)。
答案 0 :(得分:1)
要删除根文件夹中的所有?.txt
个文件,但不包括b.txt
和c.txt
@echo off
for %%i in (?.txt) do (
if not "%%~nxi"=="c.txt" if not "%%~nxi"=="b.txt" echo del "%%i"
)
要在根目录和子目录中执行此操作:
@echo off
for /R %%i in (?.txt) do (
if not "%%~nxi"=="c.txt" if not "%%~nxi"=="b.txt" echo del "%%i"
)
如果文件全部是*.txt
个文件,而不仅仅是按照您的示例的一位数字(请添加/R
以递归:
@echo off
for %%i in (*.txt) do (
if not "%%~nxi"=="c.txt" if not "%%~nxi"=="b.txt" echo del "%%i"
)
类似,但使用findstr仅排除:
@echo off
for /f %%i in ('dir /b /a-d ^|findstr /vi "b.txt" ^|findstr /vi "c.txt"') do (
echo del "%%i"
)
并且要搜索的仅包括:
@echo off
for /f %%i in ('dir /b /a-d ^|findstr /i "a.txt"') do (
echo del "%%i"
)
并包括和搜索子目录:
@echo off
for /f %%i in ('dir /b /s /a-d ^|findstr /i "a.txt"') do (
echo del "%%i"
)
在上述所有示例中,删除echo
才能实际执行删除操作,echo
用作安全措施,只会在控制台上显示del
结果。
修改
看到您明确有一个要排除的文件列表(根据您的评论),您可以使用类似的内容。您必须创建一个名为exclusion.txt
的文件,并以列表形式添加要排除的文件:
b.txt
c.txt
file with space.txt
d.txt
然后创建批处理文件并添加以下代码。运行后,它将提示您对文件扩展名进行过滤,您可以在其中键入扩展名。即txt
或直接按 enter 对所有文件执行删除操作,但排除的文件除外。为安全起见,我添加了一个附加的for
循环以仅回显文件并提示您是否确定要删除文件。
@echo off
set cnt=0 & set excl= & set ext=
echo(
if not exist exclusion.txt echo You have not created an "exclusion.txt" file. & echo( & echo You need to create it first, then rerun the script & echo( & pause & goto :eof
echo Ensure you have listed all files to be excluded in "exclusion.txt" file
echo(
set /p "ext=Add File extention to search on (txt, pdf, etc), or press enter for all files: "
if not defined ext goto cont
if not "%ext:~0,1%"=="." set "ext=.%ext%"
set "ext=*%ext%"
:cont
setlocal enabledelayedexpansion
for /f "delims=" %%a in (exclusion.txt) do (
set /a cnt+=1
set "nlr!cnt!=%%a"
)
for /l %%i in (1,1,%cnt%) do (
if not defined excl (
set "excl=!nlr%%i!"
) else (
set "excl=!excl! !nlr%%i!"
)
)
echo(
echo WARNING: You are about to delete the following files!!
echo(
for /f "delims=" %%i in ('dir /b /a-d %ext% ^|findstr /VIE "%excl%"') do (
if /i not "%%i"=="exclusion.txt" if not "%%i"=="%~0" echo %%i
)
echo(
Choice /c YN /m "Are you sure you want to delete these files?"
if %errorlevel% equ 2 goto :eof
for /f "delims=" %%i in ('dir /b /a-d %ext% ^|findstr /VIE "%excl%"') do (
if /i not "%%i"=="exclusion.txt" if not "%%i"=="%~0" del %%i
)
答案 1 :(得分:0)
“ ...它应该只删除a.txt。不应删除b.txt和c.txt ...”
要重新表达您的想法,您只需从任何地方删除a.txt。并且不要触摸其他任何东西。 这可以通过递归del使用开关/ s(子目录)来完成
del /s a.txt