我想删除目录中的文件和文件夹,不包括bat文件中的某些文件和文件夹。
我需要保留这些文件update.bat FolderName.zip FolderName
,其他所有文件都应该从目录中删除,
我写了.bat文件,但似乎FolderName
也从目录中删除,其余工作正常。
任何人都可以告诉下面的脚本有什么问题吗?
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
由于 哈里斯
答案 0 :(得分:3)
您误解了“只读”如何适用于Windows中的文件夹。这不是你的错。这是一个误导性的标签。文件夹上的“只读”会使中的所有文件文件夹只读but not the folder itself。
注意强>
将文件夹设置为只读会使文件夹中的所有文件都是只读的。它不会影响文件夹本身。
我对引用Vista文档感到抱歉,我无法为Windows 7的文件夹找到类似的页面。虽然在UI中提到过:
我们也将设置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
答案 1 :(得分:2)
虽然它通常用于复制文件,但使用正确的设置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
以执行文件/文件夹删除。
答案 2 :(得分:-1)
您可以尝试将TotalCommander与Synchronize Dirs选项一起使用,为Synchronize创建一个空文件夹。