aletri
Goto Top

3 vbscripts in 1 vbscirpt ausführen

Morgen an alle

Erster Script verschiebt, convertiert und startet folge Script:
Set objFSO = CreateObject("Scripting.FileSystemObject")  
objFSO.MoveFile "C:\ProgramData\Lockheed Martin\Prepar3D v4\scenery.cfg" , "C:\zATi\scenery.cfg"  

Const ForReading = 1
Const TristateTrue = -1 'UniCode  

FilePath = "C:\zATi\scenery.cfg"  

Set oFSO = CreateObject("scripting.filesystemobject")  
Set oFile = oFSO.GetFile(FilePath)

Set oFileIn = oFSO.OpenTextFile(oFile.Path,ForReading,,TristateTrue)
Set oFileOut = oFSO.CreateTextFile(oFile.ParentFolder & "\ansi_" & oFile.Name,True,False)  

oFileOut.Write oFileIn.ReadAll

set wshell = CreateObject("Wscript.shell")  
wshell.run "C:\zATi\RemoveSceneryII.vbs"  

Zweiter Script löscht Szenerie Eintrag , convertiert und startet folge Script:
Set objFileSystem = Wscript.CreateObject("Scripting.FileSystemObject")  
objFileSystem.DeleteFile "C:\zATi\scenery.cfg" ,True  
Set objFilesystem = Nothing

CfgFilePath = "C:\zATi\ansi_scenery.CFG"  
Dim Record (10000)
ScenTitle = "Title=MyScenery"  
EntryNumRows = 6
	
Set fs = CreateObject("Scripting.FileSystemObject")   
Set a = fs.OpenTextFile(CfgFilePath, 1, FALSE) 
 

i = 1
Do While Not a.AtEndOfStream 
	aLine = a.ReadLine
	PosTitle=Instr(1, aLine, ScenTitle)
	
	If 	PosTitle <> 0 Then
		StartRow = i-1
		EndRow = StartRow + EntryNumRows - 1
	End If 
	Record(i) = aLine
	i = i+1 
Loop 

a.Close 

Set a = fs.CreateTextFile(CfgFilePath, True)
For n = 1 To i-1 
	If (n < StartRow) or (n > EndRow) then
		a.WriteLine(Record(n)) 
	End If
	
Next 
a.Close 

Set fso = CreateObject("Scripting.FileSystemObject")  
Set oFolder = fso.GetFolder("C:\zATi")  
Set oFiles = oFolder.files

For each file in oFiles
If Right(file.Name, 3) = "cfg" Then  
Set ANSIFile = fso.OpenTextFile(file.path, 1, False, False)
ANSIContent = ANSIFile.ReadAll
Set UNICODEFile = fso.OpenTextFile(file.path, 2, False, True)
UNICODEFile.Write ANSIContent
End If
Next

set wshell = CreateObject("Wscript.shell")  
wshell.run "C:\zATi\RemoveSceneryIII.vbs"  

Dritter Sciript nennt Datei um und verschiebt diese wider zurück:

Set objFSO = CreateObject("Scripting.FileSystemObject")  
objFSO.MoveFile "C:\zATi\ansi_scenery.cfg" , "C:\ProgramData\Lockheed Martin\Prepar3D v4\scenery.cfg"  

So wie oben beschriben ausgeführt funktionieren diese 3 Scripts fehlerlos!
Ist es möglich diese Scripts in einem auszuführen?

Content-Key: 343605

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

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

Member: emeriks
emeriks Jul 17, 2017 updated at 07:29:34 (UTC)
Goto Top
Hi,
ja, warum nicht?

Set objFSO = CreateObject("Scripting.FileSystemObject")  
objFSO.MoveFile "C:\ProgramData\Lockheed Martin\Prepar3D v4\scenery.cfg" , "C:\zATi\scenery.cfg"  

Const ForReading = 1
Const TristateTrue = -1 'UniCode  

FilePath = "C:\zATi\scenery.cfg"  

Set oFile = objFSO.GetFile(FilePath)

Set oFileIn = objFSO.OpenTextFile(oFile.Path,ForReading,,TristateTrue)
Set oFileOut = objFSO.CreateTextFile(oFile.ParentFolder & "\ansi_" & oFile.Name,True,False)  

oFileOut.Write oFileIn.ReadAll

objFSO.DeleteFile "C:\zATi\scenery.cfg" ,True  

CfgFilePath = "C:\zATi\ansi_scenery.CFG"  
Dim Record(10000)
ScenTitle = "Title=MyScenery"  
EntryNumRows = 6
	
Set a = objFSO.OpenTextFile(CfgFilePath, 1, FALSE) 
 

i = 1
Do While Not a.AtEndOfStream 
	aLine = a.ReadLine
	PosTitle=Instr(1, aLine, ScenTitle)
	
	If 	PosTitle <> 0 Then
		StartRow = i-1
		EndRow = StartRow + EntryNumRows - 1
	End If 
	Record(i) = aLine
	i = i+1 
Loop 

a.Close 

Set a = objFSO.CreateTextFile(CfgFilePath, True)
For n = 1 To i-1 
	If (n < StartRow) or (n > EndRow) then
		a.WriteLine(Record(n)) 
	End If
	
Next 
a.Close 

Set oFolder = objFSO.GetFolder("C:\zATi")  
Set oFiles = oFolder.files

For each file in oFiles
  If Right(file.Name, 3) = "cfg" Then  
    Set ANSIFile = fso.OpenTextFile(file.path, 1, False, False)
    ANSIContent = ANSIFile.ReadAll
    Set UNICODEFile = fso.OpenTextFile(file.path, 2, False, True)
    UNICODEFile.Write ANSIContent
  End If
Next

objFSO.MoveFile "C:\zATi\ansi_scenery.cfg" , "C:\ProgramData\Lockheed Martin\Prepar3D v4\scenery.cfg"  

E.

Edit:
Ich habe das gleich ein bisschen ausgedünnt und diese mehrfachen FSO-Objekte auf eins reduziert.
Member: aletri
aletri Jul 17, 2017 at 08:25:04 (UTC)
Goto Top
Grüss Dich emeriks

Besten Dank
Das Verschieben und umwandeln der scenery.cfg in C:/zATi kommt zustande dann aber die Fehlermeldung Zeile 16 "Permission denied"
somit wird die Bearbeitung und das wieder zurückverschieben nicht ausgeführt. Habe versucht vor Zeile 16 und vor Zeile 62 ein
Wscript.sleep 1000 einzufügen aber die gleiche Fehlermeldung kommt!
Mitglied: 133417
133417 Jul 17, 2017 updated at 09:10:04 (UTC)
Goto Top
Datei wir in Zeile 11 geöffnet aber vor dem Löschen das Handle nicht geschlossen
Ein
oFileIn.Close
vor dem Löschvorgang in Zeile 16 sollte helfen, ansonsten stimmen die Rechte nicht.

Gruß
Member: aletri
aletri Jul 17, 2017 at 10:03:13 (UTC)
Goto Top
Hallo BibersBaum

Besten Dank..leider die gleiche Fehlermeldung!

Gruss
Mitglied: 133417
133417 Jul 17, 2017 at 10:09:07 (UTC)
Goto Top
Dann hat das Skript keine Berechtigung zum Löschen der Datei, elevated starten...