Variable in eine andere Datei schreiben
Hallo zusammen.
Erstmal mein Beispiel:
ECHO OFF
Find /i "Username=" test.txt
if errorlevel 1 goto notfound
set /p testvar=
:notfound
So geht es leider nicht:
ECHO OFF
Find /i "Username=" test.txt
if errorlevel 1 goto notfound
set /p testvar=
ECHO %testvar% Find /i "Username=%testvar%" test.txt >> test.txt
:notfound
Ich möchte die Variable %testvar% in eine andere Datei schreiben. In dieser Datei soll "Username=" durch die Eingabe ergänzt werden. Also "Username=eingabe" Wie ist das möglich? Vielen Dank für eure Antworten.
Erstmal mein Beispiel:
ECHO OFF
Find /i "Username=" test.txt
if errorlevel 1 goto notfound
set /p testvar=
:notfound
So geht es leider nicht:
ECHO OFF
Find /i "Username=" test.txt
if errorlevel 1 goto notfound
set /p testvar=
ECHO %testvar% Find /i "Username=%testvar%" test.txt >> test.txt
:notfound
Ich möchte die Variable %testvar% in eine andere Datei schreiben. In dieser Datei soll "Username=" durch die Eingabe ergänzt werden. Also "Username=eingabe" Wie ist das möglich? Vielen Dank für eure Antworten.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 64750
Url: https://administrator.de/forum/variable-in-eine-andere-datei-schreiben-64750.html
Ausgedruckt am: 19.05.2025 um 10:05 Uhr
22 Kommentare
Neuester Kommentar
Hallo saschato und willkommen im Forum!
Darf ich Deine Frage so interpretieren, dass es in der Zieldatei bereits eine Zeile "Username=" gibt, die auf "Username=Inhalt von %testvar%" geändert werden soll? Und falls ja, soll diese Zeile vermutlich an der selben Position innerhalb der Datei bleiben und nicht erst am Ende angefügt werden?
In diesem Fall könnte der relevante Teil des Batches etwa so aussehen:
Hilfreich wäre es natürlich, wenn Du Näheres zum weiteren Inhalt der "test.txt" bekanntgeben würdest. Wären etwa Leerzeilen, die erhalten bleiben müssen, vorhanden, reicht diese knappe Variante nicht aus ...
Grüße
bastla
Darf ich Deine Frage so interpretieren, dass es in der Zieldatei bereits eine Zeile "Username=" gibt, die auf "Username=Inhalt von %testvar%" geändert werden soll? Und falls ja, soll diese Zeile vermutlich an der selben Position innerhalb der Datei bleiben und nicht erst am Ende angefügt werden?
In diesem Fall könnte der relevante Teil des Batches etwa so aussehen:
set /p testvar=
for /f "delims=" %%i in (test.txt) do echo %%i|findstr /b "Username=">nul && echo Username=%testvar%>>testneu.txt || echo %%i>>testneu.txt
move testneu.txt test.txt
Hilfreich wäre es natürlich, wenn Du Näheres zum weiteren Inhalt der "test.txt" bekanntgeben würdest. Wären etwa Leerzeilen, die erhalten bleiben müssen, vorhanden, reicht diese knappe Variante nicht aus ...
Grüße
bastla
Hallo saschato!
Eigentlich wind wir damit schon bei einer ganz anderen Frage angelangt ...
Ersetze die Eingabezeile durch:
So finde ich's auch schöner ...
Grüße
bastla
Eigentlich wind wir damit schon bei einer ganz anderen Frage angelangt ...
Ersetze die Eingabezeile durch:
set "Ein=%temp%\Eingabe.vbs"
echo A=InputBox("Bitte Mailadresse eingeben!"):For i=1 To Len(A):B=B^&Mid(A,i,1)^&" ":Next:WScript.Echo B>"%Ein%"
for /f "delims=" %%i in ('cscript //nologo "%Ein%"') do set "tempvar=%%i"
del "%Ein%"
So finde ich's auch schöner ...
Grüße
bastla
Moin saschato,
ich würde da nicht so einen Heckmeck von machen...
Wenn Deine AppRegUpdate.pdb wirklich so aussieht oder zumindest so beginnt wie oben gepostet, dann kannst Du
[Demo am CmdPrompt]
Die einzigen neuen Details, die ich reingebracht habe sind..
1.---> set /p pdbInhalt=<AppRegUpdate.pdb
Liest den Inhalt einer Datei bis zum ersten CRLF/Zeilenumbruch ODER zum ersten 0x00
2.---> echo %pdbinhalt: =%
Ersetze in der Variablen %pdbInhalt% alle Leerzeichen durch nichts.
[3. ---> echo %pdbinhalt: =%|find /i "USR@test.com"
Diesen Test 3. solltest Du zur Kontrolle am CMD-Prompt machen...]
Wir müssen doch nicht immer mit so großen Kanonen auf so kleine Spatzen usw. usw....
Grüße
Biber
ich würde da nicht so einen Heckmeck von machen...
Wenn Deine AppRegUpdate.pdb wirklich so aussieht oder zumindest so beginnt wie oben gepostet, dann kannst Du
- Deine Variable OHNE Leerzeichen vom Benutzer eingeben lassen
- in den Dateien AppRegUpdate.pdb und text.txt wie folgt prüfen:
[Demo am CmdPrompt]
(=19:28:08 D:\temp=)
>set /p pdbInhalt=<AppRegUpdate.pdb
(=19:28:12 D:\temp=)
>echo %pdbinhalt: =%|find /i "USR@test.com">nul && @echo Ja, USR@test.com gefunden
Ja, USR@test.com gefunden
Die einzigen neuen Details, die ich reingebracht habe sind..
1.---> set /p pdbInhalt=<AppRegUpdate.pdb
Liest den Inhalt einer Datei bis zum ersten CRLF/Zeilenumbruch ODER zum ersten 0x00
2.---> echo %pdbinhalt: =%
Ersetze in der Variablen %pdbInhalt% alle Leerzeichen durch nichts.
[3. ---> echo %pdbinhalt: =%|find /i "USR@test.com"
Diesen Test 3. solltest Du zur Kontrolle am CMD-Prompt machen...]
Wir müssen doch nicht immer mit so großen Kanonen auf so kleine Spatzen usw. usw....
Grüße
Biber
@Biber
Die eingegebene Adresse soll ebenfalls nach jedem Zeichen ein Chr(0) bekommen und der Rest muss natürlich auch in diesem Format bleiben.
Ich bastle gerade an einem VBScript, das dann hoffentlich auch diesen Vogel abschießen wird.
Grüße
bastla
Wir müssen doch nicht immer mit so großen Kanonen auf so kleine Spatzen...
... ist allerdings ein größerer Vogel: Die Leerstellen sind in Wirklichkeit Chr(0), und diverse Chr(4) sind auch noch eingestreut (insgesamt schaut's nach Unicode aus, womit ich mich bisher allerdings noch nicht herumgeschlagen hatte).Die eingegebene Adresse soll ebenfalls nach jedem Zeichen ein Chr(0) bekommen und der Rest muss natürlich auch in diesem Format bleiben.
Ich bastle gerade an einem VBScript, das dann hoffentlich auch diesen Vogel abschießen wird.
Grüße
bastla
@Biber
).
Grüße
bastla
... ein professionelleres Kaliber..
Dass noch jemand mit sowas vorbeikommt, wage ich eigentlich nicht zu hoffen, also werd' doch ich es machen (mit meinem Amateur-VBS, und hoffentlich noch bevor ich mein ganzes Pulver verschossen habe Grüße
bastla
Hallo saschato!
Auf Basis der mir übermittelten "AppRegUpdate.pdb" sollte das folgende VB-Script den Eintrag einer neuen Mail-Adresse bewerkstelligen:
Speichere das Script zB unter "C:\Scripts\Eintragen.vbs". Verwenden kannst Du es am einfachsten, indem Du die Datei "AppRegUpdate.pdb" auf die Script-Datei oder eine Verknüpfung zu dieser ziehst. Alternativ kann es auch aus einem Batch wie folgt gestartet werden:
In beiden Fällen wird nach einer Mail-Adresse gefragt, diese (oberflächlich) geprüft ("@" enthalten, folgt nach "@" im Abstand von mehr als 2 Zeichen noch ein ".") und in die Ausgangsdatei integriert. Die Originaldatei wird dabei als "AppRegUpdate.pdb.bak" im gleichen Ordner belassen. Falls dies nicht gewünscht sein sollte, einfach die kursiv formatierten Zeilen entfernen.
Grüße
bastla
P.S.: Da derzeit die Code-Formatierung des Forums nicht ordnungsgemäß funktioniert, habe ich den Script-Code auf 3 Blöcke aufgeteilt - diese bitte im Editor zusammenfügen.
Auf Basis der mir übermittelten "AppRegUpdate.pdb" sollte das folgende VB-Script den Eintrag einer neuen Mail-Adresse bewerkstelligen:
AppRegUpdate-Patch.vbs
sBegin = Replace("U S R @ c o g n i s . c o m ", " ", Chr(0))'Platzhalter für Chr(0) sind Leerstellen
iLen = Len(sBegin)
If WScript.Arguments.Count < 1 Then
MsgBox "Zu bearbeitende Datei mit vollständigem Pfad als Argument übergeben!", vbCritical
WScript.Quit(1)
End If
sFile = WScript.Arguments(0)
Set fso = WScript.CreateObject("Scripting.FileSystemObject")
If Not fso.FileExists(sFile) Then
MsgBox "Datei wurde nicht gefunden - bitte mit vollständigem Pfad angeben!", vbCritical
WScript.Quit(1)
End If
sFileNameWithExt = fso.GetFile(sFile).Name
If InstrRev(sFileNameWithExt, ".") Then
sFileName = Left(sFileNameWithExt, InstrRev(sFileNameWithExt, ".") - 1)
Else
sFileName = sFileNameWithExt
End If
sOldFile = sFile & ".bak"
sOldFileName = sFileNameWithExt & ".bak"
'gesamte Datei in binDataOld einlesen
lSize = fso.GetFile(sFile).Size
Set oOldFile = fso.OpenTextFile(sFile, 1)
binDataOld = oOldFile.Read(lSize)
oOldFile.Close
If Instr(binDataOld, sBegin) Then 'String gefunden
'Eingabe Mailadresse
sMailAdr = InputBox("Bitte Mailadresse eingeben!")
Do 'Ein wenig auf Plausibilität prüfen ...
ok = True
If sMailAdr = "" Then 'Keine Eingabe bzw Abbruch
MsgBox "Bearbeitung abgebrochen!", vbExclamation
WScript.Quit(1)
End If
P1 = Instr(sMailAdr, "@")
If P1 <=1 Then
ok = False
Else
P2 = InstrRev(sMailAdr, ".")
If P2 < (P1 + 3) Then ok = False
End If
If Not ok Then sMailAdr = InputBox("Bitte eine gültige Mailadresse eingeben!")
Loop Until ok
'Mailadresse umformatieren
For i = 1 To Len(sMailAdr)
sReplace = sReplace & Mid(sMailAdr, i, 1) & Chr(0)
Next
//'ev bereits vorhandene Sicherungskopie löschen
If fso.FileExists(sOldFile) Then fso.DeleteFile(sOldFile)
'Datei umbenennen (als Sicherungskopie behalten)
Set oOldFile = fso.GetFile(sFile)
oOldFile.Name = sOldFileName//
'neue Datei erstellen
Set oNewFile = fso.OpenTextFile(sFile, 2, True)
oNewFile.Write Replace(binDataOld, sBegin, sReplace, 1, 1)
oNewFile.Close
MsgBox "Adresse eingetragen!"
Else
MsgBox "Datei enthält nicht die erforderliche Kennung!", vbCritical
End If
Speichere das Script zB unter "C:\Scripts\Eintragen.vbs". Verwenden kannst Du es am einfachsten, indem Du die Datei "AppRegUpdate.pdb" auf die Script-Datei oder eine Verknüpfung zu dieser ziehst. Alternativ kann es auch aus einem Batch wie folgt gestartet werden:
"C:\Scripts\Eintragen.vbs" "D:\AppRegUpdate.pdb"
Grüße
bastla
P.S.: Da derzeit die Code-Formatierung des Forums nicht ordnungsgemäß funktioniert, habe ich den Script-Code auf 3 Blöcke aufgeteilt - diese bitte im Editor zusammenfügen.
Hallo saschato!
Es wird überprüft, ob
in der Datei enthalten ist, da ja dieser Teil ersetzt werden soll. Mit der "AppRegUpdate.pdb" aus Deiner Mail funktioniert es - sobald allerdings eine andere Mail-Adresse eingetragen ist, wird eben die Kennung nicht mehr gefunden.
Grüße
bastla
Es wird überprüft, ob
U S R @ c o g n i s . c o m
Grüße
bastla
Hallo saschato!
Eigentlich sollte beim zweiten Durchlauf die Kennung ja ohnehin nicht mehr gefunden werden ...
Unabhängig davon müsstest Du aber nur den folgenden fetten Teil zwischen den unfetten Zeilen einfügen:
Grüße
bastla
Eigentlich sollte beim zweiten Durchlauf die Kennung ja ohnehin nicht mehr gefunden werden ...
Unabhängig davon müsstest Du aber nur den folgenden fetten Teil zwischen den unfetten Zeilen einfügen:
sOldFileName = sFileNameWithExt & ".bak"
<b>If fso.FileExists(sOldFile) Then
MsgBox "Datei wurde bereits bearbeitet!", vbCritical
WScript.Quit(1)
End If</b>
'gesamte Datei in binDataOld einlesen
Grüße
bastla