【问题标题】:How to delete folders with excluding parent and first child folders?如何删除不包括父文件夹和第一个子文件夹的文件夹?
【发布时间】:2018-06-22 07:56:57
【问题描述】:

我在创建批处理文件或单个 Windows 命令行来删除除父级和第一个子级之外的所有文件和文件夹时遇到困难。

例如,我有一个文件夹 Test,还有 4 个文件夹:

  • 测试
    • 文件夹_1
    • 文件夹_2
    • 文件夹_3
    • Folder_4

我想要的是删除 Folder_1Folder_4 中的所有内容,但保留文件夹本身。 (Test/Folder_1 -> Test/Folder_4)

我知道如何删除父级中的所有内容,但我不知道如何深入一层以在我想要保留的每个文件夹中运行命令:

del /q "C:\Temp\Test\*"
FOR /D %%p IN ("C:\Temp\Test\*.*") DO rmdir "%%p" /s /q

【问题讨论】:

  • 先将 cd /d 推入文件夹并忽略错误 - 您无法删除当前目录。
  • 这个怎么样:for /D %I in ("C:\Test\*") do pushd "%~I" && (rmdir "%~I" & popd)
  • 既然你已经知道子目录是什么了,那就把它删掉再重新创建。 for /D %%p in ("C:\Test\*") do (rmdir "%%p" /s /q & mkdir "%%p")
  • @Squashman,请注意,删除和重新创建文件夹时,您可能会丢失属性或安全设置...
  • @aschipfl,我想如果他们为其中一个子文件夹设置了特定的 ACL,那可能是真的。

标签: batch-file cmd


【解决方案1】:

此批处理文件可用于删除C:\Temp\Test 中的所有文件以及C:\Temp\Test 文件夹中的所有文件和子文件夹。

@echo off
setlocal EnableExtensions DisableDelayedExpansion

set "BaseFolder=C:\Temp\Test"
if not exist "%BaseFolder%\" goto :EOF

del /A /F /Q "%BaseFolder%\*" >nul 2>nul
for /F "eol=| delims=" %%I in ('dir "%BaseFolder%" /AD /B 2^>nul') do pushd "%BaseFolder%\%%I" 2>nul && ( rd /Q /S "%BaseFolder%\%%I" 2>nul & popd )

endlocal

此批处理文件还删除具有隐藏和只读属性的文件,也适用于 C:\Temp\Test 中的隐藏文件夹。

请阅读How to delete files/subfolders in a specific directory at command prompt in Windows 上的答案,了解有关删除文件和文件夹的两个命令行如何工作的完整说明。

要了解所使用的命令及其工作原理,请打开命令提示符窗口,在其中执行以下命令,并仔细阅读每个命令显示的所有帮助页面。

  • del /?
  • dir /?
  • echo /?
  • endlocal /?
  • for /?
  • goto /?
  • if /?
  • popd /?
  • pushd /?
  • rd /?
  • set /?
  • setlocal /?

【讨论】:

    【解决方案2】:

    如果您想使用 PowerShell 执行此操作,以后可能会更容易理解。是的,.bat for 循环工作。这似乎更直接地向我传达了正在做的事情。

    [cmdletbinding()]
    Param()
    Get-ChildItem -Path './test' -Recurse -Directory |
        ForEach-Object {
            Write-Verbose "working on $_"
            Remove-Item -Path $_.FullName -Recurse
            mkdir $_.FullName | Out-Null
        }
    

    如果您想在 cmd.exe 提示符下运行,请将上面的代码放入 delsubs.ps1 等文件中,然后使用以下内容运行。

    powershell -NoProfile -File delsubs.ps1
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-24
      • 2021-09-16
      • 2015-09-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多