Windows bat文件删除所有文件和文件夹,不包括某些文件和文件夹

我想删除一个目录中的文件和文件夹,但不包括bat文件中的某个文件和文件夹。

我需要保持这些文件, update.bat FolderName.zip FolderName和其他所有应该从目录中删除,

我写的.bat文件,但似乎FolderName也从目录中删除,rest工作正常。

任何人都可以告诉下面的脚本有什么错?

 attrib +r update.bat attrib +r FolderName.zip attrib +r FolderName for /F "delims=" %%i in ('dir /b') do (rmdir "%%i" /s/q || del "%%i" /s/q) attrib -r update.bat attrib -r FolderName.zip attrib -r FolderName 

谢谢哈里斯

您误解了“只读”对于Windows中的文件夹的作用。 这不是你的错。 这是一个误导性的标签。 文件夹中的“只读”使文件夹的所有文件只读, 而不是文件夹本身 。

注意

将文件夹设置为只读将使文件夹中的所有文件为只读。 它不会影响文件夹本身。

我很抱歉引用Vista文档,我无法找到Windows 7文件夹的类似页面。但在用户界面中提到:

只读设置


我们如何解决这个问题?

我们也要设置system属性。

 attrib +r update.bat attrib +r FolderName.zip attrib +r +s FolderName for /F "delims=" %%i in ('dir /b') do (rmdir "%%i" /s/q || del "%%i" /s/q) attrib -r update.bat attrib -r FolderName.zip attrib -r -s FolderName 

使用示例:

在运行更新之前,我的目录包含以下内容:

 <DIR> FolderName FolderName.zip New Bitmap Image.bmp <DIR> New folder New Microsoft Word Document.docx New Text Document (2).txt New Text Document (3).txt New Text Document.txt update.bat 

执行update.bat ,目录如下所示:

 <DIR> FolderName FolderName.zip update.bat 

虽然它通常用于复制文件,但使用正确的设置robocopy还可以处理文件/文件夹的删除。 所有需要的是一个空文件夹作为源,你的文件夹要清除作为目标和/purge开关将删除目标中不存在的所有文件源中。 使用/xf (排除文件)和/xd (排除目录)开关来处理文件和文件夹保留

 @echo off setlocal enableextensions disabledelayedexpansion set "target=%~1" if not defined target set "target=%cd%" set "excludedFiles=update.cmd foldername.zip" set "excludedFolders=folderName" 2>nul ( for %%a in ("%temp%\%~nx0.%random%%random%%random%.tmp") do ( md "%%~fa" robocopy "%%~fa" "%target%\." /l /s /e /nocopy /purge /xf %excludedFiles% /xd %excludedFolders% rmdir /s /q "%%~fa" ) ) 

robocopy命令包含一个/l开关,以仅列出操作中涉及的文件/文件夹。 如果一切正常,删除/l执行文件/文件夹删除。

您可以尝试使用带有Synchronize Dirs选项的TotalCommander,为Synchronize创建一个空文件夹。