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-ID: 298875

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

Ausgedruckt am: 22.11.2024 um 04:11 Uhr

AndreasHoster
AndreasHoster 11.03.2016 um 16:51:53 Uhr
Goto Top
Kleiner Hinweis:
Warum zwei Scripting.FileSystemObject Objekte?
Und viel wichtiger, woher soll GetFile wissen, um welche Datei es sich handeln soll?
Knuefi
Knuefi 11.03.2016 um 17:09:07 Uhr
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
Knuefi
Knuefi 11.03.2016 um 17:40:13 Uhr
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
126919
126919 11.03.2016 aktualisiert um 18:45:52 Uhr
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
AndreasHoster
AndreasHoster 11.03.2016 um 19:31:31 Uhr
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.
Knuefi
Knuefi 13.03.2016 um 16:14:01 Uhr
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?
126919
126919 13.03.2016 aktualisiert um 18:28:25 Uhr
Goto Top
strDateiname = InputBox("Bitte Dateinamen eingeben")  
Sowas wie Suchmaschinen und Dokumentationen scheinen Fremdwörter für dich zu sein?!
Knuefi
Knuefi 14.03.2016 um 20:19:01 Uhr
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?
126919
126919 14.03.2016 aktualisiert um 20:33:19 Uhr
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/
Knuefi
Knuefi 14.03.2016 aktualisiert um 20:49:11 Uhr
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?
126919
126919 14.03.2016 aktualisiert um 20:57:42 Uhr
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
Knuefi
Knuefi 14.03.2016 um 21:11:57 Uhr
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
126919
126919 14.03.2016 aktualisiert um 21:40:06 Uhr
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
Knuefi
Knuefi 14.03.2016 um 21:38:27 Uhr
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
126919
126919 14.03.2016 aktualisiert um 21:43:00 Uhr
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
Knuefi
Knuefi 14.03.2016 um 21:53:33 Uhr
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?
Knuefi
Knuefi 15.03.2016 um 18:45:29 Uhr
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
126919
Lösung 126919 16.03.2016 aktualisiert um 08:59:36 Uhr
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
Knuefi
Knuefi 16.03.2016 um 20:09:03 Uhr
Goto Top
Super damit hast du mir sehr geholfen, DANKE !!!!.