Windows bat文件删除除某些文件和文件夹之外的所有文件和文件夹

时间:2015-06-01 04:19:21

标签: windows batch-file

我想删除目录中的文件和文件夹,不包括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

由于 哈里斯

3 个答案:

答案 0 :(得分:3)

您误解了“只读”如何适用于Windows中的文件夹。这不是你的错。这是一个误导性的标签。文件夹上的“只读”会使中的所有文件文件夹只读but not the folder itself

  

注意

     

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

我对引用Vista文档感到抱歉,我无法为Windows 7的文件夹找到类似的页面。虽然在UI中提到过:

Read only setting

我们如何解决这个问题?

我们也将设置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创建一个空文件夹。