我想删除一个目录中的文件和文件夹,但不包括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创建一个空文件夹。