通常、ごみ箱の内容は、マウスで右クリックして[ごみ箱を空にする]を選択することで削除します。しかし、コマンドプロンプトを使用してごみ箱の内容を削除する必要があるという要件があります。これは可能ですか?もしそうなら、どうすればそれを達成できますか?
通常、ごみ箱の内容は、マウスで右クリックして[ごみ箱を空にする]を選択することで削除します。しかし、コマンドプロンプトを使用してごみ箱の内容を削除する必要があるという要件があります。これは可能ですか?もしそうなら、どうすればそれを達成できますか?
回答:
システムファイルを含むドライブのごみ箱ディレクトリを完全に削除することにより、コマンドラインからごみ箱を効果的に「空にする」ことができます。(ほとんどの場合、これがC:
ドライブになりますが、常に真であるとは限らないため、その値をハードコーディングしないでください。代わりに、%systemdrive%
環境変数を使用してください。)
この戦術が機能する理由は、各ドライブに名前が付いた非表示の保護されたフォルダがあるためです。このフォルダには$Recycle.bin
、ごみ箱に削除されたファイルとフォルダが実際に保存されます。このディレクトリが削除されると、Windowsは自動的に新しいディレクトリを作成します。
したがって、ディレクトリを削除するには、パラメータを指定してrd
コマンド(r emove d irectory)を使用し/s
ます。これは、指定したディレクトリ内のすべてのファイルとディレクトリも削除する必要があることを示します。
rd /s %systemdrive%\$Recycle.bin
このアクションにより、現在ごみ箱にあるすべてのファイルとフォルダがすべてのユーザーアカウントから完全に削除されることに注意してください。さらに、このアクションを実行するのに十分な特権を得るには、(明らかに)昇格したコマンドプロンプトからコマンドを実行する必要があります。
$Recycle.bin
ありRecycled
、Recycler
マルチブートする場合は複数ある場合もあります。ノートンリカバリビンなどのプログラムには独自のディレクトリがあります。
$Recycle.bin
、Recycled
またはRecycler
?それを行うための変数はありますか、それとも例外をキャッチする唯一の方法ですか?
/q
スイッチを渡す必要があるためrd
、追加のプロンプトは表示されません。rd /s /q %SYSTEMDRIVE%\$Recycle.bin
cmd /c "rd /s %systemdrive%\$Recycle.bin"
私recycle.exe
はフランクP.ウェストレイクから好きです。それは素晴らしい前後のステータスを提供します。(私はフランクのさまざまなユーティリティを10年以上使用しています。)
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.
また、さらに多くの用途とオプションがあります(リストされている出力は/?からのものです)。
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"
RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 1
見つかりませんでした。ですから、組み込みの方法がある場合は、それを共有してください!
RD /S [/Q]
ことを提案します-@ wasatchwizardはテストによって反論しました-それから、まったく同じRD /S [/Q]
ソリューションが「組み込み」であるため、突然優れています。それはどのように意味がありますか?RD /S [/Q]
@Synetechが説明した問題があります。このソリューションはそうではありません。
nircmdを使用すると、次のように入力してそれを行うことができます
nircmd.exe emptybin
http://www.nirsoft.net/utils/nircmd-x64.zip
http://www.nirsoft.net/utils/nircmd.html
PowerShellスクリプトを使用できます(これは、フォルダーリダイレクトを使用しているユーザーに対しても機能し、ごみ箱がサーバーのストレージスペースを占有しないようにします)
$Shell = New-Object -ComObject Shell.Application
$RecBin = $Shell.Namespace(0xA)
$RecBin.Items() | %{Remove-Item $_.Path -Recurse -Confirm:$false}
Windows10とPowerShell5がある場合は、Clear-RecycleBin
コマンドレットがあります。
Clear-RecycleBin
確認なしでPowerShell内で使用するには、を使用できますClear-RecycleBin -Force
。公式ドキュメントはここにあります
Clear-RecycleBin
ごみ箱内のいくつかの不正なフォルダ名を正常に削除しましたが、他の方法では削除できませんでした。
パーティーに少し遅れていることは知っていますが、主観的により優雅な解決策に貢献できるのではないかと思いました。
ファイルシステムからすべてのファイルとフォルダーを大まかに削除するのではなく、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
これはSHQueryRecycleBin()
、を呼び出す前にビンがすでに空であるかどうかを判断するために最初に呼び出す、より複雑なバージョン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
iex
-ingあなたの考えは?(ところで、exeをコンパイルせずにmsbuildインラインタスクを使用してバッチファイルにC#コードを埋め込むことができます)
iex
このように使っていると思います。どこで拾ったのか忘れてしまい${%~f0}
ましたgc "%~f0"
。私をに向けたのはこの猫でしたout-string
。バッチスクリプトにC#を埋め込む例をmsbuildにリンクできますか?私のグーグルフーは今日弱いです。
一方
rd / s / q%systemdrive%\ $ RECYCLE.BIN
$ RECYCLE.BINフォルダをシステムドライブ(通常はc :)から削除します。ローカルドライブと外部ドライブのパーティションには非表示の$ RECYCLE.BINフォルダがあるため、他の使用可能なパーティションから削除することを検討する必要があります(ただし、 $ RECYCLE.BINフォルダを持たないUSBフラッシュドライブなどのリムーバブルドライブ)。たとえば、d:にプログラムをインストールしました。プログラムがごみ箱に移動したファイルを削除するには、次のコマンドを実行する必要があります。
rd / s /qd:\$RECYCLE.BIN
コマンドラインから空のごみ箱のスーパーユーザーで利用可能な詳細情報
はい、次のコードでバッチファイルを作成できます。
cd \Desktop
echo $Shell = New-Object -ComObject Shell.Application >>FILENAME.ps1
echo $RecBin = $Shell.Namespace(0xA) >>FILENAME.ps1
echo $RecBin.Items() ^| %%{Remove-Item $_.Path -Recurse -Confirm:$false} >>FILENAME.ps1
REM The actual lines being writen are right, exept for the last one, the actual thigs being writen are "$RecBin.Items() | %{Remove-Item $_.Path -Recurse -Confirm:$false}"
But since | and % screw things up, i had to make some changes.
Powershell.exe -executionpolicy remotesigned -File C:\Desktop\FILENAME.ps1
これは基本的に、\ Desktopディレクトリのゴミ箱を空にして実行するPowerShellスクリプトを作成します。