knuefi
Goto Top

Script nach Dateinamen löschen

Hallo mal wieder,

ich versuche ein Script zu schreiben, das nach gewünschten Dateinamen in bestimten Ordner sucht und wenn vorhanden die Datei löscht.

Hier mein Versuch der nicht klappt face-sad, kann mir jemand helfen?
Dim testFile, objFSO
Set objFSO = CreateObject("Scripting.FileSystemObject")
testFile = "D:\Users\Max\Desktop\Test\test.pdf"
If (objFSO.FileExists(testFile)) Then
Set fso = CreateObject("Scripting.FileSystemObject")
fso.GetFile.Delete
Else
MsgBox "nö Datei gibts nicht"
End If
Gruß
Knuefi

Content-Key: 298875

Url: https://administrator.de/contentid/298875

Printed on: April 19, 2024 at 22:04 o'clock

Member: AndreasHoster
AndreasHoster Mar 11, 2016 at 15:51:53 (UTC)
Goto Top
Kleiner Hinweis:
Warum zwei Scripting.FileSystemObject Objekte?
Und viel wichtiger, woher soll GetFile wissen, um welche Datei es sich handeln soll?
Member: Knuefi
Knuefi Mar 11, 2016 at 16:09:07 (UTC)
Goto Top
Habe es umgeschrieben, trozdem funktioniert es nicht,. was mache ich da falsch?

Dim testFile, objFSO
Set objFSO = CreateObject("Scripting.FileSystemObject")
testFile = "D:\Users\Max\Desktop\Test\test.pdf"
If (objFSO.FileExists(testFile)) Then
file.delete
Else
MsgBox "nö Datei gibts nicht"
End If
Member: Knuefi
Knuefi Mar 11, 2016 at 16:40:13 (UTC)
Goto Top
Hier mein zweiter Versuch der auch nicht läuft face-sad

const path = "D:\Users\Max\Desktop\Test"
const extension = "Test.pdf"
dim fso, file, folder
Set fso = CreateObject("Scripting.FileSystemObject")
Set folder = fso.GetFolder (path)
for each file in folder.files
= extension then
file.delete
Else
MsgBox "nö Datei gibts nicht"
end if
next
Mitglied: 126919
126919 Mar 11, 2016 updated at 17:45:52 (UTC)
Goto Top
dim fso, testFile
Set fso = CreateObject("Scripting.FileSystemObject")  
testFile = "D:\Users\Max\Desktop\Test\test.pdf"  
If (fso.FileExists(testFile)) Then
	fso.DeleteFile testFile,True
Else
	MsgBox "Datei '" & testFile & "' gibts nicht!",vbExclamation  
End If
Gruß fk
Member: AndreasHoster
AndreasHoster Mar 11, 2016 at 18:31:31 (UTC)
Goto Top
@126919 hat Dir ja eine funktionierende Version geliefert, hier noch eine Fehlerbetrachtung Deines Codes.
Dim testFile, objFSO 
 Set objFSO = CreateObject("Scripting.FileSystemObject")   
 testFile = "D:\Users\Max\Desktop\Test\test.pdf"   
 If (objFSO.FileExists(testFile)) Then
 file.delete
 Else 
 MsgBox "nö Datei gibts nicht"   
 End If
Selbes Problem wie am Anfang:
Was soll file sein? Die Variable/Objekt wurde nie vorher erwähnt und auf einmal soll ein Delete funktionieren. Natürlich geht das so nicht, file muß schon initialisiert werden
set file = objFSO.GetFile(testFile)
file.Delete
Im zweiten Beispiel, was soll = extension then sein? Da fehlt irgendwas:
if lcase(file.name) = lcase(extension) then
    file.delete
LCase wegen case-insensitiven Dateinamen im Windows.
Member: Knuefi
Knuefi Mar 13, 2016 at 15:14:01 (UTC)
Goto Top
Danke für die ausfürliche Erklärung meiner Fehler, jetzt ist es klar warum es klappen konnte. Jetzt würde ich es gerne verfeinern, es sollte per msgbox der Name der Datei die zu löschen ist abgefragt werden. Wie heißt die Funktion?
Mitglied: 126919
126919 Mar 13, 2016 updated at 17:28:25 (UTC)
Goto Top
strDateiname = InputBox("Bitte Dateinamen eingeben")  
Sowas wie Suchmaschinen und Dokumentationen scheinen Fremdwörter für dich zu sein?!
Member: Knuefi
Knuefi Mar 14, 2016 at 19:19:01 (UTC)
Goto Top
Suchmaschiene sind bei mir kein Frendwort, deshalb habe ich gefragt wie die Funktion heißt. Ich wusste nich das ich nach Inputbox suchen muss.
Trozdem bekomme ich es nicht hin, kann ich überhaupt variabel löschen?
Mitglied: 126919
126919 Mar 14, 2016 updated at 19:33:19 (UTC)
Goto Top
Wieso machst du dann nicht erst mal einen Grundlagen-Programmierkurs wenn das alles zu schwer für dich ist ? Wenn wir alles auf dem Silbertablett servieren lernst du wenig, minimal die Dokumentation zu lesen sollte man eigentlich können.
kann ich überhaupt variabel löschen?
Wie meinen ?? Geht alles...
dim fso, strFile
Set fso = CreateObject("Scripting.FileSystemObject")  
strFile = Inputbox("Bitte Dateipfad zum löschen eingeben")  
If (fso.FileExists(strFile)) Then
	fso.DeleteFile strFile,True
Else
	MsgBox "Datei '" & strFile & "' gibts nicht!",vbExclamation  
End If

http://www.tutorialspoint.com/vbscript/
Member: Knuefi
Knuefi Mar 14, 2016 updated at 19:49:11 (UTC)
Goto Top
Hallo Flachkoeper,

erstmal Danke für deine Hilfe bzw. Geduld mit mir, ich glaube es Verstanden zu haben. Das Script bezieht sich auf den zu löschenden Dateipfad, es soll aber der Dateiname abgefragt werden, die Dateien sind in ein und selben Ordner (fester Pfad, D:\Users\Max\Desktop\Test ). Klar ist mir, das die Dateien auch gelöscht werden, wenn ich in der Abfrage D:\Users\Max\Desktop\Test\Dateiname der gelöscht werden soll eingebe. Richtig?
Mitglied: 126919
126919 Mar 14, 2016 updated at 19:57:42 (UTC)
Goto Top
Zitat von @Knuefi:
. Klar ist mir, das die Dateien auch gelöscht werden, wenn ich in der Abfrage D:\Users\Max\Desktop\Test\Dateiname der gelöscht werden soll eingebe. Richtig?
Ja.

Wenn du nur den Namen eingeben lassen willst verkettest du einfach das Ergbnis der Inputbox mit dem festen Pfad, fertig.
dim fso, strFile
Const PFAD = "D:\Users\Max\Desktop\Test\"  
Set fso = CreateObject("Scripting.FileSystemObject")  
strFile = Inputbox("Bitte Dateiname zum löschen eingeben")  
If (fso.FileExists(PFAD & strFile)) Then
	fso.DeleteFile strFile,True
Else
	MsgBox "Datei '" & PFAD & strFile & "' gibts nicht!",vbExclamation  
End If
Member: Knuefi
Knuefi Mar 14, 2016 at 20:11:57 (UTC)
Goto Top
Ok, das klingt Logisch. Nun habe ich gerade festgestellt, dass in den Ordner D:\Users\Max\Desktop\Test sich auch Verknüfungen zu weiteren Ordner befinden. Kann ich die Suche und das Anschließende lösche der Datei auf die Verknüpfungen erweitern?. Ich habe folgendes dazu gefunden bzw. bin ich auf den richtigen Weg?.
Function parseFolders(strFldr)
for each myFile in strFldr.Files
If LCase(objFS.GetExtensionName(myFile.Name)) = "lnk" then
target = objShell.CreateShortcut(myFile.Path).TargetPath
If objFS.FolderExists(target) Then
fso.DeleteFile
Mitglied: 126919
126919 Mar 14, 2016 updated at 20:40:06 (UTC)
Goto Top
Wat kommt jetzt noch alles, soll das Teil auch noch Burger braten face-confused
Const PFAD = "D:\Users\Max\Desktop\Test\"  
Set fso = CreateObject("Scripting.FileSystemObject")  
Set objShell = CreateObject("Wscript.Shell")  

strFile = Inputbox("Bitte Dateiname zum löschen eingeben")  

If (fso.FileExists(PFAD & strFile)) Then
	fso.DeleteFile strFile,True
End If 

for each myFile in fso.GetFolder(PFAD).Files
    If LCase(fso.GetExtensionName(myFile.Name)) = "lnk" then  
    target = objShell.CreateShortcut(myFile.Path).TargetPath
    If (fso.FileExists(target & "\" & strFile)) Then  
	fso.DeleteFile target & "\" & strFile,True  
    End if
   End if
Next
Member: Knuefi
Knuefi Mar 14, 2016 at 20:38:27 (UTC)
Goto Top
Das mit den Burger ist sau gute Idee face-smile!!!!

Leider bekomme ich diese Fehlermeldung face-sad. Zudem noch folgende Frage: macht es Sinn die Suche nur auf Verknüfungen zu beziehen?, ich kann ja einen Ordner erstellen und schon dort eine Verknüfung zum Ordner D:\Users\Max\Desktop\Test erstellen.
fehlermeldung
Mitglied: 126919
126919 Mar 14, 2016 updated at 20:43:00 (UTC)
Goto Top
Fehlte doch nur ein End if, ist oben ausgebessert.
Hatte eigentlich drauf spekuliert das du den Fehler diesmal selber findest, leider wird wieder nur kopiert und nicht das Hirn benutzt face-sad

Bis denn ...
fk
Member: Knuefi
Knuefi Mar 14, 2016 at 20:53:33 (UTC)
Goto Top
Das verstehe ich nicht, kannst du mir das bitte noch erklären. Da schon zweimal End if vorhanden war, hätte ich den Fehler nie gefunden. Ok, Anhand der Fehlermeldung "Next" hätte ich darauf können kommen, wieder richtig?
Member: Knuefi
Knuefi Mar 15, 2016 at 17:45:29 (UTC)
Goto Top
Nun habe ich die nächste Frage, vieleicht kann mir jemand weiterhelfen. In den Verknüfungen sind noch Unterordner und diese werden leider nicht durchsucht bzw. die Datei werden nicht gelöscht. Eine Lösung wäre ja : .TargetPath & "\Name Unterordner" , diese Lösung ist leider nicht die Optimale, da die Unterordner unterschiedliche Namen haben. Ich habe natürlich die Suchfunktion benutzt, aber leider finde ich nur Lösungen wo nicht nur der Inhalt des Unterornder gelöscht wird, sondern der Unterordner gleich mit und der soll erhalten werden.

Gruß und Danke in voraus
Knuefi
Mitglied: 126919
Solution 126919 Mar 16, 2016 updated at 07:59:36 (UTC)
Goto Top
Den Code zum rekursiven durchsuchen von Ordnern hattest du doch schon hier mit der Funktion parseFolders
Lösche Inhalt in bestimmten Unterordner wenn älter als
minimal angepasst mit der if abfrage oben und du hast deinen Code.
Ein bißchen mit Programmieren musst du dich schon beschäftigen ...
Wenn hier deine Wünsche immer nur tröpfchenweise rauskullern anstatt sein Vorhaben gleich von Anfang an exakt zu schildern. Das ist hier ja kein Wunschkonzert face-sad
Member: Knuefi
Knuefi Mar 16, 2016 at 19:09:03 (UTC)
Goto Top
Super damit hast du mir sehr geholfen, DANKE !!!!.