Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Datei(en) per VBS in den Papierkorb verschieben

Frage Entwicklung VB for Applications

Mitglied: halo7one

halo7one (Level 1) - Jetzt verbinden

30.03.2008, aktualisiert 01.04.2008, 9143 Aufrufe, 3 Kommentare

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
Mitglied: bastla
30.03.2008 um 20:05 Uhr
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.

01.
'Papierkorb-Info.vbs 
02.
Set objShell = CreateObject("Shell.Application") 
03.
Set Papierkorb = objShell.Namespace(10) 
04.
 
05.
With Papierkorb 
06.
	WScript.Echo "Pfad (ID): " & .Self.Path 
07.
	WScript.Echo "Anzahl gelöschter Elemente: " & .Items.Count 
08.
	WScript.Echo vbCrLF & "Liste gelöschter Elemente:" 
09.
	For Each Element In .Items 
10.
		WScript.Echo Element.Name 
11.
	Next 
12.
End With
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:
01.
If WScript.Arguments.Count > 0 Then 
02.
	Set oWinShell = CreateObject("Shell.Application") 
03.
	Set oFS = CreateObject("Scripting.FileSystemObject") 
04.
 
05.
	If oFS.FileExists(WScript.Arguments(0)) Then 
06.
		Set F = oFS.GetFile(WScript.Arguments(0)) 
07.
	ElseIf oFS.FolderExists(WScript.Arguments(0)) Then 
08.
		Set F = oFS.GetFolder(WScript.Arguments(0)) 
09.
	Else 
10.
		WScript.Quit 
11.
	End If 
12.
	 
13.
	Set oSHFolder = oWinShell.Namespace(oFS.GetParentFolderName(F.Path)) 
14.
	Set oSHFItems = oSHFolder.Items 
15.
	Set oSHFItem = oSHFItems.Item(F.Name) 
16.
	 
17.
	oSHFItem.InvokeVerb("&Löschen") 
18.
	 
19.
	Set F = Nothing 
20.
	Set oWinShell = Nothing 
21.
	Set oSHFolder = Nothing 
22.
	Set oSHFItems = Nothing 
23.
	Set oSHFItem = Nothing 
24.
End If
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
Bitte warten ..
Mitglied: misterdemeanor
01.04.2008 um 04:56 Uhr
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:
  • 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.
Forensic Analysis of Microsoft Windows Recycle Bin Records by Keith J. Jones

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
Bitte warten ..
Mitglied: halo7one
01.04.2008 um 17:46 Uhr
!!! Vielen Dank für eure schnellen Antworten & Ideen !!!

@bastla: THX!
Auch wenn dein Vorschlag bei vielen Dateien in verschiedenen Ordnern wirklich zu Problemen führen wird, wird es wohl die einfachste Methode sein und ist somit einen Versuch allemal wert.

@misterdemeanor: TY!
Wenn es jemand schafft, die richtigen Einträge zu generieren, ist dieser Weg allein schon wegen dem direkten Schreiben der Einträge interessant und bei vielen Dateien eindeutig besser,
jedoch muss ich dann wohl auch auf jemanden hoffen, der mehr Ahnung davon hat als ich, was das Programmieren angeht ;)

Falls jemand die "Papierkorb-Einträge" hinbekommt oder noch eine andere Idee hat: HER DAMIT
Mit freundlichen Grüßen,
halo7one
Bitte warten ..
Neuester Wissensbeitrag
Microsoft

Lizenzwiederverkauf und seine Tücken

(5)

Erfahrungsbericht von DerWoWusste zum Thema Microsoft ...

Heiß diskutierte Inhalte
Windows Netzwerk
Windows 10 RDP geht nicht (16)

Frage von Fiasko zum Thema Windows Netzwerk ...

Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...

Microsoft Office
Keine Updates für Office 2016 (13)

Frage von Motte990 zum Thema Microsoft Office ...