2009-02-02 16 views
33

De forma predeterminada, cuando elimina un archivo con PowerShell, se elimina permanentemente.¿Cómo muevo un archivo a la Papelera de reciclaje usando PowerShell?

Me gustaría que el artículo eliminado vaya a la papelera de reciclaje como lo hubiera hecho a través de una eliminación de shell.

¿Cómo se puede hacer esto en PowerShell en un objeto de archivo?

+1

Una vez que haya elegido una solución a continuación, puede actualizar el alias 'rm' para usarla a través de' Set-Alias ​​rm Remove-ItemSafely -Option AllScope' – bdukes

Respuesta

13

Aquí es una versión más corta que reduce un poco de trabajo

$path = "<path to file>" 
$shell = new-object -comobject "Shell.Application" 
$item = $shell.Namespace(0).ParseName("$path") 
$item.InvokeVerb("delete") 
17

Funciona en PowerShell más o menos la misma manera que la solución de Chris Ballance en JScript:

$shell = new-object -comobject "Shell.Application" 
$folder = $shell.Namespace("<path to file>") 
$item = $folder.ParseName("<name of file>") 
$item.InvokeVerb("delete") 
+0

Hay un pequeño error en su respuesta (pero funcionó) !). Usted necesita un presupuesto antes de "ruta al archivo" $ = $ shell.Namespace carpeta ( ") se convierte en carpeta $ = $ cáscara.Namespace ("") –

+0

solo se necesitan presupuestos si tiene espacio en blanco en las rutas – RayofCommand

23

Si no lo hace querer ver siempre el mensaje de confirmación, utilice la siguiente:

Add-Type -AssemblyName Microsoft.VisualBasic 
[Microsoft.VisualBasic.FileIO.FileSystem]::DeleteFile('d:\foo.txt','OnlyErrorDialogs','SendToRecycleBin') 

(cortesía solución de Shay Levy)

+3

+1 para evitar la solicitud. Por cierto, tenga en cuenta que también hay 'DeleteDirectory' – marsze

0

Aquí hay una solución completa que se puede agregar a su perfil de usuario para hacer que 'rm' envíe archivos a la Papelera de reciclaje. En mis pruebas limitadas, maneja caminos relativos mejor que las soluciones anteriores.

Add-Type -AssemblyName Microsoft.VisualBasic 

function Remove-Item-toRecycle($item) { 
    Get-Item -Path $item | %{ $fullpath = $_.FullName} 
    [Microsoft.VisualBasic.FileIO.FileSystem]::DeleteFile($fullpath,'OnlyErrorDialogs','SendToRecycleBin') 
} 

Set-Alias rm Remove-Item-toRecycle -Option AllScope 
9

Aquí es una función mejorada que soporta directorios, así como archivos como entrada:

Add-Type -AssemblyName Microsoft.VisualBasic 

function Remove-Item-ToRecycleBin($Path) { 
    $item = Get-Item -Path $Path -ErrorAction SilentlyContinue 
    if ($item -eq $null) 
    { 
     Write-Error("'{0}' not found" -f $Path) 
    } 
    else 
    { 
     $fullpath=$item.FullName 
     Write-Verbose ("Moving '{0}' to the Recycle Bin" -f $fullpath) 
     if (Test-Path -Path $fullpath -PathType Container) 
     { 
      [Microsoft.VisualBasic.FileIO.FileSystem]::DeleteDirectory($fullpath,'OnlyErrorDialogs','SendToRecycleBin') 
     } 
     else 
     { 
      [Microsoft.VisualBasic.FileIO.FileSystem]::DeleteFile($fullpath,'OnlyErrorDialogs','SendToRecycleBin') 
     } 
    } 
} 
0

archivo Quitar para RecycleBin
Add-Type -AssemblyName Microsoft.VisualBasic [Microsoft. VisualBasic.FileIO.FileSystem] :: DeleteFile ('e: \ test \ test.txt', 'OnlyErrorDialogs', 'SendToRecycleBin')

filtro a RecycleBin
Add-Type -AssemblyName Microsoft.VisualBasic [Microsoft.VisualBasic.FileIO.FileSystem] :: deleteDirectory ('E: \ test \ testfolder', 'OnlyErrorDialogs', 'SendToRecycleBin')

10

respuesta: utilizar el Recycle module

Install-Module -Name Recycle 

A continuación, ejecute:

Remove-ItemSafely file 

Me gustaría crear un alias llamado trash para esto.

+0

¿Qué pasa si hay varios archivos? –

+1

@KahnKah Utilice '. \ *' En lugar de 'archivo' pero esto eliminará todos los subdirectorios también – user300375

Cuestiones relacionadas