Datei(en) per VBS in den Papierkorb verschieben
Hi @ all,
ich möchte mit einem VB-Script mehrere Dateien in den Papierkorb verschieben, damit man sie bequem wiederherstellen kann, falls nötig.
Ich habe diesbezüglich zwar eine Funktion für VB, VBA oder ähnliches gefunden, jedoch nirgens etwas für VBS!
Hier ist die gefundene Funktion für VB: http://www.aboutvb.de/khw/artikel/khwshellkill.htm
Ich hoffe, dass mir jemand eine einen Weg in VBS zeigen kann, bzw. die Funktion umschreiben kann (auch wenn so weit ich weiß ein großer Unterschied zwischen VB und VBScript besteht).
halo7one
ich möchte mit einem VB-Script mehrere Dateien in den Papierkorb verschieben, damit man sie bequem wiederherstellen kann, falls nötig.
Ich habe diesbezüglich zwar eine Funktion für VB, VBA oder ähnliches gefunden, jedoch nirgens etwas für VBS!
Hier ist die gefundene Funktion für VB: http://www.aboutvb.de/khw/artikel/khwshellkill.htm
Ich hoffe, dass mir jemand eine einen Weg in VBS zeigen kann, bzw. die Funktion umschreiben kann (auch wenn so weit ich weiß ein großer Unterschied zwischen VB und VBScript besteht).
halo7one
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 84248
Url: https://administrator.de/contentid/84248
Ausgedruckt am: 20.11.2024 um 06:11 Uhr
3 Kommentare
Neuester Kommentar
Hallo halo7one!
Der angesprochene Unterschied zeigt sich zB in der Tatsache, dass VBS keine API-Calls durchführen kann - insoferne wird ein Umschreiben etwas schwierig sein.
Alternativ dazu habe ich versucht, den Papierkorb ("Recycle Bin") per "Namespace" anzusprechen - das klappt zwar zB hinsichtlich des Auslesen der Inhalte (Beispiel unten), ein "MoveHere" führt allerdings nicht zum gewünschten Erfolg.
Vielleicht findest Du ja in dieser Richtung noch etwas Brauchbares ...
Ein möglicher Weg zum Löschen unter Verwendung des Papierkorbs ist hier (unter der falschen Überschrift "How can I empty the recycle bin?") beschrieben - es wird das Kontextmenü einer Datei (eines Ordners) verwendet, was dann angepasst etwa so aussehen könnte:
Allerdings ist das vermutlich nicht nur, wenn es um eine größere Anzahl von Dateien geht, kein besonders attraktiver Ansatz (ev könntest Du versuchen, vorweg die im Kontextmenü des Papierkorbes / Register "Global" zu findende Option “Dialog zur Bestätigung des Löschvorgangs anzeigen” über die Registry vorübergehend zu deaktivieren - etwa hier beschrieben, allerdings nicht von mir getestet) ...
Grüße
bastla
Der angesprochene Unterschied zeigt sich zB in der Tatsache, dass VBS keine API-Calls durchführen kann - insoferne wird ein Umschreiben etwas schwierig sein.
Alternativ dazu habe ich versucht, den Papierkorb ("Recycle Bin") per "Namespace" anzusprechen - das klappt zwar zB hinsichtlich des Auslesen der Inhalte (Beispiel unten), ein "MoveHere" führt allerdings nicht zum gewünschten Erfolg.
'Papierkorb-Info.vbs
Set objShell = CreateObject("Shell.Application")
Set Papierkorb = objShell.Namespace(10)
With Papierkorb
WScript.Echo "Pfad (ID): " & .Self.Path
WScript.Echo "Anzahl gelöschter Elemente: " & .Items.Count
WScript.Echo vbCrLF & "Liste gelöschter Elemente:"
For Each Element In .Items
WScript.Echo Element.Name
Next
End With
Ein möglicher Weg zum Löschen unter Verwendung des Papierkorbs ist hier (unter der falschen Überschrift "How can I empty the recycle bin?") beschrieben - es wird das Kontextmenü einer Datei (eines Ordners) verwendet, was dann angepasst etwa so aussehen könnte:
If WScript.Arguments.Count > 0 Then
Set oWinShell = CreateObject("Shell.Application")
Set oFS = CreateObject("Scripting.FileSystemObject")
If oFS.FileExists(WScript.Arguments(0)) Then
Set F = oFS.GetFile(WScript.Arguments(0))
ElseIf oFS.FolderExists(WScript.Arguments(0)) Then
Set F = oFS.GetFolder(WScript.Arguments(0))
Else
WScript.Quit
End If
Set oSHFolder = oWinShell.Namespace(oFS.GetParentFolderName(F.Path))
Set oSHFItems = oSHFolder.Items
Set oSHFItem = oSHFItems.Item(F.Name)
oSHFItem.InvokeVerb("&Löschen")
Set F = Nothing
Set oWinShell = Nothing
Set oSHFolder = Nothing
Set oSHFItems = Nothing
Set oSHFItem = Nothing
End If
Grüße
bastla
Hallo halo7one, bastla,
@halo7one
Wie bastla schon bemerkte ist der von Dir erwähnte Lösungsweg ein API-Call und somit nicht aus vbs durchführbar
@bastla
Sehr schönes Workaround! Aber unglaublich das es keine direkte Möglichkeit gibt Dateien in den Pabierkorb zu verschieben.
Hatte jetzt nur halbherzig gegoogled (geht das als neudeutsch durch?)...was ich meine festhalten zu können:
Wenn es also gelingt korrekte INFO2-File Einträge zu erstellen, ist das verschieben und umbenennen der zu "löschenden" Dateien nur noch ein Klacks.
Nötig dazu wären :
Das ganze ist sicher nicht trivial, aber theoretisch sollte es möglich sein.
Vielleicht findet sich ja jemand der das ganze gerne erarbeiten möchte.
BG, Felix -misterdemeanor- Bahrenburg
@halo7one
Wie bastla schon bemerkte ist der von Dir erwähnte Lösungsweg ein API-Call und somit nicht aus vbs durchführbar
@bastla
Sehr schönes Workaround! Aber unglaublich das es keine direkte Möglichkeit gibt Dateien in den Pabierkorb zu verschieben.
Hatte jetzt nur halbherzig gegoogled (geht das als neudeutsch durch?)...was ich meine festhalten zu können:
- Es gibt tatsächlich "ein" richtiges Verzeichnis in welches die gelöschten Dateien vor endgültigem löschen des MFT Records verschoben werden. Dieses ist abhängig von der Windows-Version sowie des Dateisystems (FAT[32] / NTFS) MSDN:How the Recycle Bin Stores Files
- Nachdem verschieben in dieses Verzeichnis wird die Datei nach einem bestimmten Schema umbenannt. (Siehe Link oben oder hier
- Im Pabierkorb-Verzeichnis existiert eine Datei namens "INFO2" ("INFO" bei Win95 FAT). Diese Datei hält die Informationen über die "gelöschten" Dateien-->Speicherort vor Löschung, Größe, "Löschdatum" und ID. ID ist hier der Index der Datei im Papierkorb, vergeben wenn Datei im Paierkorb verschoben wurde. Diese Datei sollte der Schlüssel zur Lösung des Problemes sein.
Wenn es also gelingt korrekte INFO2-File Einträge zu erstellen, ist das verschieben und umbenennen der zu "löschenden" Dateien nur noch ein Klacks.
Nötig dazu wären :
- auf NTFS Volumes die SID des Users
- den Originalpfad der Datei
- die Größe der Datei
- die UTC Zeit des Verschiebevorganges im Windows TIMESTAMP-Format
Das ganze ist sicher nicht trivial, aber theoretisch sollte es möglich sein.
Vielleicht findet sich ja jemand der das ganze gerne erarbeiten möchte.
BG, Felix -misterdemeanor- Bahrenburg