use*_*403 76 windows recycle-bin command-line batch-file windows-7
通常我们通过用鼠标右键单击并选择"清空回收站"来删除回收站内容.但我有一个要求,我需要使用命令提示符删除回收站内容.这可能吗?如果是这样,我该如何实现呢?
Cod*_*ray 85
通过永久删除包含系统文件的驱动器上的"回收站"目录,可以从命令行有效地"清空"回收站.(在大多数情况下,这将是C:
驱动器,但您不应该对该值进行硬编码,因为它并不总是正确的.而是使用%systemdrive%
环境变量.)
这种策略的工作原因是因为每个驱动器都有一个带有名称的隐藏受保护文件夹$Recycle.bin
,这是回收站实际存储已删除文件和文件夹的位置.删除此目录时,Windows会自动创建新目录.
因此,删除目录,使用rd
命令([R EMOVE d irectory)与/s
参数,这表明所有的指定目录中的文件和目录也应该被删除:
rd /s %systemdrive%\$Recycle.bin
Run Code Online (Sandbox Code Playgroud)
请注意,此操作将从所有用户帐户中永久删除当前在回收站中的所有文件和文件夹.此外,您(显然)必须从提升的命令提示符运行该命令,以便具有足够的权限来执行此操作.
was*_*ard 25
我更喜欢recycle.exe
从弗兰克·P.西湖.它提供了一个很好的前后状态.(我已经使用弗兰克的各种公用事业十多年了..)
C:\> recycle.exe /E /F
Recycle Bin: ALL
Recycle Bin C: 44 items, 42,613,970 bytes.
Recycle Bin D: 0 items, 0 bytes.
Total: 44 items, 42,613,970 bytes.
Emptying Recycle Bin: ALL
Recycle Bin C: 0 items, 0 bytes.
Recycle Bin D: 0 items, 0 bytes.
Total: 0 items, 0 bytes.
Run Code Online (Sandbox Code Playgroud)
它还有更多的用途和选项(列出的输出来自/?).
Recycle all files and folders in C:\TEMP:
RECYCLE C:\TEMP\*
List all DOC files which were recycled from any directory on the C: drive:
RECYCLE /L C:\*.DOC
Restore all DOC files which were recycled from any directory on the C: drive:
RECYCLE /U C:\*.DOC
Restore C:\temp\junk.txt to C:\docs\resume.txt:
RECYCLE /U "C:\temp\junk.txt" "C:\docs\resume.txt"
Rename in place C:\etc\config.cfg to C:\archive\config.2007.cfg:
RECYCLE /R "C:\etc\config.cfg" "C:\archive\config.2007.cfg"
Run Code Online (Sandbox Code Playgroud)
Rah*_*hul 14
nircmd允许您通过键入来完成此操作
nircmd.exe emptybin
Run Code Online (Sandbox Code Playgroud)
http://www.nirsoft.net/utils/nircmd-x64.zip
http://www.nirsoft.net/utils/nircmd.html
Mwi*_*iza 11
您可以使用此 PowerShell 命令。
Clear-RecycleBin -Force
Run Code Online (Sandbox Code Playgroud)
注意:如果您想要确认提示,请删除-Force标志
小智 9
您可以使用powershell脚本(这适用于具有文件夹重定向的用户,也不会使其回收站占用服务器存储空间)
$Shell = New-Object -ComObject Shell.Application
$RecBin = $Shell.Namespace(0xA)
$RecBin.Items() | %{Remove-Item $_.Path -Recurse -Confirm:$false}
Run Code Online (Sandbox Code Playgroud)
上面的脚本取自这里.
如果你有windows 10和powershell 5,那就有一个Clear-RecycleBin
命令行开关.
要在Clear-RecycleBin
没有确认的情况下使用内部PowerShell,您可以使用Clear-RecycleBin -Force
.官方文档可以在这里找到
小智 6
我使用这个 powershell oneliner:
gci C:\`$recycle.bin -force | remove-item -recurse -force
Run Code Online (Sandbox Code Playgroud)
也适用于与 C: 不同的驱动器
我知道我参加聚会有点晚了,但我想我可能会贡献我主观上更优雅的解决方案。
我正在寻找一个脚本,它可以通过 API 调用清空回收站,而不是从文件系统中粗暴地删除所有文件和文件夹。我的尝试失败了RecycleBinObject.InvokeVerb("Empty Recycle &Bin")
(这显然只适用于 XP 或更早版本),我偶然发现了关于使用SHEmptyRecycleBin()
从编译语言调用的 shell32.dll 中嵌入的函数的讨论。我想,嘿,我可以在 PowerShell 中做到这一点,并将其包装在批处理脚本混合中。
使用 .bat 扩展名保存并运行它以清空您的回收站。使用/y
开关运行它以跳过确认。
<# : batch portion (begins PowerShell multi-line comment block)
:: empty.bat -- http://stackoverflow.com/a/41195176/1683264
@echo off & setlocal
if /i "%~1"=="/y" goto empty
choice /n /m "Are you sure you want to empty the Recycle Bin? [y/n] "
if not errorlevel 2 goto empty
goto :EOF
:empty
powershell -noprofile "iex (${%~f0} | out-string)" && (
echo Recycle Bin successfully emptied.
)
goto :EOF
: end batch / begin PowerShell chimera #>
Add-Type shell32 @'
[DllImport("shell32.dll")]
public static extern int SHEmptyRecycleBin(IntPtr hwnd, string pszRootPath,
int dwFlags);
'@ -Namespace System
$SHERB_NOCONFIRMATION = 0x1
$SHERB_NOPROGRESSUI = 0x2
$SHERB_NOSOUND = 0x4
$dwFlags = $SHERB_NOCONFIRMATION
$res = [shell32]::SHEmptyRecycleBin([IntPtr]::Zero, $null, $dwFlags)
if ($res) { "Error 0x{0:x8}: {1}" -f $res,`
(New-Object ComponentModel.Win32Exception($res)).Message }
exit $res
Run Code Online (Sandbox Code Playgroud)
这是一个更复杂的版本,它首先调用SHQueryRecycleBin()
以确定在调用 .bin 之前 bin 是否已经为空SHEmptyRecycleBin()
。对于这个,我去掉了choice
确认和/y
切换。
<# : batch portion (begins PowerShell multi-line comment block)
:: empty.bat -- http://stackoverflow.com/a/41195176/1683264
@echo off & setlocal
powershell -noprofile "iex (${%~f0} | out-string)"
goto :EOF
: end batch / begin PowerShell chimera #>
Add-Type @'
using System;
using System.Runtime.InteropServices;
namespace shell32 {
public struct SHQUERYRBINFO {
public Int32 cbSize; public UInt64 i64Size; public UInt64 i64NumItems;
};
public static class dll {
[DllImport("shell32.dll")]
public static extern int SHQueryRecycleBin(string pszRootPath,
out SHQUERYRBINFO pSHQueryRBInfo);
[DllImport("shell32.dll")]
public static extern int SHEmptyRecycleBin(IntPtr hwnd, string pszRootPath,
int dwFlags);
}
}
'@
$rb = new-object shell32.SHQUERYRBINFO
# for Win 10 / PowerShell v5
try { $rb.cbSize = [Runtime.InteropServices.Marshal]::SizeOf($rb) }
# for Win 7 / PowerShell v2
catch { $rb.cbSize = [Runtime.InteropServices.Marshal]::SizeOf($rb.GetType()) }
[void][shell32.dll]::SHQueryRecycleBin($null, [ref]$rb)
"Current size of Recycle Bin: {0:N0} bytes" -f $rb.i64Size
"Recycle Bin contains {0:N0} item{1}." -f $rb.i64NumItems, ("s" * ($rb.i64NumItems -ne 1))
if (-not $rb.i64NumItems) { exit 0 }
$dwFlags = @{
"SHERB_NOCONFIRMATION" = 0x1
"SHERB_NOPROGRESSUI" = 0x2
"SHERB_NOSOUND" = 0x4
}
$flags = $dwFlags.SHERB_NOCONFIRMATION
$res = [shell32.dll]::SHEmptyRecycleBin([IntPtr]::Zero, $null, $flags)
if ($res) {
write-host -f yellow ("Error 0x{0:x8}: {1}" -f $res,`
(New-Object ComponentModel.Win32Exception($res)).Message)
} else {
write-host "Recycle Bin successfully emptied." -f green
}
exit $res
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
240809 次 |
最近记录: |