Einen bestimmten String an bestimmte Stellen in einer Textdatei schreiben
Einen bestimmten Textteil an bestimmte stellen in einer Textdatei schreiben
Hallo Liebe Administrator Community,
habe für mein Problem leider keine Lösung gefunden. Ich habe eine Textdatei mit ca. 400 Zeilen.
Jetzt würde ich gerne die Möglichkeit haben zu sagen, dass ich gerne einen String (z.B. "Programme") in einer bestimmten Anzahl von Zeilen (z.B. 20-360) an eine bestimmte Stelle schreibe (z.B. 3. Stelle).
Manuell wird das alles ein wenig viel Copy und Past Arbeit.
Hat eventuell einer von euch eine Lösung, oder wüsste ein Programm, welches eine solche Funktion bietet??
Vielen Dank.
Gruß
Fabian Reichardt
Hallo Liebe Administrator Community,
habe für mein Problem leider keine Lösung gefunden. Ich habe eine Textdatei mit ca. 400 Zeilen.
Jetzt würde ich gerne die Möglichkeit haben zu sagen, dass ich gerne einen String (z.B. "Programme") in einer bestimmten Anzahl von Zeilen (z.B. 20-360) an eine bestimmte Stelle schreibe (z.B. 3. Stelle).
Manuell wird das alles ein wenig viel Copy und Past Arbeit.
Hat eventuell einer von euch eine Lösung, oder wüsste ein Programm, welches eine solche Funktion bietet??
Vielen Dank.
Gruß
Fabian Reichardt
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 77113
Url: https://administrator.de/contentid/77113
Ausgedruckt am: 05.11.2024 um 08:11 Uhr
14 Kommentare
Neuester Kommentar
Hallo Breichardt!
Da Deine "bestimmte Anzahl von Zeilen" mit "20-360" doch ein wenig unbestimmt wirkt, solltest Du vielleicht etwas weiter ausholen und zumindest ein Kriterium für die zu ändernden Zeilen angeben.
Dabei könntest Du auch gleich erläutern, wie "an eine bestimmte Stelle schreiben" zu verstehen ist (etwa: zwischen der 2. und 3. Stelle des ursprünglichen Zeileninhaltes einfügen, oder: ab der 3. Stelle den gesamten oder auch nur den der Länge des einzufügenden Textes entsprechenden Zeileninhalt überschreiben).
[Edit] Und noch eine Frage: Enthält die Textdatei "!"? [/Edit]
Grüße
bastla
Da Deine "bestimmte Anzahl von Zeilen" mit "20-360" doch ein wenig unbestimmt wirkt, solltest Du vielleicht etwas weiter ausholen und zumindest ein Kriterium für die zu ändernden Zeilen angeben.
Dabei könntest Du auch gleich erläutern, wie "an eine bestimmte Stelle schreiben" zu verstehen ist (etwa: zwischen der 2. und 3. Stelle des ursprünglichen Zeileninhaltes einfügen, oder: ab der 3. Stelle den gesamten oder auch nur den der Länge des einzufügenden Textes entsprechenden Zeileninhalt überschreiben).
[Edit] Und noch eine Frage: Enthält die Textdatei "!"? [/Edit]
Grüße
bastla
Hallo Breichardt!
Versuch es einmal mit dem folgenden VBScript:
Zur Verwendung:
Speichere (nach ev erforderlichen Anpassungen in den ersten Zeilen bis BakExt = ".bak") das Script mit einem Texteditor unter "InsertLine.vbs" (oder einem Dir sympathischeren Namen ). Falls Du den Windows-Editor verwendest, bitte beim Speichern als Dateityp "Alle Dateien" wählen oder den Dateinamen unter Anführungszeichen setzen, da ansonsten als "InsertLine.vbs.txt" gespeichert wird.
Wenn Du das Script per Doppelklick startest, wird die bei "SourceFile = ...." eingetragene Datei bearbeitet. Alternativ kannst Du auch eine andere Textdatei auf das Script ziehen.
Falls die Datei gefunden wird, erstellt das Script zunächst eine Sicherungskopie mit dem Originaldateinamen und einem zusätzlichen ".bak", also etwa "D:\Deine Textdatei.txt.bak".
Danach wird zeilenweise die neue Datei erstellt. Eine Zeile, welche "*BEGIN*" oder "*END*" enthält, wird nur als Markierung für Beginn und Ende eines Zeilenblockes betrachtet und selbst nicht in die neue Datei geschrieben.
In alle Zeilen nach einer Zeile mit "*BEGIN*" bis zur Zeile vor einem "*END*" wird an der angegebenen Position (Zeile Pos = ...) der in der Zeile InsertText = "..." festgelegte Text eingefügt, alle anderen Zeilen werden unverändert in die neue Datei übernommen.
Nicht eingefügt wird der Text in Leerzeilen bzw in Zeilen, deren Länge geringer als (Position - 1) ist (bei einem Positionswert von 3 also nicht in eine Zeile, welche nur 1 Zeichen enthält).
Grüße
bastla
Versuch es einmal mit dem folgenden VBScript:
'InsertText.vbs
SourceFile = "D:\Deine Textdatei.txt"
Pos = 3
InsertText = "Programme"
MStart = "*BEGIN*"
MEnd = "*END*"
BakExt = ".bak"
If WScript.Arguments.Count > 0 Then SourceFile = WScript.Arguments(0)
BakFile = SourceFile & BakExt
TargetFile = SourceFile
Set fso = CreateObject("Scripting.FileSystemObject")
If Not fso.FileExists(TargetFile) Then
WScript.Echo TargetFile & " konnte nicht gefunden werden!"
WScript.Quit(1)
End If
If fso.FileExists(BakFile) Then fso.DeleteFile(BakFile)
fso.MoveFile TargetFile, BakFile
Lines = Split(fso.OpenTextFile(BakFile, 1, False).ReadAll, vbCrLF)
Set Target = fso.OpenTextFile(TargetFile, 2, True)
Ins = False
For Each Line In Lines
If InStr(Line, MStart) Then
Ins = True
ElseIf InStr(Line, MEnd) Then
Ins = False
Else
LineNew = Line
If Ins Then If Len(Line) >= (Pos - 1) Then LineNew = Left(Line, Pos - 1) & InsertText & Mid(Line, Pos)
Target.WriteLine LineNew
End If
Next
Target.Close
WScript.Echo "Done."
Speichere (nach ev erforderlichen Anpassungen in den ersten Zeilen bis BakExt = ".bak") das Script mit einem Texteditor unter "InsertLine.vbs" (oder einem Dir sympathischeren Namen ). Falls Du den Windows-Editor verwendest, bitte beim Speichern als Dateityp "Alle Dateien" wählen oder den Dateinamen unter Anführungszeichen setzen, da ansonsten als "InsertLine.vbs.txt" gespeichert wird.
Wenn Du das Script per Doppelklick startest, wird die bei "SourceFile = ...." eingetragene Datei bearbeitet. Alternativ kannst Du auch eine andere Textdatei auf das Script ziehen.
Falls die Datei gefunden wird, erstellt das Script zunächst eine Sicherungskopie mit dem Originaldateinamen und einem zusätzlichen ".bak", also etwa "D:\Deine Textdatei.txt.bak".
Danach wird zeilenweise die neue Datei erstellt. Eine Zeile, welche "*BEGIN*" oder "*END*" enthält, wird nur als Markierung für Beginn und Ende eines Zeilenblockes betrachtet und selbst nicht in die neue Datei geschrieben.
In alle Zeilen nach einer Zeile mit "*BEGIN*" bis zur Zeile vor einem "*END*" wird an der angegebenen Position (Zeile Pos = ...) der in der Zeile InsertText = "..." festgelegte Text eingefügt, alle anderen Zeilen werden unverändert in die neue Datei übernommen.
Nicht eingefügt wird der Text in Leerzeilen bzw in Zeilen, deren Länge geringer als (Position - 1) ist (bei einem Positionswert von 3 also nicht in eine Zeile, welche nur 1 Zeichen enthält).
Grüße
bastla
Hallo Bastla,
ich habe mich auf der Suche nach einem Script, welches Zeilen an eine bestehende Text Datei anknüpft, diesen Forumeintrag egfunden und dachte er könnte mir helfen.
Ich habe dein Script daher für Testzwecke in eine VBS Datei gepackt und an meine Anforderungen angepasst.
Das Script arbeitet auch, sichert die Datei und schreibt Done aber leider fügt er nicht die Zeilen ein.
Am Ende erzeugt er Leerzeilen aber das war es auch.
Das ganze ist zur Zeit eine Testdatei
'InsertText.vbs
SourceFile = "C:\Deine Textdatei.txt"
Pos = 3
InsertText = "Programme"
MStart = "*BEGIN*"
MEnd = "*END*"
BakExt = ".bak"
If WScript.Arguments.Count > 0 Then SourceFile = WScript.Arguments(0)
BakFile = SourceFile & BakExt
TargetFile = SourceFile
Set fso = CreateObject("Scripting.FileSystemObject")
If Not fso.FileExists(TargetFile) Then
WScript.Echo TargetFile & " konnte nicht gefunden werden!"
WScript.Quit(1)
End If
If fso.FileExists(BakFile) Then fso.DeleteFile(BakFile)
fso.MoveFile TargetFile, BakFile
Lines = Split(fso.OpenTextFile(BakFile, 1, False).ReadAll, vbCrLF)
Set Target = fso.OpenTextFile(TargetFile, 2, True)
Ins = False
For Each Line In Lines
If InStr(Line, MStart) Then
Ins = True
ElseIf InStr(Line, MEnd) Then
Ins = False
Else
LineNew = Line
If Ins Then If Len(Line) >= (Pos - 1) Then LineNew = Left(Line, Pos - 1) & InsertText & Mid(Line, Pos)
Target.WriteLine LineNew
End If
Next
Target.Close
WScript.Echo "Done."
Das ist zur zeit der Inhalt meiner Textdatei
hallo
an
alle
leute
von heute
gehen
BEGIN
END
keine
Ahnung
Was mache ich falsch?
Vielen Dank schonmal
ich habe mich auf der Suche nach einem Script, welches Zeilen an eine bestehende Text Datei anknüpft, diesen Forumeintrag egfunden und dachte er könnte mir helfen.
Ich habe dein Script daher für Testzwecke in eine VBS Datei gepackt und an meine Anforderungen angepasst.
Das Script arbeitet auch, sichert die Datei und schreibt Done aber leider fügt er nicht die Zeilen ein.
Am Ende erzeugt er Leerzeilen aber das war es auch.
Das ganze ist zur Zeit eine Testdatei
'InsertText.vbs
SourceFile = "C:\Deine Textdatei.txt"
Pos = 3
InsertText = "Programme"
MStart = "*BEGIN*"
MEnd = "*END*"
BakExt = ".bak"
If WScript.Arguments.Count > 0 Then SourceFile = WScript.Arguments(0)
BakFile = SourceFile & BakExt
TargetFile = SourceFile
Set fso = CreateObject("Scripting.FileSystemObject")
If Not fso.FileExists(TargetFile) Then
WScript.Echo TargetFile & " konnte nicht gefunden werden!"
WScript.Quit(1)
End If
If fso.FileExists(BakFile) Then fso.DeleteFile(BakFile)
fso.MoveFile TargetFile, BakFile
Lines = Split(fso.OpenTextFile(BakFile, 1, False).ReadAll, vbCrLF)
Set Target = fso.OpenTextFile(TargetFile, 2, True)
Ins = False
For Each Line In Lines
If InStr(Line, MStart) Then
Ins = True
ElseIf InStr(Line, MEnd) Then
Ins = False
Else
LineNew = Line
If Ins Then If Len(Line) >= (Pos - 1) Then LineNew = Left(Line, Pos - 1) & InsertText & Mid(Line, Pos)
Target.WriteLine LineNew
End If
Next
Target.Close
WScript.Echo "Done."
Das ist zur zeit der Inhalt meiner Textdatei
hallo
an
alle
leute
von heute
gehen
BEGIN
END
keine
Ahnung
Was mache ich falsch?
Vielen Dank schonmal
Hallo colonetw!
Das Script soll für alle zwischen "*BEGIN*" und "*END*" stehenden Zeilen ab Position 3 (= nach den ersten 2 Zeichen) den Text "Programme" einfügen und die Markierungen "*BEGIN*" und "*END*" entfernen - genau das tut es auch.
Da allerdings in Deiner Testdatei die genannten Markierungen (beachte "*" an Anfang und Ende) schon mal gar nicht enthalten sind (und es darüber hinaus dazwischen auch keine zu ändernden Zeilen gibt), wird tatsächlich nur eine Leerzeile am Ende hinzugefügt (was sich natürlich, bei Bedarf, auch vermeiden lässt).
Vielleicht erklärst Du daher einmal genau, was Du eigentlich mit dem Script erreichen willst.
Grüße
bastla
Das Script soll für alle zwischen "*BEGIN*" und "*END*" stehenden Zeilen ab Position 3 (= nach den ersten 2 Zeichen) den Text "Programme" einfügen und die Markierungen "*BEGIN*" und "*END*" entfernen - genau das tut es auch.
Da allerdings in Deiner Testdatei die genannten Markierungen (beachte "*" an Anfang und Ende) schon mal gar nicht enthalten sind (und es darüber hinaus dazwischen auch keine zu ändernden Zeilen gibt), wird tatsächlich nur eine Leerzeile am Ende hinzugefügt (was sich natürlich, bei Bedarf, auch vermeiden lässt).
Vielleicht erklärst Du daher einmal genau, was Du eigentlich mit dem Script erreichen willst.
Grüße
bastla
Hallo Bastla,
vielen Dank ersteinmal für deine Antwort.
Wir haben hier eine Textdatei, aus der ein programm seine Parameter abliest wie er damit verfahren soll. Wegen eines Schwenks auf ein anderes System müssen nun in jede Datei 2 Zeilen am Ende hinzugeschrieben werden, damit das Programm den Schwenk mitmacht.
Bei mehr als 150 Arbeitsplätzen macht das eine Menge Arbeit. Ich muss so oder so alle einzeln ansteuern und auch noch eine Datei austauschen (das habe ich aber schon gelöst), möchte aber per Script die Einzelarbeiten erledigen lassen.
Dann benötigen wir pro Rechner nur noch 30sec und nicht 5 Minuten.
Wie gesagt es gibt eine Textdatei. Am Ende der Datei sollen 2 Zeilen mit Text eingefügt werden. Ich habe das Script oben so verstanden, dass er nach Wörtern wie Begin und End sucht und dazwischen das Wort einfügt.
Wobei hier noch zu erwähnen ist, dass die Textdatei mit *.ini geschrieben wird.
Kannst du mir dabei auf die Sprünge helfen?
Danke schön
Gruß Thomas
vielen Dank ersteinmal für deine Antwort.
Wir haben hier eine Textdatei, aus der ein programm seine Parameter abliest wie er damit verfahren soll. Wegen eines Schwenks auf ein anderes System müssen nun in jede Datei 2 Zeilen am Ende hinzugeschrieben werden, damit das Programm den Schwenk mitmacht.
Bei mehr als 150 Arbeitsplätzen macht das eine Menge Arbeit. Ich muss so oder so alle einzeln ansteuern und auch noch eine Datei austauschen (das habe ich aber schon gelöst), möchte aber per Script die Einzelarbeiten erledigen lassen.
Dann benötigen wir pro Rechner nur noch 30sec und nicht 5 Minuten.
Wie gesagt es gibt eine Textdatei. Am Ende der Datei sollen 2 Zeilen mit Text eingefügt werden. Ich habe das Script oben so verstanden, dass er nach Wörtern wie Begin und End sucht und dazwischen das Wort einfügt.
Wobei hier noch zu erwähnen ist, dass die Textdatei mit *.ini geschrieben wird.
Kannst du mir dabei auf die Sprünge helfen?
Danke schön
Gruß Thomas
Hallo Coloneltw!
Wenn nur zwei Zeilen am Ende hinzugefügt werden sollen, genügt eigentlich folgender Batch:
Oder, wenn's denn ein VBScript sein soll:
Grüße
bastla
Wenn nur zwei Zeilen am Ende hinzugefügt werden sollen, genügt eigentlich folgender Batch:
@echo off & setlocal
>>D:\Deine.ini echo Zeile1 Zeile1 Zeile1 Zeile1 Zeile1
>>D:\Deine.ini echo Zeile2 Zeile2 Zeile2 Zeile2
Set Datei = CreateObject("Scripting.FileSystemObject").OpenTextFile("D:\Deine.ini", 8)
Datei.WriteLine "Zeile1 Zeile1 Zeile1 Zeile1 Zeile1"
Datei.WriteLine "Zeile2 Zeile2 Zeile2 Zeile2"
Datei.Close
bastla
Hallo Bastla,
vielen Dank hat super funktioniert.
Kann man da eigentlich noch Abfragen reinbauen?
Mein Script ist jetzt soweit fertig und funktioniert auch.
Im ersten Schritt kopiert es eine verknüpfung auf dem Desktop von All Users. Im Zweiten Schritt kopiert es in einen Programmpfad eine dll Datei und im dritten Schritt schreibt es in diese ini Datei diese 4 Zeilen.
Ich muss jetzt aber vor jedem Start zunächst die PC Nummer des Zielsystems manuelle eintragen. Dazu kommt, dass diese Ini Datei auf einem Server liegt, im Homeverzeichnis, und das ist natürlich nicht PC bezogen sondern Userbezogen. Sprich der username muss im Script noch geändert werden (manuell). Um es noch komplizierter zu machen gibt es 2 unterschiedliche Pfade für das Homeverzeichnis. Einige wurden bereits umgestellt andere nicht.
Gibt es eine Möglichkeit, dass mein Script mit Parametern arbeitet und ich diese in einer anderen Datei Pflege?
Sprich in die Parameter Datei müsste folgendes rein:
PC=PC001
Username=test1
Homepfad=siehe Abfrage
Wenn Username im Pfad \\Servername\homeneu\ vorhanden dann nehmen sonst ist Pfad \\servername\username$
Das Script kopiert dann diese beiden Dateien auf den PC, den ich in der Parameter Datei angegeben habe und schreibt diese zeilen in den Pfad den die Parameterdatei ermittelt hat.
Wäre so ein Szenario, ich sage mal, nicht zu aufwendig darstellbar? Meine Kollegen wollen dies alles manuell machen, ich möchte aber meine Scriptfähigkeiten erweitern, da ich diese bestimmt noch öfters benötigen werde und dies sich hier anbietet.
Vielen Dank nochmal für deine bisherigen Antworten und viele Grüße
vielen Dank hat super funktioniert.
Kann man da eigentlich noch Abfragen reinbauen?
Mein Script ist jetzt soweit fertig und funktioniert auch.
Im ersten Schritt kopiert es eine verknüpfung auf dem Desktop von All Users. Im Zweiten Schritt kopiert es in einen Programmpfad eine dll Datei und im dritten Schritt schreibt es in diese ini Datei diese 4 Zeilen.
Ich muss jetzt aber vor jedem Start zunächst die PC Nummer des Zielsystems manuelle eintragen. Dazu kommt, dass diese Ini Datei auf einem Server liegt, im Homeverzeichnis, und das ist natürlich nicht PC bezogen sondern Userbezogen. Sprich der username muss im Script noch geändert werden (manuell). Um es noch komplizierter zu machen gibt es 2 unterschiedliche Pfade für das Homeverzeichnis. Einige wurden bereits umgestellt andere nicht.
Gibt es eine Möglichkeit, dass mein Script mit Parametern arbeitet und ich diese in einer anderen Datei Pflege?
Sprich in die Parameter Datei müsste folgendes rein:
PC=PC001
Username=test1
Homepfad=siehe Abfrage
Wenn Username im Pfad \\Servername\homeneu\ vorhanden dann nehmen sonst ist Pfad \\servername\username$
Das Script kopiert dann diese beiden Dateien auf den PC, den ich in der Parameter Datei angegeben habe und schreibt diese zeilen in den Pfad den die Parameterdatei ermittelt hat.
Wäre so ein Szenario, ich sage mal, nicht zu aufwendig darstellbar? Meine Kollegen wollen dies alles manuell machen, ich möchte aber meine Scriptfähigkeiten erweitern, da ich diese bestimmt noch öfters benötigen werde und dies sich hier anbietet.
Vielen Dank nochmal für deine bisherigen Antworten und viele Grüße
Hallo Coloneltw!
Rein handwerklich würde das etwa so gehen:
Es stellt sich allerdings die Frage, ob das Ganze nicht noch stärker automatisierbar ist (etwa über ein "StartUp"-Script für die Rechner bzw ein userbezogenes "LogOn"-Script, oder eine Parameterdatei, welche im CSV-Format die Daten für alle PC enthält ...).
Noch als Anmerkung:
Falls im Script vorher schon ein "FileSystemObject" erzeugt wurde, ist natürlich die Zeile 4 hinfälllig (und ggf - wenn dafür nicht die Varaiable "fso" verwendet wurde - Zeile 5 bzw Zeile 10 anzupassen).
Der Rest würde dann so aussehen:
Grüße
bastla
Rein handwerklich würde das etwa so gehen:
HomeOld = "\\servername\username$"
HomeNew = "\\Servername\homeneu"
Set fso = CreateObject("Scripting.FileSystemObject")
Param = Split(fso.OpenTextFile("D:\Parameter.txt").ReadAll, vbCrLF)
'jetzt steht in Param(0) die erste Zeile der "D:\Parameter.txt", in Param(1) die 2. Zeile, ...
PC = Param(0)
User = Param(1)
If fso.FolderExists(HomeNew & "\" & User) Then
Home = HomeNew
Else
Home = HomeOld
End If
Noch als Anmerkung:
Falls im Script vorher schon ein "FileSystemObject" erzeugt wurde, ist natürlich die Zeile 4 hinfälllig (und ggf - wenn dafür nicht die Varaiable "fso" verwendet wurde - Zeile 5 bzw Zeile 10 anzupassen).
Der Rest würde dann so aussehen:
Set Datei = fso.OpenTextFile("D:\Deine.ini", 8)
Datei.WriteLine "Zeile1 Zeile1 Zeile1 Zeile1 Zeile1"
Datei.WriteLine "Zeile2 Zeile2 Zeile2 Zeile2"
Datei.Close
bastla
ok das habe ich soweit verstanden. Ich habe jetzt mal auf meinem Testsystem eine Parameter.txt angelegt
In dieser steht jetzt nur das drin
internet_pc
test1
dann habe ich eine Script.vbs geschrieben, die jetzt auf das testsystem eingestellt ist
01. HomeOld = "\\internet_pc\username$" --> der username ist bei Homeold ja Username$ aber halt Username=User und dann halt ein $ dahinter. Das sind Freigaben. Bei den alten Homeeinstellungen hat jeder User seine eigene Freigabe als Username$. Bei den neuen Home gibt es eine Freigabe namens homeneu und dahinter dann den Ordner für den User - wie bei ADS halt üblich.
02. HomeNew = "\\internet_pc\homeneu"
03. Set fso = CreateObject("Scripting.FileSystemObject")
04. Param = Split(fso.OpenTextFile("C:\Script\Parameter.txt").ReadAll, vbCrLF)
05. 'jetzt steht in Param(0) die erste Zeile der "C:\Script\Parameter.txt", in Param(1) die 2. Zeile, ...
06. PC = Param(0)
07. User = Param(1)
08.
09. If fso.FolderExists(HomeNew & "\" & User) Then
10. Home = HomeNew
11. Else
12. Home = HomeOld
13. End If
14.
15. Set Datei = fso.OpenTextFile("home\notes.ini", 8) --> genau hier komme ich nicht ganz klar, weil da müsste ja als Pfad der drin stehen den ich zuvor per Abfrage heraushole also home\notes.ini
16. Datei.WriteLine "Zeile1 Zeile1 Zeile1 Zeile1 Zeile1"
17. Datei.WriteLine "Zeile2 Zeile2 Zeile2 Zeile2"
18. Datei.Close
Ich kann ja nochmal kurz das ganze Wunschscript posten
Parameterdatei
PC="PCNAME"
USER="USERNAME"
Scrip
kopiere Datei1 nach \\PC\C$\Programme\...\
kopiere Datei2 nach \\PC\Dokumente und Einstellungen\All Users\Desktop\
HomeOld = "\\servername" --> bestehend aus USER + $ also (HomeOld & "\" & USER & "$")
HomeNew = "\\servername\homeneu"
If fso.FolderExists(HomeNew & "\" & USER) Then
Home = HomeNew
Else
Home = HomeOld
End If
Set Datei = fso.OpenTextFile("home\notes.ini", 8) --> die Datei vom Abfragepfad
Datei.WriteLine "Zeile1 Zeile1 Zeile1 Zeile1 Zeile1"
Datei.WriteLine "Zeile2 Zeile2 Zeile2 Zeile2"
Datei.Close
Ich hoffe ich konnte mich einigermaßen verständlich ausdrücken
Vielen Dank
Gruß Thomas
In dieser steht jetzt nur das drin
internet_pc
test1
dann habe ich eine Script.vbs geschrieben, die jetzt auf das testsystem eingestellt ist
01. HomeOld = "\\internet_pc\username$" --> der username ist bei Homeold ja Username$ aber halt Username=User und dann halt ein $ dahinter. Das sind Freigaben. Bei den alten Homeeinstellungen hat jeder User seine eigene Freigabe als Username$. Bei den neuen Home gibt es eine Freigabe namens homeneu und dahinter dann den Ordner für den User - wie bei ADS halt üblich.
02. HomeNew = "\\internet_pc\homeneu"
03. Set fso = CreateObject("Scripting.FileSystemObject")
04. Param = Split(fso.OpenTextFile("C:\Script\Parameter.txt").ReadAll, vbCrLF)
05. 'jetzt steht in Param(0) die erste Zeile der "C:\Script\Parameter.txt", in Param(1) die 2. Zeile, ...
06. PC = Param(0)
07. User = Param(1)
08.
09. If fso.FolderExists(HomeNew & "\" & User) Then
10. Home = HomeNew
11. Else
12. Home = HomeOld
13. End If
14.
15. Set Datei = fso.OpenTextFile("home\notes.ini", 8) --> genau hier komme ich nicht ganz klar, weil da müsste ja als Pfad der drin stehen den ich zuvor per Abfrage heraushole also home\notes.ini
16. Datei.WriteLine "Zeile1 Zeile1 Zeile1 Zeile1 Zeile1"
17. Datei.WriteLine "Zeile2 Zeile2 Zeile2 Zeile2"
18. Datei.Close
Ich kann ja nochmal kurz das ganze Wunschscript posten
Parameterdatei
PC="PCNAME"
USER="USERNAME"
Scrip
kopiere Datei1 nach \\PC\C$\Programme\...\
kopiere Datei2 nach \\PC\Dokumente und Einstellungen\All Users\Desktop\
HomeOld = "\\servername" --> bestehend aus USER + $ also (HomeOld & "\" & USER & "$")
HomeNew = "\\servername\homeneu"
If fso.FolderExists(HomeNew & "\" & USER) Then
Home = HomeNew
Else
Home = HomeOld
End If
Set Datei = fso.OpenTextFile("home\notes.ini", 8) --> die Datei vom Abfragepfad
Datei.WriteLine "Zeile1 Zeile1 Zeile1 Zeile1 Zeile1"
Datei.WriteLine "Zeile2 Zeile2 Zeile2 Zeile2"
Datei.Close
Ich hoffe ich konnte mich einigermaßen verständlich ausdrücken
Vielen Dank
Gruß Thomas
Hallo Coloneltw!
Kurz vorweg: Verwende bitte zum Posten von Scripts ...
Da ich leider den alten Basis-"Home"-Pfad falsch interpretiert hatte, sollte das eher so aussehen:
Jetzt ist auch in "Home" tatsächlich der user-spezifische Pfad (und nicht, wie vorher, nur der Basis-Pfad) enthalten.
Grüße
bastla
[Edit] "$" in Zeile 7 richtig gestellt [/Edit]
Kurz vorweg: Verwende bitte zum Posten von Scripts ...
Da ich leider den alten Basis-"Home"-Pfad falsch interpretiert hatte, sollte das eher so aussehen:
HomeOld = "\\servername" --> bestehend aus USER + $ also (HomeOld & "\" & USER & "$")
HomeNew = "\\servername\homeneu"
If fso.FolderExists(HomeNew & "\" & USER) Then
Home = HomeNew & "\" & USER
Else
Home = HomeOld & "\" & USER & "$"
End If
Set Datei = fso.OpenTextFile(Home & "\notes.ini", 8) --> die Datei vom Abfragepfad
Datei.WriteLine "Zeile1 Zeile1 Zeile1 Zeile1 Zeile1"
Datei.WriteLine "Zeile2 Zeile2 Zeile2 Zeile2"
Datei.Close
Grüße
bastla
[Edit] "$" in Zeile 7 richtig gestellt [/Edit]
Hallo Bastla,
vielen Dank für deine Geduld, das hat prima funktioniert. Ich habe jetzt im Internet noch ein wenig gestöbert um auch das Kopieren von ein paar Dateien mit in das Script einzuarbeiten. Er sagt mir allerdings das er den Pfad nicht finden kann.
die letzte Zeile sagt ja, dass er die Datei in den Zielpfad kopieren soll. Nun ist der Zielpfad das Objekt von oben namens "Notes". Habe ich was übersehen?
Gruß Thomas
vielen Dank für deine Geduld, das hat prima funktioniert. Ich habe jetzt im Internet noch ein wenig gestöbert um auch das Kopieren von ein paar Dateien mit in das Script einzuarbeiten. Er sagt mir allerdings das er den Pfad nicht finden kann.
HomeOld = "\\internet_pc"
HomeNew = "\\internet_pc\homeneu"
desktop = "\\" & PC & "\c$\Dokumente und Einstellungen\All Users\Desktop\"
notes = "\\" & PC & "\c$\Programme\lotus\notes\"
Set fso = CreateObject("Scripting.FileSystemObject")
Param = Split(fso.OpenTextFile("C:\Script\Parameter.txt").ReadAll, vbCrLF)
'jetzt steht in Param(0) die erste Zeile der "C:\Script\Parameter.txt", in Param(1) die 2. Zeile, ...
PC = Param(0)
User = Param(1)
If fso.FolderExists(HomeNew & "\" & User) Then
Home = HomeNew & "\" & USER
Else
Home = HomeOld & "\" & USER & "$"
End If
Set Datei = fso.OpenTextFile(home & "\notes.ini", 8)
Datei.WriteLine "Zeile1 Zeile1 Zeile1 Zeile1 Zeile1"
Datei.WriteLine "Zeile2 Zeile2 Zeile2 Zeile2"
Set fso = CreateObject("Scripting.FileSystemObject")
Set f1 = fso.GetFile("C:\script\mc.dll")
f1.copy("notes")
Datei.Close
die letzte Zeile sagt ja, dass er die Datei in den Zielpfad kopieren soll. Nun ist der Zielpfad das Objekt von oben namens "Notes". Habe ich was übersehen?
Gruß Thomas
Hallo Coloneltw!
Abgesehen davon kann das Kopieren aber selbst dann noch nicht funktionieren, da Du bereits in Zeile 4 (und 3) eine Variable (PC) zu verwenden versuchst, die ihren Wert erst in Zeile 10 erhält - der Pfad wäre daher:
Um das zu überprüfen, kannst Du (für die Testphase) eine Zeile
vor der "copy"-Zeile einfügen und so den Zielpfad anzeigen lassen.
Noch einige Anmerkungen:
Grüße
bastla
Nun ist der Zielpfad das Objekt von oben namens "Notes".
... allerdings nur, wenn Du die Anführungszeichen entfernst, da ansonsten das Ziel eben "Notes" heißt (Unterschied Variable und Konstante) ...Abgesehen davon kann das Kopieren aber selbst dann noch nicht funktionieren, da Du bereits in Zeile 4 (und 3) eine Variable (PC) zu verwenden versuchst, die ihren Wert erst in Zeile 10 erhält - der Pfad wäre daher:
"\\\c$\Programme\lotus\notes\"
WScript.Echo "notes=" & notes
Noch einige Anmerkungen:
- Sobald Du mit dem Schreiben in die "notes.ini" fertig bist, sollte die Datei geschlossen werden - daher "Datei.Close" in die Zeile 22 verschieben.
- Der oben schon angeführte Hinweis, dass Du ein "FileSystemObject" nicht mehrmals erzeugen musst, gilt auch für die Zeile 23 - diese kannst Du ersatzlos streichen (siehe Zeile 7).
- Falls Du sie noch nicht haben solltest: Die Hilfedatei "script56.chm" für VBS (in einer deutschen Fassung) gibt es zB auf dieser Seite von "dieseyer.de".
Grüße
bastla