如何删除文件夹的所有内容而不删除文件夹本身

如何删除文件夹的所有内容而不删除文件夹本身

我正在设置一个共享网络驱动器,该驱动器会定期清空。

其目的是为用户提供一个简单的文件共享选项。由于我无法强制他们总是自己清理,所以我希望这个驱动器定期清空。

我发现并尝试使用命令提示符:

del /q "D:\Transfer$\*"

然后是这个:

del /q "D:\Transfer$\*"
for /D %p IN (D:\Transfer$\*) DO rmdir "%p" /s /q

但这些不会删除文件夹,只会删除文件。

一些代码看起来是什么样的,删除给定文件夹的所有内容(文件夹和文件),而不删除文件夹本身?

答案1

由于您已标记PowerShell即使您的努力和尝试使用 batch/cmd 失败 — 此 PowerShell 解决方案可以按您的喜好工作,并且由于您正在考虑“电源外壳“ 寻找潜在的解决方案。

这将获取完整明确的源文件夹路径,并递归删除源文件夹下的所有文件和所有子文件夹 -它不会删除源文件夹本身,只是其中的一切。

电源外壳

$srcPath = "D:\Transfer$";
Get-ChildItem -Path $srcPath | ForEach-Object -Process { 
    If($_.attributes -eq "Directory"){
        Remove-Item -Path $_.FullName -Recurse -Force;
        }Else{
        Remove-Item -Path $_.FullName -Force;};
        };

支持资源

答案2

电源外壳解决方案可以进一步简化。输出获取子项可以直接通过管道传输至除去项目。该-Recurse参数确保删除子目录及其中的任何内容,但如果管道输入是文件路径,则会被忽略:

### Single quotes ensure "$" is treated as a literal character. 
$Path = 'D:\Transfer$'

Get-ChildItem $Path | Remove-Item -Recurse -Force

答案3

$RemoveDir="D:\Transfer$"
$CurrentDir=(Get-Location).path

cd $RemoveDir -ErrorAction SilentlyContinue | Out-Null 
if ( $CurrentDir -eq $RemoveDir ) { Remove-Item -path $RemoveDir\* -Recurse }

@echo off 

cd /d "D:\Transfer$" && (
     del /f /a /q .\* 
     for /r /d %%i in (*)do RmDir /q /s "%%~fi"
    )

cd /d "D:\Transfer$" && (del /f /a /q .\* & for /r /d %i in (*)do RmDir /q /s "%~fi")

相关内容