如何删除除5个文件以外的文件夹中的所有文件

时间:2013-12-18 23:45:38

标签: windows batch-file command-line

我想在Windows中创建一个批处理脚本,删除文件夹中除5个特定文件以外的所有文件。例如,我想删除除file1.txt,file2.txt,file3.txt,file4.txt和file5.txt之外的所有* .txt文件。

6 个答案:

答案 0 :(得分:3)

我尝试了以下命令,但它确实有效。 test1.txt和test2.txt是不包括删除的文件。它的作用是在/中定义排除文件并循环遍历文件夹内的txt文件。这是为了确保它仅针对.txt文件。

@echo off
setlocal EnableDelayedExpansion
rem Add more names separated with slashes here:
set exclude=/test1.txt/test2.txt/
for %%a in (*.txt) do (
   if "!exclude:/%%~a/=!" equ "%exclude%" (
      echo "Deleting" %%~a  
      del "%%~a"
   )
)

代码改编自此主题 - How do I exclude specific file names from an MS DOS dir list?。我只是稍微修改了一下,显示了文件扩展名(删除命令所需)和删除操作。

答案 1 :(得分:3)

for /f "delims=" %%a in ('dir /a-d /b ^|findstr /xirv "file[1-5]\.txt"') do del "%%~a"

答案 2 :(得分:2)

这样做 - 不要在你想要的任何文件夹中运行它:

@echo off
for %%a in (1 2 3 4 5) do attrib +h "file%%a.txt"
del *.*?
for %%a in (1 2 3 4 5) do attrib -h "file%%a.txt"

答案 3 :(得分:2)

删除 SCANDIR 文件夹中的所有* .txt文件,但file1.txt,file2.txt,file3.txt,file4.txt,file5.txt

除外
@echo off
@break off
@title How to delete all files in a folder except 5 files - D3F4ULT
@color 0a
@cls

setlocal EnableDelayedExpansion

set "SCANDIR=D:\Batch\Stack Overflow\How to delete all files in a folder except 5 files\files"

if not exist "!SCANDIR!\" echo ERROR&&echo.&&echo Folder not found = '%~nx1'&&echo.&&echo Exiting...&&echo.&&ping -n 8 localhost>nul&&exit /B 1

for %%a in ( "!SCANDIR!\*.txt" ) do (
  set "DEL_FILE_FLAG=Y"
  if /I "%%~nxa" EQU "file1.txt" set "DEL_FILE_FLAG=N"
  if /I "%%~nxa" EQU "file2.txt" set "DEL_FILE_FLAG=N"
  if /I "%%~nxa" EQU "file3.txt" set "DEL_FILE_FLAG=N"
  if /I "%%~nxa" EQU "file4.txt" set "DEL_FILE_FLAG=N"
  if /I "%%~nxa" EQU "file5.txt" set "DEL_FILE_FLAG=N"
  if defined DEL_FILE_FLAG if "!DEL_FILE_FLAG!" EQU "Y" (
    del /f /q "%%~dpnxa">nul 2>&1
  )
)

pause
exit

答案 4 :(得分:1)

md _emptyDir_ & robocopy _emptyDir_ . /purge /xf file1.txt file2.txt file3.txt file4.txt file5.txt

这将创建一个没有文件的新目录(_emptyDir_)。然后使用robocopy清除_emptyDir_中不存在的文件的当前目录。由于目录中没有文件,除了指示要排除的文件外,所有文件都会被删除。另外,没有必要rmdir _emptyDir_,因为robocopy也会处理它。

要使用此方法仅从目录中删除txt文件,保留指定的文件,语法将为

md _emptyDir_ & robocopy _emptyDir_ . *.txt /purge /xf file1.txt file2.txt file3.txt file4.txt file5.txt

从空目录到当前目录,只处理* .txt文件,删除源中没有的所有文件(除了排除的文件之外)(

)。

在这种情况下,由于只处理了txt文件,因此不会自动删除_emptyDir_

答案 5 :(得分:-2)

for %%f in (*.txt) do (
    if not %%f == file1.txt if not %%f == file2.txt if not %%f == file3.txt if not %%f == file4.txt if not %%f == file5.txt del %%f
)

如果您不喜欢可笑的长命令行,请执行

for %%f in (*.txt) do (
        if not %%f == file1.txt (
                if not %%f == file2.txt (
                        if not %%f == file3.txt (
                                if not %%f == file4.txt (
                                        if not %%f == file5.txt (
                                                del %%f
        )))))
)