Mat*_*ley 276 windows filesystems powershell windows-7 delete-directory
在PowerShell中强制删除目录及其所有子目录的最简单方法是什么?我在Windows 7中使用PowerShell V2.
我从几个消息来源获悉,最明显的命令,Remove-Item $targetDir -Recurse -Force
无法正常工作.这包括PowerShell V2在线帮助(找到使用Get-Help Remove-Item -Examples
)中的声明,其中声明:
...由于此cmdlet中的Recurse参数有问题,因此该命令使用Get-Childitem cmdlet获取所需的文件,并使用管道运算符将它们传递给Remove-Item cmdlet ...
我已经看到了各种使用Get-ChildItem并将其传递给Remove-Item的示例,但这些示例通常会根据过滤器而不是整个目录删除一些文件集.
我正在寻找最简洁的方法来吹灭整个目录,文件和子目录,而不使用最少量的代码生成任何用户警告消息.如果容易理解,单行会很好.
Joe*_*oey 464
Remove-Item -Recurse -Force some_dir
Run Code Online (Sandbox Code Playgroud)
确实像这里宣传的那样工作.
rm -r -fo some_dir
Run Code Online (Sandbox Code Playgroud)
是速记别名,也是有效的.
据我所知,-Recurse
当您尝试递归删除过滤的文件集时,该参数无法正常工作.为了杀死一个单一的目录和下面的一切似乎工作正常.
Tua*_*inn 38
我用了:
rm -r folderToDelete
Run Code Online (Sandbox Code Playgroud)
这对我来说就像一个魅力(我从Ubuntu偷了它).
Joh*_*ees 23
使用简单的递归删除文件Remove-Item "folder" -Recurse
我有时会看到间歇性错误:[folder] cannot be removed because it is not empty.
此答案尝试通过单独删除文件来防止该错误.
function Get-Tree($Path,$Include='*') {
@(Get-Item $Path -Include $Include -Force) +
(Get-ChildItem $Path -Recurse -Include $Include -Force) |
sort pspath -Descending -unique
}
function Remove-Tree($Path,$Include='*') {
Get-Tree $Path $Include | Remove-Item -force -recurse
}
Remove-Tree some_dir
Run Code Online (Sandbox Code Playgroud)
一个重要的细节是对所有项目进行排序,pspath -Descending
以便在根之前删除叶子.对pspath
参数进行排序,因为除文件系统之外的提供者有更多的工作机会.-Include
如果要过滤要删除的项目,该参数只是一个方便.
它分为两个函数,因为我发现通过运行来查看我要删除的内容很有用
Get-Tree some_dir | select fullname
Run Code Online (Sandbox Code Playgroud)
mik*_*key 14
如果您致力于使用 powershell,则可以使用它,如已接受的答案中所述:
rm -r -fo targetDir
Run Code Online (Sandbox Code Playgroud)
但我发现使用 Windows 命令提示符更快
rmdir /s/q targetDir
Run Code Online (Sandbox Code Playgroud)
除了速度更快之外,使用命令提示符选项的另一个优点是它会立即开始删除文件(powershell 首先执行一些枚举),因此如果在运行时出现问题,您至少在删除文件方面取得了一些进展。
小智 9
试试这个例子.如果该目录不存在,则不会引发错误.您可能需要PowerShell v3.0.
remove-item -path "c:\Test Temp\Test Folder" -Force -Recurse -ErrorAction SilentlyContinue
Run Code Online (Sandbox Code Playgroud)
小智 7
使用旧式DOS命令:
rd /s <dir>
Run Code Online (Sandbox Code Playgroud)
要避免接受的答案的"目录不为空"错误,只需使用之前建议的旧的旧DOS命令.准备好复制粘贴的完整PS语法是:
& cmd.exe /c rd /S /Q $folderToDelete
Run Code Online (Sandbox Code Playgroud)
出于某种原因,约翰里斯的回答有时在我的案例中不起作用.但它使我朝着以下方向前进.首先,我尝试使用buggy -recurse选项以递归方式删除目录.然后我进入左边的每个子目录并删除所有文件.
function Remove-Tree($Path)
{
Remove-Item $Path -force -Recurse -ErrorAction silentlycontinue
if (Test-Path "$Path\" -ErrorAction silentlycontinue)
{
$folders = Get-ChildItem -Path $Path –Directory -Force
ForEach ($folder in $folders)
{
Remove-Tree $folder.FullName
}
$files = Get-ChildItem -Path $Path -File -Force
ForEach ($file in $files)
{
Remove-Item $file.FullName -force
}
if (Test-Path "$Path\" -ErrorAction silentlycontinue)
{
Remove-Item $Path -force
}
}
}
Run Code Online (Sandbox Code Playgroud)
del <dir> -Recurse -Force # I prefer this, short & sweet
Run Code Online (Sandbox Code Playgroud)
或者
remove-item <dir> -Recurse -Force
Run Code Online (Sandbox Code Playgroud)
如果你有一个很大的目录那么我通常做的是
while (dir | where name -match <dir>) {write-host deleting; sleep -s 3}
Run Code Online (Sandbox Code Playgroud)
在另一个 powershell 终端上运行它,完成后它将停止。
归档时间: |
|
查看次数: |
349289 次 |
最近记录: |