Batch Skript soll nach zu verarbeitenden Daten fragen und korrekt in Textdatei ändern
Hallo Leute! Ich bin neu hier und versuche mir das private Leben mit ein wenig Automatisierung zu erleichtern. Allerdings komme ich momentan nicht weiter..
Ziel:
Statt einem in der Batch festgelegten Wort, dass in einer Textdatei ein anderes Wort ersetzt, möchte ich, das mir die Batch bei der Verarbeitung die Möglichkeit gibt das Ersatzwort zu definieren.
Szenario:
Ich möchte eine Textdatei auf einem Netzwerkgerät per ftp nach und nach füllen. Diese Textdatei wird auf dem Gerät weiterverarbeitet. Die fertige Datei "LISTE.txt" sieht etwa so aus:
Team1;Mo;Training1
Team2;Mo;Training1
Team3;Mo;Training1
Team1;Mi;Training2
Team2;Mi;Training3
Team3;Mi;Training3
Team4;Mi;Training3
Ich möchte die Trainings bearbeiten. Vorgegangen bin ich nun so: Ich habe eine Basis.txt auf dem Rechner erstellt. Schema:
Team1;Mo;Trainingsname
Team2;Mo;Trainingsname
Team3;Mo;Trainingsname
Bisherige Praxis:
Hier suche ich per Skript "Trainingsname", was dann in eine neue Tempdatei geschrieben wird und durch z.B. Training1 ersetzt wird. Den Text aus dieser Datei füge ich dann in den Text einer auf meinem Rechner vorhandenen Datei "LISTE.txt" und schicke sie per ftp auf das Netzwerkgerät. Danach wird Tempdatei gelöscht. Das ganze funktioniert und sieht so aus:
Ziel erkannt, auf dem Weg gescheitert:
Nun möchte ich aber nicht immer die Batch vorher öffnen und den Trainingsnamen darin ändern, sondern hätte es lieber, dass ich bei der Ausführung der Batch in die Konsole den Namen eingeben könnte.
Mein Versuch war, vor der Ersetzen-Zeile eine Eingabe zu fordern und weiterzuverarbeiten.:
Hat nicht geklappt.
1. muss ich jetzt zu jedem gefundenen "Trainingsname" etwas eingeben, statt einmal für alle!
2. Wird mein Text nicht eingefügt. Die Liste sieht nachher so aus:
text:Trainingsname=
text:Trainingsname=
text:Trainingsname=
Wie muss ich richtig vorgehen?
Das geht alles sicher viel effizienter (verschiedene Wochentage werden in der Batch danach genauso verarbeitet und greifen nur auf andere Listen zu) aber ich wäre schon happy, wenn ihr mir helfen könntet einen Schritt weiter zu kommen.
Grüße Kinkerlitzchen
Ziel:
Statt einem in der Batch festgelegten Wort, dass in einer Textdatei ein anderes Wort ersetzt, möchte ich, das mir die Batch bei der Verarbeitung die Möglichkeit gibt das Ersatzwort zu definieren.
Szenario:
Ich möchte eine Textdatei auf einem Netzwerkgerät per ftp nach und nach füllen. Diese Textdatei wird auf dem Gerät weiterverarbeitet. Die fertige Datei "LISTE.txt" sieht etwa so aus:
Team1;Mo;Training1
Team2;Mo;Training1
Team3;Mo;Training1
Team1;Mi;Training2
Team2;Mi;Training3
Team3;Mi;Training3
Team4;Mi;Training3
Ich möchte die Trainings bearbeiten. Vorgegangen bin ich nun so: Ich habe eine Basis.txt auf dem Rechner erstellt. Schema:
Team1;Mo;Trainingsname
Team2;Mo;Trainingsname
Team3;Mo;Trainingsname
Bisherige Praxis:
Hier suche ich per Skript "Trainingsname", was dann in eine neue Tempdatei geschrieben wird und durch z.B. Training1 ersetzt wird. Den Text aus dieser Datei füge ich dann in den Text einer auf meinem Rechner vorhandenen Datei "LISTE.txt" und schicke sie per ftp auf das Netzwerkgerät. Danach wird Tempdatei gelöscht. Das ganze funktioniert und sieht so aus:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
echo off
setlocal enabledelayedexpansion
set "filename=Basis.txt"
set "tempfile=Basis-Temp.txt"
for /F "delims=" %%a in (%filename%) do (
set text=%%a
set text=!text:^Trainingsname=Test!
echo !text!>>%tempfile%
)
more Basis-Temp.txt >> LISTE.txt
ftp.exe -n -i -s:kopieren.ftp
del %tempfile%
exit
Ziel erkannt, auf dem Weg gescheitert:
Nun möchte ich aber nicht immer die Batch vorher öffnen und den Trainingsnamen darin ändern, sondern hätte es lieber, dass ich bei der Ausführung der Batch in die Konsole den Namen eingeben könnte.
Mein Versuch war, vor der Ersetzen-Zeile eine Eingabe zu fordern und weiterzuverarbeiten.:
1
2
2
set /p EINGABE=Trainingsnamen Eingeben:
set text=!text:^Trainingsname=%EINGABE%
Hat nicht geklappt.
1. muss ich jetzt zu jedem gefundenen "Trainingsname" etwas eingeben, statt einmal für alle!
2. Wird mein Text nicht eingefügt. Die Liste sieht nachher so aus:
text:Trainingsname=
text:Trainingsname=
text:Trainingsname=
Wie muss ich richtig vorgehen?
Das geht alles sicher viel effizienter (verschiedene Wochentage werden in der Batch danach genauso verarbeitet und greifen nur auf andere Listen zu) aber ich wäre schon happy, wenn ihr mir helfen könntet einen Schritt weiter zu kommen.
Grüße Kinkerlitzchen
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 193249
Url: https://administrator.de/forum/batch-skript-soll-nach-zu-verarbeitenden-daten-fragen-und-korrekt-in-textdatei-aendern-193249.html
Ausgedruckt am: 09.04.2025 um 08:04 Uhr
5 Kommentare
Neuester Kommentar
Wenn du, wie bastla schon gesagt hat den set /p ausserhalb der for-Schleife machst und sich deshalb die Variable Eingabe nicht mehr ändert musst du in der for-Schleife auch nicht mehr mit delayedexpansion arbeiten sondern kannst die %EINGABE% ganz normal an deinen Text anhängen,also in etwa so:
oder gleich so:
Alle Angaben ohne Gewähr da nicht getestet
1
set text=%text%:^Trainingsname=%EINGABE%
oder gleich so:
1
set text=%%a:^Trainingsname=%EINGABE%
Alle Angaben ohne Gewähr da nicht getestet