如何安静地删除一个目录的内容在PowerShell

使用PowerShell,是否可以删除包含文件的目录而不提示确认操作?

419204 次浏览
Remove-Item -LiteralPath "foldertodelete" -Force -Recurse

或者,用更短的版本

rm /path -r -force
PowerShell删除强制回答 < p >: help Remove-Item说:

这个cmdlet中的递归参数不能正常工作

要解决的命令是

Get-ChildItem -Path $Destination -Recurse | Remove-Item -force -recurse

然后删除文件夹本身

Remove-Item $Destination -Force

要删除没有文件夹的内容,您可以使用以下方法:

Remove-Item "foldertodelete\*" -Force -Recurse

rm -Force -Recurse -Confirm:$false $directory2Delete不能在PowerShell伊势中工作,但它可以通过常规的PowerShell CLI工作。

我希望这能有所帮助。它快把我逼疯了。

这招对我很管用:

Remove-Item $folderPath -Force  -Recurse -ErrorAction SilentlyContinue

因此,如果文件夹路径不存在,文件夹中的所有文件都将被删除,并且不会产生错误。

下面是Michael Freidgeim答案的一个可复制粘贴的实现

function Delete-FolderAndContents {
# http://stackoverflow.com/a/9012108


param(
[Parameter(Mandatory=$true, Position=1)] [string] $folder_path
)


process {
$child_items = ([array] (Get-ChildItem -Path $folder_path -Recurse -Force))
if ($child_items) {
$null = $child_items | Remove-Item -Force -Recurse
}
$null = Remove-Item $folder_path -Force
}
}
$LogPath = "E:\" # Your local of directories
$Folders = Get-Childitem $LogPath -dir -r | Where-Object {$_.name -like "*temp*"}
foreach ($Folder in $Folders)
{
$Item =  $Folder.FullName
Write-Output $Item
Remove-Item $Item -Force -Recurse
}
$LogPath = "E:\" # Your local of directories
$Folders = Get-Childitem $LogPath -dir -r | Where-Object {$_.name -like "*grav*"} # Your keyword name directories


foreach ($Folder in $Folders)
{
$Item =  $Folder.FullName
Write-Output $Item
Remove-Item $Item -Force -Recurse -ErrorAction SilentlyContinue
}

2018年更新

在当前版本的PowerShell(在Windows 10 1809上用v5.1测试)中,可以使用更简单的Unix语法rm -R .\DirName无声地删除目录.\DirName及其可能包含的所有子目录和文件。事实上,许多常见的Unix命令在PowerShell中的工作方式与在Linux命令行中相同。

也可以使用rm -R .\DirName\* (Jeff在评论中指出)清理文件夹,但不能清理文件夹本身。

由于我的目录在C:\users中,我必须以管理员身份运行powershell,

del ./[your Folder name] -Force -Recurse

这个命令对我很管用。

如果你有你的文件夹作为一个对象,让我们说你在相同的脚本中使用下一个命令创建它:

$folder = New-Item -ItemType Directory -Force -Path "c:\tmp" -Name "myFolder"

然后你可以像这样在相同的脚本中删除它

$folder.Delete($true)

$true -递归删除的状态

简而言之,我们可以使用rm -r -fo {folderName}来递归地删除文件夹(删除里面的所有文件和文件夹)并强制

这招对我很管用:

Remove-Item C:\folder_name -Force -Recurse

如果你想要连接一个带有固定路径的变量和一个以字符串为动态路径的路径删除的完整文件夹,你可能需要以下命令:

$fixPath = "C:\Users\myUserName\Desktop"
Remove-Item ("$fixPath" + "\Folder\SubFolder") -Recurse

在变量$newPath中,连接路径现在是:"C:\Users\myUserName\Desktop\Folder\SubFolder"

因此,你可以从起始点("C:\Users\myUserName\Desktop")删除几个目录,该起始点已经在变量$fixPath中定义并固定。

$fixPath = "C:\Users\myUserName\Desktop"
Remove-Item ("$fixPath" + "\Folder\SubFolder") -Recurse
Remove-Item ("$fixPath" + "\Folder\SubFolder1") -Recurse
Remove-Item ("$fixPath" + "\Folder\SubFolder2") -Recurse

Powershell使用相对文件夹。Remove-Item有几个与unix一致的有用别名。一些例子:

rm -R -Force ./directory
del -R -Force ./directory/*

有些多级目录文件夹需要删除两次,这困扰了我很久。这是我的最终代码,它为我工作,并清理得很好,希望它有帮助。

function ForceDelete {
[CmdletBinding()]
param(
[string] $path
)
    

rm -r -fo $path
    

if (Test-Path -Path $path){
Start-Sleep -Seconds 1
Write-Host "Force delete retrying..." -ForegroundColor white -BackgroundColor red
rm -r -fo $path
}
}


ForceDelete('.\your-folder-name')
ForceDelete('.\your-file-name.php')