jonwain
Goto Top

Per Batch String abfragen und abschließend in zwei Dateien alten String durch den eingegeben erstetzen

Batch Datei fragt Benutzer nach auszuwechselnder Zeichenkette ab und ersetzt diese dann in zwei Dateien

Hallo zusammen,

irgendwie werde ich mit den Dos Befehlen nicht richtig grün.

Ich habe zwei Dateien, in welchen ich an zwei Stellen den Platzhalter Mitarbeiter eingefügt habe. Für jeden neuen Mitarbeiter muss ich diese Dateien anpassen, also jedes mal per Editor und suchen & ersetzen den String Mitarbeiter durch Vornamen.Nachnamen ersetzen.

Um mir das in Zukunft zu erparen, schwebt mir vor, eine Batch Datei zu erstellen, mit welcher die neuen Mitarbeiter selber diese beiden Dateien ändern können.

Damit die Mitarbeiter die Dateien selber anpassen können und dieses nicht über suchen & ersetzen im Editor tun sollen, möchte ich eine Batch Datei erstellen, welche den Namen des Mitarbeiters am Bildschirm abfragt und diesen Wert dann in den Dateien erstetzt. Soweit zur Theorie, aber in der Praxis bekomme ich das überhaupt nicht mehr hin. Ich hoffe, jemand von Euch ist noch deutlich stärker in der Dos Programmierung involviert und kann mich dieser leidigen Thematik erlösen.

Vielen Dank im Voraus für Eure Mühen,

Jon, alt werdend

Content-Key: 60413

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

Ausgedruckt am: 19.03.2024 um 05:03 Uhr

Mitglied: Biber
Biber 02.06.2007 um 17:20:41 Uhr
Goto Top
Moin JonWain,

nur zur Sicherheit:
Ich habe zwei Dateien, in welchen ich an zwei Stellen den Platzhalter Mitarbeiter eingefügt habe.
Diese beiden Dateien sind
  • Textdateien wie zum Beispiel .Ini- oder .config-Dateien?
  • oder gar ihrerseits wieder Batchdateien?

Im ersten Fall können die Dateien eventuell einfacher (bzw. wartbarer) komplett von der Frag-nach-Username-Batchdatei geschrieben werden.
Im zweiten Fall wäre zu prüfen, ob nicht die Dateien 2 und 3 entweder mit Parameter aufgerufen werden konnen, ob es nicht reicht, in diesen Dateien einen Platzhalter %vorname% bzw. %nachname% zu verwenden oder ob es überhaupt mehrere Dateien geben muss.

Bitte etwas mehr Input... wie sehen denn die Dateien 2 & 3 aus?

Gruss
Biber
Mitglied: JonWain
JonWain 03.06.2007 um 13:11:06 Uhr
Goto Top
Hallo Biber,

vielen Dank für Dein Nachricht. Es handelt sich um zwei Dateien im Textformat für Open-VPN (*.opvn) . Diese enthalten in Textform den Namen der einzubindenen Verschlüsselungsdateien:

Dateianfang------
...
cert Mitarbeiter.cert
key Mitarbeiter.key
Dateiende--------

Dieses Mitarbeiter will ich einfach automatisiert ersetzen lassen durch eine Abfrage. Also Batch gestartet fragt nach dem Usernamen, ich gebe JonWain ein und das Batch schreibt in die Dateien

Dateianfang------
...
cert JonWain.cert
key JonWain.key
Dateiende--------

Und fertig. Leider geht mein Anspruch und meine programmiertechnischen Fähigkeiten in der Wirklichkeit da total vorbei. Eventuell würde mir auch einfach eine Übersicht der möglichen Befehle einer Batchdatei mit Dokumentation helfen. So schwimme ich da doch deutlichst.

Schönen Restsonntag,
Jon
Mitglied: miniversum
miniversum 03.06.2007 um 16:11:51 Uhr
Goto Top
Wenn du in die Datei nicht Mitarbeiter sondern %username% schreibst gehts automatisch udn einfach.
Also deine Datei sieht so aus:
...
cert %username%.cert
key %username%.key

Und die Batch die dann für jeden benutzer auf seinem Rechner die Neue Datei erstellt dann so:
@echo off
for /F "delims=" %%a in (Vorlage.opvn) do call:ausgabe "%%a"
goto:eof
:ausgabe
echo %~1>>%username%.opvn
goto:eof

miniversum
Mitglied: bastla
bastla 03.06.2007 um 16:23:40 Uhr
Goto Top
Hallo JonWain!

Einfach Lösung: Alles von Dateianfang bis vor der "cert ..."-Zeile in eine Datei "Anfang.txt" (Zeilenschaltung am Ende der letzten Zeile nicht vergessen), alles nach der "key"-Zeile in eine "Ende.txt" schreiben, dann
@echo off & setlocal
set "OpVNDatei=D:\Datei.opvn"  
:Eingabe
set /p MName=Bitte den Mitarbeiternamen eingeben_
if "%MName%"=="" goto :Eingabe  
type D:\Anfang.txt>"%OpVNDatei%"  
echo cert %MName%.cert>>"%OpVNDatei%"  
echo key %MName%.key>>"%OpVNDatei%"  
type D:\Ende.txt>>"%OpVNDatei%"  
type "%OpVNDatei%"|more  
und das gleiche Spiel für die zweite Datei.

Eine Überprüfung der Eingabe erfolgt nur im Hinblick darauf, ob sie nicht gänzlich leer ist.

Die letzte Zeile gibt den Inhalt der neu erstellten OpVNDatei zur Kontrolle auf dem Bildschirm aus und kann natürlich weggelassen werden.

Grüße
bastla

[Edit] Wenn, wie von miniversum angenommen, der in die Datei zu schreibende Mitarbeitername dem Anmeldenamen entspricht, kannst Du einfach die Eingabe weglassen und jeweils anstelle von %MName% %username% einsetzen. [/Edit]
Mitglied: Biber
Biber 03.06.2007 um 16:33:28 Uhr
Goto Top
Moin JoinWain,

Eventuell würde mir auch einfach eine Übersicht der möglichen Befehle einer Batchdatei mit Dokumentation helfen.
Solche Fragesteller mag ich irgendwie viel lieber als die, die glauben, das hier wäre eine Art Flat-Premium-Hotline-Angebot.
So einem habe ich gerade geantwortet..*grmbbbl*

Back to Thread.

Wenn Der Sachverhalt so ist, gäbe es zwei Varianten, die ich empfehlen würde. Beide beginnen als Batch ungefähr so..
::----- snipp FragDenUserNachNamen.bat
@echo off & setlocal
:nochmal
cls
Echo. 
Echo Eingabe des Benutzernamens
Echo. 
Set /P "UsersNachname=Bitte den NACHnamen wie im Benutzerprofil hinterlegt eingeben [Beispiel: Wain]: "  
Set /P "UsersVorname=Bitte den Vornamen wie im Benutzerprofil hinterlegt eingeben [Beispiel: Jon]: "  

Echo Sie haben eingegeben: %UsersVorname%.%UsersNachName%.
Set /P "AllesInButta=Sind diese Angaben korrekt [J/N] ? ---Geben Sie X für Abbruch ein.--"  
If /i [%AllesInButta%]==[J]  goto :weiter
If /i [%AllesInButta%]==[X]  goto :eof
goto :nochmal

:weiter
REM Hier kommen die Varianten
....

Bei den Varianten kommt es darauf an, ob "viele" Zeilen zu schreiben sind in diesen Open-VPN (*.opvn)-Dateien oder eher nur ein paar.

Wenn nur ein paar, dann nach der Sprungmarke ":weiter" weiter wie folgt:
...
:weiter
Echo zeile1 von dieser Datei > %usersVorname%_%usersNachname%.opvn
Echo zeile2 von dieser Datei >> %usersVorname%_%usersNachname%.opvn
Echo zeileN von dieser Datei >> %usersVorname%_%usersNachname%.opvn
Echo cert %usersVorname%.%usersNachname%.cert >>%usersVorname%_%usersNachname%.opvn
Echo key %usersVorname%.%usersNachname%.key >>%usersVorname%_%usersNachname%.opvn
Echo RestzeileX von dieser Datei >> %usersVorname%_%usersNachname%.opvn
Echo RestzeileY von dieser Datei >> %usersVorname%_%usersNachname%.opvn

Falls die Zeilenanzahl vor und nach den beiden variablen Zeilen zu gross ist, dann kannst Du auch den ersten und zweiten konstanten Teil jeweils in einer *.txt-Datei speichern und dann...
...
:weiter
Copy /y \\meinServer\opvnVorlagen\Part1.txt %usersVorname%_%usersNachname%.opvn
Echo cert %usersVorname%.%usersNachname%.cert >>%usersVorname%_%usersNachname%.opvn
Echo key %usersVorname%.%usersNachname%.key >>%usersVorname%_%usersNachname%.opvn
Type \\meinServer\opvnVorlagen\Part2.txt >>%usersVorname%_%usersNachname%.opvn

Soweit die ungetesteten Skizzen.
Zu den Befehlen SET und ECHO kannst Du am CMD-Prompt mit "Set /?" und "echo /?" nachlesen.
Oder hier ein bisschen im Bereich Batch & Shell stöbern.

Grüße
Biber
[Edit] @miniversum und @bastla
Hätte ich mir denken können, dass ich hier nicht so lange rumtrödeln sollte,,, face-wink
Schönen Sonntag!
[/Edit]
Mitglied: bastla
bastla 03.06.2007 um 16:55:57 Uhr
Goto Top
@Biber

Immerhin hast Du eine ordentliche Benutzeroberfläche (um die ich mich herumgedrückt hatte face-wink) "ertrödelt" ...

Grüße
bastla
Mitglied: JonWain
JonWain 04.06.2007 um 14:48:57 Uhr
Goto Top
So, ich nochmal. Vielen Dank für Eure Lösungsvorschläge, habe für mich wieder eine Menge daraus gelernt.

Ich habe gerade mit dem ersten Schritt zum Lösungsansatz meine Probleme, doch lässt mich so eine Geschichte nicht ruhig schlafen, weil es doch irgendwie gehen muss! Die fertigen Codezeilen sehen dann doch immer recht einfach aus, doch bis einfach ist für mich ein langer Weg..

Bis die Tage & nochmals vielen Dank,
Jon