deathholly
Goto Top

VBS .txt Inhalt vor schreiben löschen

Hallo,
ich habe folgendes Script.
Es funktioniert auch, nur das wenn ich es im Overwrite Modus öffne, schreibt es mir nur die erste Zeile.
Im Append Modus klappt es, wenn es aber öfter aufgerufen wird, und das ist definitiv der Fall, wird es immer wieder alles angehängt. Geht nicht!
Wie kann ich den Inhalt erst löschen und dann den neuen Inhalt schreiben, so das die Datei immer aktuell gehalten wird?

Const HKLM = &H80000002
Set objReg = GetObject("winmgmts://" & strHost & _  
    "/root/default:StdRegProv")  
Const strBaseKey = _
    "Software\Microsoft\Windows\CurrentVersion\Uninstall\"   
objReg.EnumKey HKLM,strBaseKey,arrSubKeys
      
For Each strSubKey In arrSubKeys
    intRet = objReg.GetStringValue(HKLM,strBaseKey & strSubKey,_
        "DisplayName",strValue)  
    If intRet <> 0 Then 
        intRet = objReg.GetStringValue(HKLM,strBaseKey & strSubKey,_
        "QuietDisplayName",strValue)  
    End If

If (strValue <> "") and (intRet = 0) Then  

        set fs = CreateObject("Scripting.FileSystemObject")  
        logfile =WshNetwork.Computername &"-Software.txt"  
        set handle = fs.OpenTextFile(logfile,8,true)
 
        softwareName = strValue
        handle.WriteLine softwareName
        handle.close
End If

Danke

Content-Key: 233170

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

Printed on: April 18, 2024 at 23:04 o'clock

Member: colinardo
colinardo Mar 20, 2014 updated at 09:23:41 (UTC)
Goto Top
Hallo deathholly, Willkommen im Forum!
In deinem Code haben sich doch einige Fehler eingeschlichen, oder du hast nicht den kompletten Code gepostet, bzw. ist der Nicht-Verwendung von Tags geschuldet.

Ich denke du suchst dieses Script zum erstellen einer Liste der installierten Software (das kürzt das ganze etwas ab) face-wink:
Registry-Unterschlüssel durchsuchen

Grüße Uwe

p.s. das nächste mal bitte deinen Code mit Tags auszeichen. Merci.
Member: deathholly
deathholly Mar 20, 2014 at 09:25:36 (UTC)
Goto Top
Hallo,
danke für die schnelle Hilfe.
Das Script ist nicht komplett kopiert, dies hier ist nur der wesentliche Teil.

Es funktioniert ja reibungslos, und so wie die Liste rauskommt ist die auch ok, nur das er mir immer die komplette Liste dann anhängt, das möchte ich vermeiden.
Was denn für gewaltige Fehler? Bin gern bereit zu lernen.
Es muss doch irgendwie gehen in der Funktion wenn ich die txt öffne, sie vorher zu löschen?
Member: colinardo
colinardo Mar 20, 2014 updated at 09:42:20 (UTC)
Goto Top
Du solltest am besten alle Werte aus der Registry in der Schleife in einem String sammeln und diesen dann zum Schluss nach der Schleife gesammelt in die Datei schreiben (Im 2 Parameter von OpenTextfile dann eine 2 verwenden damit das File überschrieben wird.)
completecontent = ""  
for each .....
   .....
   completecontent = completecontent & strValue & vbNewline
   .....
next 

fs.OpenTextFile(logfile,2,true)
siehe dazu auch den Link zum Script was ich oben gepostet habe, dort ist das so gemacht ...


Zu den Fehlern:

Was soll ifIf, fehlt ein Return ..
End IfIf (strValue <> "") and (intRet = 0) Then

log file ?? Leerzeichen in der Variablen geht nicht!!
fs.OpenTextFile(log file,8,true)

Deinem for each Konstrukt fehlt das Next das finde ich nirgendwo (-edit- ist ja ein Ausschnitt, aber das sollte man auch vorher erwähnen)
Member: Meierjo
Meierjo Mar 20, 2014 at 09:39:50 (UTC)
Goto Top
Hallo Deathholly

Ich bin jetzt auch nicht so der VBS-Spezi, aber wenn du

set handle = fs.OpenTextFile(log file,8,true)

durch

set handle = fs.OpenTextFile(logfile,2,true)

ersetzt, sollte das Logfile jedesmal neu angelegt werden

gruss meierjo
Member: deathholly
deathholly Mar 20, 2014 at 09:49:51 (UTC)
Goto Top
Zu den Fehlern, die haben sich beim kopieren eingeschlichen.
Ok, werde mich bessern was posten von Codes angeht. Wollte hier nicht jemandem zumuten das ganze Script durchzurosten.

Ich werde es mal versuchen.
danke
Member: deathholly
deathholly Mar 20, 2014 at 09:50:44 (UTC)
Goto Top
@ Meierjo

Ja, das dachte ich mir ja auch, aaaaber es wird leider nur die erste Zeile geschrieben!
Member: colinardo
colinardo Mar 20, 2014 updated at 12:10:50 (UTC)
Goto Top
Zitat von @deathholly:
Ja, das dachte ich mir ja auch, aaaaber es wird leider nur die erste Zeile geschrieben!
Ist ja auch klar wenn du innerhalb der Schleife in die Datei schreibst und den zweiten Parameter von OpenTextfile auf 2 setzt, dann wird bei jedem Schleifendurchlauf die Datei überschrieben und es befindet sich zum Schluss nur der letzte Wert darin !

Ist aber alles schön im obigen verlinkten Script abzuschauen ....

back-to-topAlso nochmal Beispiele zum Verständnis:

Beispiel Schreiben außerhalb der Schleife (mit vorherigem Sammeln in einer Variablen)
Set fso = CreateObject("Scripting.Filesystemobject")  
arr = Array("Adobe","Sun","Microsoft")  
software = ""  
For i = 0 To UBound(arr)
        ' Hänge jeden Wert an die Variable mit einem Zeilenumbruch an  
	software = software & arr(i) & vbNewLine
Next
' Öffne Datei im Überschreibmodus  
fso.OpenTextFile("demo.txt",2,True).Write(software)  

Beispiel: Schreiben in der Schleife
Set fso = CreateObject("Scripting.Filesystemobject")  
arr = Array("Adobe","Sun","Microsoft")  
' Öffne Datei im Überschreibmodus  
Set f = fso.OpenTextFile("demo.txt",2,True)  
For i = 0 To UBound(arr)
        ' Schreibe Wert jeweils in eine eigene Zeile in der Datei  
	f.WriteLine(arr(i))
Next
' Schließe Datei  
f.Close
Member: Xaero1982
Xaero1982 Mar 20, 2014 at 20:06:33 (UTC)
Goto Top
Moin,

du könntest die Datei vorher einfach löschen?

 fso.deleteFile (logfile)

Das setzt du zwischen

 logfile =WshNetwork.Computername &"-Software.txt"   
und
set handle = fs.OpenTextFile(logfile,8,true) 


Solltest du vielleicht noch mit einem:

If (fs.FileExists(logfile)) Then
     fso.deleteFile (logfile)

Gruß

PS: Ungetestet und überhaupt
PPS: Ansonsten hat colinardo schon alles geschrieben und seins ist sauberer face-smile