blob 10 Geschrieben 9. Dezember 2008 Melden Teilen Geschrieben 9. Dezember 2008 Hallo zusammen! Folgendes Prob: Ich habe ganz viele Logon Scripts, die mit der Zeit gewachsen sind. Nun soll für mehrere Logon Skripts (...\netlogon\username.bat) ein Laufwerk ergänzt werden. Jetzt will ich das das jedes Loginscript durchgearbeitet wird und mit dem neuen net use befehl bestückt wird, sprich in meinem Fall ein altes net use in den batch Dateien ersetzt wird. Es bietet sich natürlich jetzt an in die Logonskripts ein CALL laufwerk.bat einzufügen, aber das kommt erst noch, will einen Lerneffekt für Scripting haben ;-) Also ich hab mir eine Liste als TXT generiert, welches die Namen der Logonscripts beherbergt: liste.txt: vorname1.bat vorname2.bat nachname23.bat etc... Jetzt hab ich ein Batch mit einer Schleife, dass die Liste Zeile für Zeile auslesen soll und dann den Namen der einzelnen Loginscripts (wie gesagt in einer Schleife) abarbeiten soll: FOR /f %%f IN (liste.txt) DO ..... %%f Hier ist mein Knackpunkt, ich habe eine VBS die nach Mustern sucht und dann diese durch meinen Wunsch ersetzt. Ich brauch jetzt eine Möglichkeit, von Batch in der Schleife die einzelnen Zeilen an das VBS Skript weiterzugeben, so ähnlich wie: FOR /f %%f IN (liste.txt) DO CALL c:\domain\netlogon\replace.vbs /%%f Nur muss ich in der VBS jetzt irgendwas angeben, damit er von der Batch das %%f übernimmt. Jemand eine Idee? Hier meine VBS: strFilename = "HIER MUESSTE DIE VARIABLE VON DER BATCH REIN, z.B. vorname1.bat" Set objFSO = CreateObject("Scripting.FileSystemObject") Set objFile = objFSO.GetFile(strFilename) intFileSize = objFile.Size Set objFile = objFile.OpenAsTextStream() strFileContent = objFile.Read(intFileSize) objFile.Close Set objRegExp = New RegExp objRegExp.Pattern = Chr(34) objRegExp.Global = True objRegExp.IgnoreCase = True strFileContent = objRegExp.Replace(strFileContent, "") objRegExp.Pattern = "DAS_WAS_ICH_ERSETZEN_WILL" strFileContent = objRegExp.Replace(strFileContent, "DAS_MIT_DEM_ICH_ES_ERSETZE") Set objFile = objFSO.OpenTextFile(strFilename, 2) objFile.Write strFileContent objFile.Close Merci im voraus! Zitieren Link zu diesem Kommentar
NilsK 2.934 Geschrieben 9. Dezember 2008 Melden Teilen Geschrieben 9. Dezember 2008 Moin, um Kommandozeilenargumente in ein VBS einzulesen, nutzt du das Objekt objWSH.Arguments. WshArguments Object Gruß, Nils Zitieren Link zu diesem Kommentar
Cybquest 36 Geschrieben 9. Dezember 2008 Melden Teilen Geschrieben 9. Dezember 2008 ...Es bietet sich natürlich jetzt an in die Logonskripts ein CALL laufwerk.bat einzufügen, aber das kommt erst noch, will einen Lerneffekt für Scripting haben ;-) ... es würde sich vielleicht auch anbieten, sich das ganze Konzept zu überdenken ;) Ob man nicht mit wenigen Loginscripts, die mit entsprechenden Abfragen (z.B. mit "ifmember" o.ä.) arbeiten, das komfortabler händeln könnte. Grüße, Frank Zitieren Link zu diesem Kommentar
blob 10 Geschrieben 9. Dezember 2008 Autor Melden Teilen Geschrieben 9. Dezember 2008 Sorry, ich bin noch nicht so tief drin, ich habe es ein wenig ausprobiert.... Also wenn ich z.B. von Commandozeile was übergeben möchte an eine VBS Datei, ist dann folgender Syntax richtig: replace.vbs /vorname.bat In der replace.bat baue ich dann einfach das Objekt ein: Set objArgs = WScript.Arguments ??? Ich möchte das Ergebnis ja gerne kontrollieren, und versuche mir in einer MsgBox die Variable anzeigen zu lassen: MsgBox objArgs Kommt aber dann ein Laufzeitfehler. :-( – Richtig Frank, das ist natürlich 100% der bessere weg, mir geht es jetzt wirklich dabei nur um etwas mehr von Scripting zu verstehen. Seh es dann einfach so, dass ich gerne wissen möchte wie ich Ergebnisse von Batch nach VBS bringe und umgekehrt ;-) Zitieren Link zu diesem Kommentar
Cybquest 36 Geschrieben 9. Dezember 2008 Melden Teilen Geschrieben 9. Dezember 2008 ...Also wenn ich z.B. von Commandozeile was übergeben möchte an eine VBS Datei, ist dann folgender Syntax richtig: replace.vbs /vorname.bat ... lass den Slash weg (also replace.vbs vorname.bat) ... ach und bei der Ausgabe natürlich z.B. Msgbox objArgs(0) Zitieren Link zu diesem Kommentar
blob 10 Geschrieben 9. Dezember 2008 Autor Melden Teilen Geschrieben 9. Dezember 2008 Danke, diese (0) hat gefehlt! ;-) Jetzt sieht es so aus, das Script: set objArgs = WScript.Arguments Set objFSO = CreateObject("Scripting.FileSystemObject") Set objFile = objFSO.GetFile(objArgs(0)) intFileSize = objFile.Size Set objFile = objFile.OpenAsTextStream() strFileContent = objFile.Read(intFileSize) objFile.Close Set objRegExp = New RegExp objRegExp.Pattern = Chr(34) objRegExp.Global = True objRegExp.IgnoreCase = True 'False für case-sensitive strFileContent = objRegExp.Replace(strFileContent, "") objRegExp.Pattern = "ERSETZE_MICH" strFileContent = objRegExp.Replace(strFileContent, "ERSETZE_IHN_DURCH_MICH") Set objFile = objFSO.OpenTextFile(objArgs(0), 2) objFile.Write strFileContent objFile.Close Es funktioniert auch. Aber eine Frage hab ich noch ;-) Der letzte Teil, und zwar: Set objRegExp = New RegExp objRegExp.Pattern = Chr(34) objRegExp.Global = True objRegExp.IgnoreCase = True 'False für case-sensitive strFileContent = objRegExp.Replace(strFileContent, "") objRegExp.Pattern = "ERSETZE_MICH" strFileContent = objRegExp.Replace(strFileContent, "ERSETZE_IHN_DURCH_MICH") Set objFile = objFSO.OpenTextFile(objArgs(0), 2) objFile.Write strFileContent objFile.Close wie setze ich das z.B in einer Schleife ein? Hintergrund ist folgender: Es kann ja vorkommen das mehrere Wörter im Text ersetzt werden sollen, im ersten Durchlauf sucht er nach dem Wort HALLO und ersetzt es, und im zweiten Durchlauf durch die gleiche Datei sucht er nach SUPER und soll es ersetzen?! :o) Brauch auch keine Schleife sein, einfach den letzten Block kopieren und nochmal drunter setzen... aber die Variabeln müssen dann ja angepasst werden, ich sehe leider nicht welche, daher würde es mir helfen wenn mir das jmd erörtern könnte?! Sorry nochmal, ich bin manchmal etwas übereifrig. Ich bin mit dem Weltner Buch für VBScripting erst auf Seite 41 :-D Zitieren Link zu diesem Kommentar
NilsK 2.934 Geschrieben 9. Dezember 2008 Melden Teilen Geschrieben 9. Dezember 2008 Moin, in deinem Beispiel gibt es überhaupt keinen Grund für Regular Expressions. Warum liest du nicht einfach den Dateiinhalt in eine Variable ein und bearbeitest die mit einfachen Replace-Kommandos? strText = Replace(strDatei, "alterWert1", "neuerWert1", 1, -1, 1) strText = Replace(strDatei, "alterWert2", "neuerWert2", 1, -1, 1) usw. Gruß, Nils Zitieren Link zu diesem Kommentar
blob 10 Geschrieben 10. Dezember 2008 Autor Melden Teilen Geschrieben 10. Dezember 2008 zu Replace finde ich in der WSH 5.6 Doku nichts, ausser bei JScript?! Bei replace meckert WSH nicht, aber er tut dann gar nichts. Wenn ich es mir sinngemäß ableite, sieht es momentan mit replace bei mir so aus: set objArgs = WScript.Arguments strText = Replace(objArgs(0), "Hallo", "XXXXXX", 1, -1, 1) muss ich mit der gefüllten Variable strText noch was machen? Wenn ich es mir als ausgeben lasse über msgbox, dann zeigt er mir den Inhalt von objArgs an, was ich mitgegeben habe, also den Pfad der Datei?! Zitieren Link zu diesem Kommentar
NilsK 2.934 Geschrieben 10. Dezember 2008 Melden Teilen Geschrieben 10. Dezember 2008 Moin, also, dies hier funktioniert wie gewünscht. Durch die letzte "1" gibt es trotz der unterschiedlichen Groß-/Kleinschreibung einen Treffer, mit "0" würde es nicht ersetzen: strText = "C:\Ordner\UnterOrdner\EineDateiMitNamen.txt" strNeuerText = Replace(strText, "unterordner", "ErsetzterOrdner", 1, - 1, 1) WScript.Echo strNeuerText In der WSH-Doku steht das natürlich drin. Gruß, Nils Zitieren Link zu diesem Kommentar
blob 10 Geschrieben 10. Dezember 2008 Autor Melden Teilen Geschrieben 10. Dezember 2008 Das Replace ersetzt mir den Pfad zur Datei, aber ich will ja das IN der Datei das Suchen und Ersetzen stattfindet :) Zitieren Link zu diesem Kommentar
NilsK 2.934 Geschrieben 10. Dezember 2008 Melden Teilen Geschrieben 10. Dezember 2008 Moin, das war ja auch nur ein Beispiel ... wenn in strText der Inhalt deiner Datei steht, geht das exakt genauso. Gruß, Nils Zitieren Link zu diesem Kommentar
Cybquest 36 Geschrieben 10. Dezember 2008 Melden Teilen Geschrieben 10. Dezember 2008 noch'n Beispiel: Set MyFiles = CreateObject("Scripting.FileSystemObject") Const ForReading = 1, ForWriting = 2 varDatei="C:\Test.txt" Set f = MyFiles.OpenTextFile(varDatei, ForReading) Text = f.ReadAll varSearch="zu_suchender_String" varReplace="neuer_String" Set f = MyFiles.OpenTextFile(varDatei, ForWriting, True) f.Write Replace(Text, varSearch, varReplace,1,-1,1) Zitieren Link zu diesem Kommentar
blob 10 Geschrieben 11. Dezember 2008 Autor Melden Teilen Geschrieben 11. Dezember 2008 Danke Danke Danke, es funktioniert, und schwups hab ich einen Fall wo mir das Skript ganz gut helfen kann, aber ich eine Frage dazu habe: set objArgs = WScript.Arguments Set MyFiles = CreateObject("Scripting.FileSystemObject") Const ForReading = 1, ForWriting = 2 varDatei="objArgs(0)" Set f = MyFiles.OpenTextFile(varDatei, ForReading) TEXT = f.ReadAll If TEXT = "TEXTPASSAGE_DIE_ICH_SUCHE" Then . . . end if WScript.Quit in der Variable TEXT steht ja nun der Inhalt der gewünschten Textdatei. Ich will mein Script nur ausführen, wenn das Suchwort bzw die Zeichenfolge in meiner IF Bedinngung übereinstimmt mit einer Passage aus dem Text. Nur hat er in der Variablen jetzt z.B. drin stehen: "Mein kleiner Hund geht nicht gerne Gassi", und ich vergleiche es mit dem Argument "Gassi" => Es würde jetzt matchen, aber er vergleicht dann den kompletten Inhalt, das Gassi alleine reicht ihm also nicht das es gleich ist. Jemand einen Lösungsansatz bzw Idee? Danke im voraus! Zitieren Link zu diesem Kommentar
NilsK 2.934 Geschrieben 11. Dezember 2008 Melden Teilen Geschrieben 11. Dezember 2008 Moin, du suchst InStr(). Und darüber hinaus suchst du eine Scripting-Einführung. Ich empfehle die Bücher von Tobias Weltner. Gruß, Nils der gerne hilft, aber ein Forum nicht für die richtige Methode hält, um Grundlagenwissen aufzubauen. Zitieren Link zu diesem Kommentar
blob 10 Geschrieben 11. Dezember 2008 Autor Melden Teilen Geschrieben 11. Dezember 2008 Bin ich schon am durcharbeiten, aber leider noch nicht soweit ;-( (Buch: Windows Scripting) Aber danke für die Funktion! Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.