我想在Windows中创建一个批处理脚本,删除文件夹中除5个特定文件以外的所有文件。例如,我想删除除file1.txt,file2.txt,file3.txt,file4.txt和file5.txt之外的所有* .txt文件。
答案 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
)))))
)