53111
Goto Top

html datei per vbs schreiben

ich möchte per vbs eine html datei schreiben lassen? die "" und ( stören scheinbar das schreiben der datei. wie kann ich das problem lösen - wenn möglich ohne eine extra datei zu erstellen aus der ich den text importiere?


HTMLdatei.Write("<html><head><title>Test</title>  
<script type="text/javascript">  
function Weiter () {
  if (document.Testform.Art.checked == true) {
    window.location.href = "frmdatei.htm";  
  } else if (document.Testform.Art[1].checked == true) {
    window.location.href = "datei.htm";  
  } else {
    alert("Bitte eine Auswahl treffen");  
  }
}
</script>
</head><body>
<form name="Testform" action="">")  

Content-Key: 68815

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

Printed on: April 25, 2024 at 07:04 o'clock

Member: bastla
bastla Sep 17, 2007 at 14:25:21 (UTC)
Goto Top
Hallo saibonaut!

Versuch es mal so:
HTMLdatei.Write("<html><head><title>Test</title>" & vbCrLF & _  
"<script type=""text/javascript"">" & vbCrLF & _  
"function Weiter () {" & vbCrLF & _  
"  if (document.Testform.Art.checked == true) {" & vbCrLF & _  
"    window.location.href = ""frmdatei.htm"";" & vbCrLF & _  
"  } else if (document.Testform.Art[1].checked == true) {" & vbCrLF & _  
"    window.location.href = ""datei.htm"";" & vbCrLF & _  
"  } else {" & vbCrLF & _  
"    alert(""Bitte eine Auswahl treffen"");" & vbCrLF & _  
"  }" & vbCrLF & _  
"}" & vbCrLF & _  
"</script>" & vbCrLF & _  
"</head><body>" & vbCrLF & _  
"<form name=""Testform"" action="""">")  
Jede VBS-Zeile wird getrennt interpretiert, wenn sie also über mehrere Zeilen reichen soll, am Ende ein " _" anfügen.

Um in die Zieldatei eine Zeilenschaltung zu schreiben, vbCrLF verwenden.

Die einzelnen Strings können nicht über eine Zeile reichen, daher jeweils zeilenweise verknüpfen.

Jedes Anführungszeichen, das als solches geschrieben werden soll, muss verdoppelt oder durch Chr(34) ersetzt werden.

Einfacher wäre es übrigens, jede einzelne Zeile mit "HTMLdatei.WriteLine" zu schreiben.

Grüße
bastla
Mitglied: 53111
53111 Sep 17, 2007 at 16:00:26 (UTC)
Goto Top
ok danke. habe es jetzt so gelöst:
allerdings würde ich nun gerne aus der html datei/jscript werte an eine vbs datei zurückgeben:

LESENanfang:
<html><head><title>Test</title>
<script type="text/javascript">  
function Weiter () {
  if (document.Testform.Art.checked == true) {
    alert("0");  
  } else if (document.Testform.Art[1].checked == true) {
    window.location.href = "datei.htm";  
  } else {
    alert("Bitte eine Auswahl treffen");  
  }
}
</script>
</head><body>
<form name="Testform" action="">  

LESENende:
<br><input type="button" value="Starten" onclick="Weiter()">  
</form>
</body></html>


DIM fsoSCHREIBEN        'FSO zum Speichern der HTML Datei  
DIM fsoLESENanfang     'LESEN der aus txt'  
DIM fsoLESENmitte
DIM fspLESENende
DIM objOrdner    ' Variable für den Ordner, in dem die Unterordner entstehen  
DIM objUnterordner ' Variable für die Unterordner  
DIM Ordner     ' Variabel für den Ordner, in dem die Unterordner entstehen  
DIM ordnerarray
DIM HTMLdatei
 
DIM LESENanfangTXT  'Textstreams aus TXT Dateien'  
DIM LESENmitteTXT 
DIM LESENendeTXT

DIM inhaltLESENanfang                  'Inhalt der TXT Dateien '  
DIM inhaltLESENmitte 
DIM inhaltLESENende 

DIM HTMLtext 'wird momentan nicht benötigt'  
Const ForWriting = 2
Const fsForReading = 1


Set fsoSCHREIBEN = CreateObject("Scripting.FileSystemObject")  
set HTMLdatei = fsoSCHREIBEN.OpenTextFile("C:\Test.html", ForWriting, true)  


Set fsoLESENanfang  = CreateObject("Scripting.FileSystemObject")  
set LESENanfangTXT = fsoLESENanfang.OpenTextFile("C:\LESENanfang.txt", fsForReading)  
inhaltLESENanfang = LESENanfangTXT.ReadAll

'Set fsoLESENmitte = CreateObject("Scripting.FileSystemObject")  
'set LESENmitteTXT = fsoLESENmitte.OpenTextFile("C:\LESENmitte.txt", fsForReading)  
'inhaltLESENmitte = LESENmitteTXT.ReadAll  

Set fspLESENende = CreateObject("Scripting.FileSystemObject")  
set LESENendeTXT = fspLESENende.OpenTextFile("C:\LESENende.txt", fsForReading)  
inhaltLESENende = LESENendeTXT.ReadAll


'Anfang der HTML Datei schreiben'  
HTMLdatei.Write(inhaltLESENanfang)


x = 0
Ordner = "C:\"  
Set FSO = CreateObject("Scripting.FileSystemObject")  
Set objOrdner = FSO.GetFolder(Ordner)
Temp = ""  
For Each objUnterordner in objOrdner.SubFolders
	Temp = Temp & ":" & objUnterordner.Name  
Next
ordnerarray = Split(Mid(Temp, 2), ":")  
       

    
    For h = 0 to UBound(ordnerarray)-1
    HTMLdatei.Write("<input type=""checkbox"" name=""Art"" value=""" & ordnerarray(h)& """>" & ordnerarray(h) & "<br/>")  


    Next 
    HTMLdatei.Write(inhaltLESENende)   

HTMLdatei.Close


und nun soll je nach angeklickter checkbox der entsprechende wert aus "value" hier anstelle der InputBox in "OrdnerUndNutzer" eingefügt und ausgeführt werden.

vbs:


OrdnerUndNutzer = InputBox("Welche Datei wollen Sie bearbeiten?",,"Ordnername")  
zielfile = "H:\" & OrdnerUndNutzer  

' Zugriff auf WMI  
Set wmi = GetObject("winmgmts:")  
' "Jeder" soll die Datei nur lesen dürfen, das Löschen wird explizit verboten  
' "Administrator" soll alle Rechte erhalten  

 Set ACE1 = CreateACE(wmi, 2032127, 0, SetTrustee(wmi, "Administratoren"))  
              Set ACE2 = CreateACE(wmi, 2032127, 0, SetTrustee(wmi, "OrdnerUndNutzer" ))               
              
              newdacl = Array(ACE1, ACE2)



' die Datei, die diese Rechte erhalten soll, wird angesprochen  
Set fileinstance = GetFile(wmi,zielfile)

' der alte Security Descriptor wird geöffnet  
retval = fileinstance.getsecuritydescriptor(sec)

' die neue DACL ersetzt die alte DACL  
sec.Properties_.Item("dacl") = newdacl  

' der geänderte Security Descriptor wird in die Datei zurückgeschrieben  
retval = fileinstance.setsecuritydescriptor(sec)

' erledigt  
If retval = 0 Then
MsgBox "Neue Zugriffsrechte eingetragen"  
Else
MsgBox "Konnte Zugriffsrechte nicht speichern." & vbCrLf _  
& "Möglicherweise fehlen Ihnen die Berechtigungen, oder die Datei existiert nicht."  
End If

Function GetFile(wmi, filename)
' öffnet eine Datei  
Set GetFile = wmi.Get("Win32_LogicalFileSecuritySetting='" & filename & "'")  
End Function

Function CreateACE(wmi, AccessMask, AceType, objTrustee)
' legt einen ACE an  
Set objAce = wmi.Get("Win32_Ace").SpawnInstance_  
objAce.Properties_.Item("AccessMask") = AccessMask  
objAce.Properties_.Item("AceFlags") = 3  
objAce.Properties_.Item("AceType") = AceType  
objAce.Properties_.Item("Trustee") = objTrustee  
Set CreateACE = objAce
End Function

Function SetTrustee(wmi, account)
If Left(account,2) = "\\" Then  
konto = Mid(account, 3)
Else
konto = account
End If
infos = Split(konto, "\")  
If UBound(infos) = 0 Then
'SYS: Windows Script Host Runtime Library  
Set wshnet = CreateObject("WScript.Network")  
UserName = infos(0)
ComputerName = wshnet.ComputerName
Else
UserName = infos(1)
ComputerName = infos(0)
End If

' legt ein Win32_Trustee-Objekt an  
Set objTrustee = wmi.Get("Win32_Trustee").SpawnInstance_  
objTrustee.Domain = ComputerName
objTrustee.Name = UserName

objTrustee.Properties_.Item("SID") = GetBinarySID(ComputerName, UserName)  
Set SetTrustee = objTrustee
End Function

Function GetBinarySID(ComputerName, UserName)
' ** ermittelt binäre SID eines Benutzerkontos  
On Error Resume Next
Set wmi = GetObject("winmgmts:\\" & ComputerName)  
If Err.number<>0 Then
MsgBox "Konnte \\" & ComputerName & " nicht erreichen!"  
WScript.Quit
End If
On Error Goto 0

wql = "select * from win32_account where name='" & UserName & "'"  
Set result = wmi.ExecQuery(wql)
counter = 0
For each entry in result
counter = counter + 1
sid = entry.SID
Next
If counter = 0 Then
MsgBox "Konnte \\" & ComputerName & "\" & UserName & " nicht erreichen!"  
WScript.Quit
ElseIf counter>1 Then
MsgBox "Zweideutiger Kontoname."  
WScript.Quit
End If

Set obj = wmi.Get("Win32_SID.SID=""" & sid & """")  
GetBinarySID = obj.Properties_.Item("BinaryRepresentation").Value  
End Function
Member: bastla
bastla Sep 17, 2007, updated at Oct 18, 2012 at 16:32:27 (UTC)
Goto Top
Hallo saibonaut!

Frage zwischendurch: Wenn es anscheinend nur darum geht, eine Datei / einen Ordner auszuwählen, warum dann nicht einfach per Standard-Dialog (siehe zB VBS Ordnerauswahl und Dateiauswahl mit Rückgabe des kompletten Pfades bzw den dort verlinkten Beitrag)?

Grüße
bastla