Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Variable in eine andere Datei schreiben

Frage Entwicklung Batch & Shell

Mitglied: saschato

saschato (Level 1) - Jetzt verbinden

26.07.2007, aktualisiert 27.07.2007, 4631 Aufrufe, 22 Kommentare

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.
Mitglied: bastla
26.07.2007 um 12:30 Uhr
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:
01.
set /p testvar= 
02.
for /f "delims=" %%i in (test.txt) do echo %%i|findstr /b "Username=">nul && echo Username=%testvar%>>testneu.txt || echo %%i>>testneu.txt 
03.
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
Bitte warten ..
Mitglied: saschato
26.07.2007 um 13:17 Uhr
Super bin schonmal auf dem Richtigen wege! Danke dir nur noch ein Problem meine Datei heisst AppRegUpdate.pdb und das Format sieht so aus:

H S T   P F   S T A T   G E N H E L P G E N N A C N G E N D C T N H S T / D E F F M X M P 0 1 O B M G : 5 0 0 1 : 0 R C N T 1 H S T / D E F X M X M P 0 5 O B M G : 5 0 0 1 : 0 H O S T K E Y P F C T T 1 X F C U R 0 P F H N D 1 0 0 0 0 0 P F D e f a u l t 0 P F / 0 C N C H P S N P F / 0 C N S V P S Y P F / 0 H S T D E F F M X X P 0 5 O B M G : 5 0 0 1 : 0 P F / 0 M E T H A c t i v e S y n c L i n k P F / 0 P N M D e f a u l t P F / 0 S S O Y P F / 0 S V P S Y P F / 0 U S R @ t e s t . c o m  O P E N P I M C F G P F   P F / 0 / C T C N T 0 P F / 0 / N D C N T 0 P F / 0 P N M D e f a u l t P F C N T 1 P F C U R D e f a u l t P F D e f a u l t 0 P F H N D S 1 0 0 0 0 0 0 0  C L O S E P I M C F G

Habe deinen Vorschlag nun so editiert:

ECHO OFF
Find /i "U S R @ c o g n i s . c o m" AppRegUpdate.pdb
if errorlevel 1 goto notfound
set /p testvar=
for /f "delims=" %%i in (test.txt) do echo %%i|findstr /b "U S R @ t e s t . c o m">nul && echo U S R=%testvar%>>testneu.txt || echo %%i>>testneu.txt
move testneu.txt AppRegUpdate.pdb
:notfound

So nun ist meine Variable die ich Eingebe aber ohne die Leerzeichen also test@test.com und nicht t e s t @ t e s t . c o m Hättest du noch eine Idee wie ich das hinbekomme? Dann hättest du mir wirklich total geholfen. Vielen Dank
Bitte warten ..
Mitglied: bastla
26.07.2007 um 13:59 Uhr
Hallo saschato!

Versuch es mal so:
01.
set /p "testvar=Adresse eingeben_"
Den Text nach dem "=" kannst Du natürlich auch weglassen, wichtig ist nur das schließende Anführungszeichen.

Grüße
bastla
Bitte warten ..
Mitglied: saschato
26.07.2007 um 14:02 Uhr
Nun habe ich nach dem String ein Leerzeichen aber leider nicht zwischen jedem Buchstaben.
Bitte warten ..
Mitglied: bastla
26.07.2007 um 14:05 Uhr
Hallo saschato!

Wenn Du die Leerzeichen eingibst, müssten sie auch rausgeschrieben werden (funktioniert zumindest bei mir so).

Grüße
bastla
Bitte warten ..
Mitglied: saschato
26.07.2007 um 14:07 Uhr
Das Funktioniert bei mir auch. Aber leider ist das Batch für User gedacht und das zu Erklären ist zu kompliziert die sollen einfach normal ihre E-Mail Adresse eintragen. Also muss ich das Format im Batch ändern.
Bitte warten ..
Mitglied: bastla
26.07.2007 um 14:22 Uhr
Hallo saschato!

Eigentlich wind wir damit schon bei einer ganz anderen Frage angelangt ...

Ersetze die Eingabezeile durch:
01.
set "Ein=%temp%\Eingabe.vbs" 
02.
echo A=InputBox("Bitte Mailadresse eingeben!"):For i=1 To Len(A):B=B^&Mid(A,i,1)^&" ":Next:WScript.Echo B>"%Ein%" 
03.
for /f "delims=" %%i in ('cscript //nologo "%Ein%"') do set "tempvar=%%i" 
04.
del "%Ein%"
So finde ich's auch schöner ...

Grüße
bastla
Bitte warten ..
Mitglied: saschato
26.07.2007 um 14:36 Uhr
Danke für deine Antwort nur wo wird das nun gespeichert? Sorry bin nicht so fit im Programmieren. sorry hab es hinbekommen. Vielen Dank
Bitte warten ..
Mitglied: saschato
26.07.2007 um 14:44 Uhr
So die letzte Frage an dich hoffentlich Vielen dank übrigens !!! momentan wird U S R =eingabe ich brauche aber doch USR eingabe also ohne gleich welches ist das in deinem code?

ICH HAB ES GESCHAFFT
Bitte warten ..
Mitglied: bastla
26.07.2007 um 14:56 Uhr
Hallo saschato!

Das freut.

Grüße
bastla
Bitte warten ..
Mitglied: saschato
26.07.2007 um 15:50 Uhr
Hallo bastla gibt es die Möglichkeit das ich dir die AppRegUpdate.pdb mal zusende? Er findet den String nicht da die Datei so ein komisches Format hat. Melde dich doch mal wäre nett. Vielen Dank
Bitte warten ..
Mitglied: Biber
26.07.2007 um 19:42 Uhr
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
  • Deine Variable OHNE Leerzeichen vom Benutzer eingeben lassen
  • in den Dateien AppRegUpdate.pdb und text.txt wie folgt prüfen:

[Demo am CmdPrompt]
01.
(=19:28:08  D:\temp=) 
02.
>set /p pdbInhalt=<AppRegUpdate.pdb 
03.
 
04.
(=19:28:12  D:\temp=) 
05.
>echo %pdbinhalt: =%|find /i "USR@test.com">nul && @echo Ja, USR@test.com gefunden 
06.
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
Bitte warten ..
Mitglied: bastla
26.07.2007 um 19:54 Uhr
@Biber

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
Bitte warten ..
Mitglied: Biber
26.07.2007 um 20:08 Uhr
Moin bastla,

ich hatte es fast befürchtet... ich habe ja nur mit dem im Forum geposteten Ausschnitt der .pdb-Datei gespielt.
Und dort sind dann wohl alle Chars < 32 und <> 9 zu Spaces konvertiert worden.

Na ja.... dann nehmen wir halt ein professionelleres Kaliber.. *Vortritt lass*

Schönen Abend
Biber
Bitte warten ..
Mitglied: bastla
26.07.2007 um 20:22 Uhr
@Biber

... 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
Bitte warten ..
Mitglied: bastla
26.07.2007 um 21:14 Uhr
Hallo saschato!

Auf Basis der mir übermittelten "AppRegUpdate.pdb" sollte das folgende VB-Script den Eintrag einer neuen Mail-Adresse bewerkstelligen:

01.
AppRegUpdate-Patch.vbs 
02.
sBegin = Replace("U S R   @ c o g n i s . c o m ", " ", Chr(0))'Platzhalter für Chr(0) sind Leerstellen 
03.
iLen = Len(sBegin) 
04.
 
05.
If WScript.Arguments.Count < 1 Then 
06.
	MsgBox "Zu bearbeitende Datei mit vollständigem Pfad als Argument übergeben!", vbCritical 
07.
	WScript.Quit(1) 
08.
End If 
09.
sFile = WScript.Arguments(0) 
10.
Set fso = WScript.CreateObject("Scripting.FileSystemObject") 
11.
If Not fso.FileExists(sFile) Then 
12.
	MsgBox "Datei wurde nicht gefunden - bitte mit vollständigem Pfad angeben!", vbCritical 
13.
	WScript.Quit(1)	 
14.
End If 
15.
sFileNameWithExt = fso.GetFile(sFile).Name 
16.
If InstrRev(sFileNameWithExt, ".") Then 
17.
	sFileName = Left(sFileNameWithExt, InstrRev(sFileNameWithExt, ".") - 1) 
18.
Else 
19.
	sFileName = sFileNameWithExt 
20.
End If 
21.
sOldFile = sFile & ".bak" 
22.
sOldFileName = sFileNameWithExt & ".bak"

01.
'gesamte Datei in binDataOld einlesen 
02.
lSize = fso.GetFile(sFile).Size 
03.
Set oOldFile = fso.OpenTextFile(sFile, 1) 
04.
binDataOld = oOldFile.Read(lSize) 
05.
oOldFile.Close 
06.
If Instr(binDataOld, sBegin) Then 'String gefunden 
07.
	'Eingabe Mailadresse 
08.
	sMailAdr = InputBox("Bitte Mailadresse eingeben!") 
09.
	Do 'Ein wenig auf Plausibilität prüfen ... 
10.
		ok = True 
11.
		If sMailAdr = "" Then 'Keine Eingabe bzw Abbruch 
12.
			MsgBox "Bearbeitung abgebrochen!", vbExclamation 
13.
			WScript.Quit(1)  
14.
		End If 
15.
		P1 = Instr(sMailAdr, "@") 
16.
		If P1 <=1 Then 
17.
			ok = False 
18.
		Else 
19.
			P2 = InstrRev(sMailAdr, ".") 
20.
			If P2 < (P1 + 3) Then ok = False 
21.
		End If 
22.
		If Not ok Then sMailAdr = InputBox("Bitte eine gültige Mailadresse eingeben!") 
23.
	Loop Until ok

01.
	'Mailadresse umformatieren 
02.
	For i = 1 To Len(sMailAdr) 
03.
		sReplace = sReplace & Mid(sMailAdr, i, 1) & Chr(0) 
04.
	Next 
05.
	 
06.
	//'ev bereits vorhandene Sicherungskopie löschen 
07.
	If fso.FileExists(sOldFile) Then fso.DeleteFile(sOldFile) 
08.
	 
09.
	'Datei umbenennen (als Sicherungskopie behalten) 
10.
	Set oOldFile = fso.GetFile(sFile) 
11.
	oOldFile.Name = sOldFileName// 
12.
		 
13.
	'neue Datei erstellen 
14.
	Set oNewFile = fso.OpenTextFile(sFile, 2, True) 
15.
	oNewFile.Write Replace(binDataOld, sBegin, sReplace, 1, 1) 
16.
	oNewFile.Close 
17.
	MsgBox "Adresse eingetragen!" 
18.
Else 
19.
	MsgBox "Datei enthält nicht die erforderliche Kennung!", vbCritical 
20.
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:
01.
"C:\Scripts\Eintragen.vbs" "D:\AppRegUpdate.pdb"
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.
Bitte warten ..
Mitglied: saschato
27.07.2007 um 10:12 Uhr
Hallo Bastla Vielen Dank,

Nur leider kommt bei dir Fehlermeldung "Datei enthält nicht die erforderliche Kennung!" Noch ne Ahnung woran das liegen kann?
Bitte warten ..
Mitglied: bastla
27.07.2007 um 11:23 Uhr
Hallo saschato!

Es wird überprüft, ob
01.
U S R @ c o g n i s . c o m
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
Bitte warten ..
Mitglied: saschato
27.07.2007 um 11:24 Uhr
Ja das hab ich gelöst hab dir noch per E-Mail ne Fehlermeldung gesendet die jetzt kommt wenn es gefunden wird.
Bitte warten ..
Mitglied: saschato
27.07.2007 um 12:28 Uhr
Vielen Vielen Dank an bastla. So einen hilfsbereiten User in einem Forum hab ich noch nie gefunden! Er hat mir sehr geholfen und nun Funktioniert es Ein Schönes Wochenende wünsch ich dir und falls du mal fragen in Richtung Mobility hast bin ich für die da Bye
Bitte warten ..
Mitglied: saschato
27.07.2007 um 12:42 Uhr
Hi Bastla,

Ich schon wieder Ist es noch möglich das dein Script prüft ob die Datei AppRegUpdate.pdb.bak verfügbar ist und wenn ja es nicht ausgeführt wird ? Weil wenn es nun mehrfach ausführe gibt es Probleme. Danke dir
Bitte warten ..
Mitglied: bastla
27.07.2007 um 15:19 Uhr
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:
01.
sOldFileName = sFileNameWithExt & ".bak" 
02.
 
03.
<b>If fso.FileExists(sOldFile) Then 
04.
	MsgBox "Datei wurde bereits bearbeitet!", vbCritical 
05.
	WScript.Quit(1)	 
06.
End If</b> 
07.
 
08.
'gesamte Datei in binDataOld einlesen
Grüße
bastla
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Batch & Shell
gelöst 2 große TXT Dateien vergleichen und Unterschiede in andere Datei schreiben (6)

Frage von sid.pdm zum Thema Batch & Shell ...

Batch & Shell
gelöst Batch-Skript: Messdaten in Textdatei finden und in eine neue Datei schreiben (5)

Frage von habmalnefrage zum Thema Batch & Shell ...

Windows Systemdateien
gelöst Registry-Schlüssel per Batch auslesen und in Datei schreiben (9)

Frage von Philzip zum Thema Windows Systemdateien ...

Heiß diskutierte Inhalte
Router & Routing
gelöst Ipv4 mieten (22)

Frage von homermg zum Thema Router & Routing ...

Exchange Server
gelöst Exchange 2010 Berechtigungen wiederherstellen (20)

Frage von semperf1delis zum Thema Exchange Server ...

Windows Server
DHCP Server switchen (20)

Frage von M.Marz zum Thema Windows Server ...

Hardware
gelöst Negative Erfahrungen LAN-Karten (19)

Frage von MegaGiga zum Thema Hardware ...