Einträge einer Bat Datei per eingabeaufforderungs bat ändern Rat beim Feinschliff benötigt
Hallo an alle die sich mit batch auskennen, könnte mir vielleicht einer helfen, ich habe eine bat Datei in der ich, in der dritten Zeile von tastenanschlag 79bis ca 120,
einen Eintrag ändern möchte. Dies möchte ich anhand einer Konfig.bat bewerkstelligen.
In der Konfig.bat konfiguriere ich nicht nur diese eine bat wie oben beschrieben sondern auch noch eine FTP Textdatei. Dies funktioniert schon wunderbar. Die txt hab ich ganz unten aufgelistet.
Ich möcht in dieser Konfig.bat nicht nur die FTP Text datei konfigurieren, sondern auch gleich noch eine bat mit den Namen "1.bat"
Die Schwierigkeit liegt darin das ich bei der 1.bat mitten in der 3ten zeile was ändern will.
Und, dass die Geschichte mit "echo text>>1.bat" bei -->bat Dateinen nicht funktioniert und anscheinend nur bei txt Dateien geht (kleiner Test meinerseits)
Nächstes Problem ist das die länge der Zeichen die einzufügen sind variert, sprich es können einmal 36 Zeichen sein und einmal 50 z.B.
Die 1.bat in der die Änderung erfolgen soll, sieht aktuell so aus:
und soll danach mittels manueller Eingabe während der CMD abfrage von der Konfig.bat so aussehen:
Sprich ich müsste in meiner unten angegeben Konfigurations.bat noch die Userabfrage für diese ca 50 zeichen stellen:
Bitte geben sie Ihre Zahlen ein_
--> Mögliche Eingabe ins CMD Fenster wäre dann zb --> 85....44_c001_u0125
Hier meine Konfigurations.bat in der schon die FTP textdatei per usereingabe erstellt wird. Am ende dieser datei soll die abfrage der ca 50 steligen Zahl kommen.
Kann mir da einer weiterhelfen?
Lg Stefan
einen Eintrag ändern möchte. Dies möchte ich anhand einer Konfig.bat bewerkstelligen.
In der Konfig.bat konfiguriere ich nicht nur diese eine bat wie oben beschrieben sondern auch noch eine FTP Textdatei. Dies funktioniert schon wunderbar. Die txt hab ich ganz unten aufgelistet.
Ich möcht in dieser Konfig.bat nicht nur die FTP Text datei konfigurieren, sondern auch gleich noch eine bat mit den Namen "1.bat"
Die Schwierigkeit liegt darin das ich bei der 1.bat mitten in der 3ten zeile was ändern will.
Und, dass die Geschichte mit "echo text>>1.bat" bei -->bat Dateinen nicht funktioniert und anscheinend nur bei txt Dateien geht (kleiner Test meinerseits)
Nächstes Problem ist das die länge der Zeichen die einzufügen sind variert, sprich es können einmal 36 Zeichen sein und einmal 50 z.B.
Die 1.bat in der die Änderung erfolgen soll, sieht aktuell so aus:
1
2
3
4
5
6
7
2
3
4
5
6
7
@echo off & setlocal enableDelayedExpansion
cd "C:\getit_PDF\"
for /f "tokens=*" %%i in ('dir /b "C:\getit_PDF\*.pdf"') do ren "%%~i" " -->11...11_c001_u000**<-- #%%~nxi"
cd "C:\Programme\FreePDF_XP\Skript\Profil1"
FTP -s:1.txt
cd "C:\getit_PDF\"
del "*.pdf"
und soll danach mittels manueller Eingabe während der CMD abfrage von der Konfig.bat so aussehen:
1
2
3
4
5
6
7
2
3
4
5
6
7
@echo off & setlocal enableDelayedExpansion
cd "C:\getit_PDF\"
for /f "tokens=*" %%i in ('dir /b "C:\getit_PDF\*.pdf"') do ren "%%~i" " -->85...44_c001_u0125<-- #%%~nxi"
cd "C:\Programme\FreePDF_XP\Skript\Profil1"
FTP -s:1.txt
cd "C:\getit_PDF\"
del "*.pdf"
Sprich ich müsste in meiner unten angegeben Konfigurations.bat noch die Userabfrage für diese ca 50 zeichen stellen:
Bitte geben sie Ihre Zahlen ein_
--> Mögliche Eingabe ins CMD Fenster wäre dann zb --> 85....44_c001_u0125
Hier meine Konfigurations.bat in der schon die FTP textdatei per usereingabe erstellt wird. Am ende dieser datei soll die abfrage der ca 50 steligen Zahl kommen.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
@ECHO OFF
set /p IP=Aktuelle IP eingeben_
echo open %IP% 21>>1.txt
Set /p User=Bitte FTP Usernamen eingeben_
echo %User%>>1.txt
Set /p PW=Bitte FTP Passwort eingeben_
echo %PW%>>1.txt
Set /p FTP_Pfad="Bitte den Zielpfad auf dem FTP Server angeben_
echo cd %FTP_Pfad%>>1.txt
echo bin>>1.txt
echo lcd C:\getondemand_PDF>>1.txt
echo put "*.pdf">>1.txt
echo disconnect>>1.txt
echo quit>>1.txt
Kann mir da einer weiterhelfen?
Lg Stefan
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 120722
Url: https://administrator.de/forum/eintraege-einer-bat-datei-per-eingabeaufforderungs-bat-aendern-rat-beim-feinschliff-benoetigt-120722.html
Ausgedruckt am: 15.04.2025 um 19:04 Uhr
19 Kommentare
Neuester Kommentar
Hallo MrSonei6!
Für die paar Zeilen würde ich gar kein "Suchen/Ersetzen"- oder "Aus Einzelteilen kombinieren"-Script verwenden, sondern einfach die gesamte Batchdatei erzeugen:
Grüße
bastla
P.S.: Wozu eigentlich die "DelayedExpansion"? Und wenn schon "cd" (und nicht "pushd"/"popd"), dann zur Sicherheit "cd /d" ...
Für die paar Zeilen würde ich gar kein "Suchen/Ersetzen"- oder "Aus Einzelteilen kombinieren"-Script verwenden, sondern einfach die gesamte Batchdatei erzeugen:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
@echo off & setlocal
set "Bat=1.bat"
set Eingabe=
set /p Eingabe=Bitte geben sie Ihre Zahlen ein_
if not defined Eingabe echo Keine Zahlen eingegeben - %Bat% wird nicht erzeugt/geaendert! & goto :eof
>"%Bat%" echo @echo off ^& setlocal enableDelayedExpansion
>>"%Bat%" echo cd "C:\getondemand_PDF\"
>>"%Bat%" echo for /f "tokens=*" %%i in ('dir /b "C:\getit_PDF\*.pdf"') do ren "%%~i" "%Eingabe%#%%~nxi"
>>"%Bat%" echo cd "C:\Programme\FreePDF_XP\Skript\Profil1"
>>"%Bat%" echo FTP -s:1.txt
>>"%Bat%" echo cd "C:\getit_PDF\"
>>"%Bat%" echo del "*.pdf"
bastla
P.S.: Wozu eigentlich die "DelayedExpansion"? Und wenn schon "cd" (und nicht "pushd"/"popd"), dann zur Sicherheit "cd /d" ...
Moin MrSonei6,
Kollege bastla hat eigentlich noch Urlaub.. deshalb spring ich mal ein.
Du musst ein diesem Fall beim Schreiben der Textdatei (bzw. Batchdatei) die doppelten Prozentzeichen vor den Laufvariablen verdoppeln.
Also statt z.B. %%i jetzt schreiben %%%%i.
Weil.. wegen... außer bastla und mir macht keiner sowas... von daher ist es etwas schwer in der M$-Hilfe zu finden.
zu Deiner zweiten Frage eine Doppel-Antwort:
b) RTFM! [ein einfaches "cd /?" am CMD-Prompt].
Grüße
Biber
Kollege bastla hat eigentlich noch Urlaub.. deshalb spring ich mal ein.
Du musst ein diesem Fall beim Schreiben der Textdatei (bzw. Batchdatei) die doppelten Prozentzeichen vor den Laufvariablen verdoppeln.
Also statt z.B. %%i jetzt schreiben %%%%i.
Weil.. wegen... außer bastla und mir macht keiner sowas... von daher ist es etwas schwer in der M$-Hilfe zu finden.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
@echo off & setlocal
set "Bat=1.bat"
set Eingabe=
set /p "Eingabe=Bitte geben sie Ihre Zahlen ein: "
if not defined Eingabe echo Keine Zahlen eingegeben - %Bat% wird nicht erzeugt/geaendert! & goto :eof
>"%Bat%" echo @echo off ^& setlocal enableDelayedExpansion
>>"%Bat%" echo cd "C:\getondemand_PDF\"
>>"%Bat%" echo for /f "tokens=*" %%%%i in ('dir /b "C:\getondemand_PDF\*.pdf"') do ren "%%%%~i" "%Eingabe%#%%%%~nxi"
>>"%Bat%" echo cd "C:\Programme\FreePDF_XP\Skript\Profil1"
>>"%Bat%" echo FTP -s:1.txt
>>"%Bat%" echo cd "C:\getondemand_PDF\"
>>"%Bat%" echo del "*.pdf"
zu Deiner zweiten Frage eine Doppel-Antwort:
Was bringd ein cd/d?
a) ein rote Unterstreichung, falls Du eine Rechtschreibprüfung verwendestb) RTFM! [ein einfaches "cd /?" am CMD-Prompt].
Grüße
Biber
Moin MrSonei6,
Dann hättest Du jetzt NICHT immer noch ein "echo cd "C:\getit__PDF\" drin , wie bastla und ich es schon mehrfach unkorrigiert gelassen haben.
Außerdem
Grüße
Biber
ich les das MFM schon seit 2 Tagen
Du sollst jetzt kein Magazin für Männer lesen, sondern einfach die Hilfe bei Cd /? und PushD /? und PopD /?Dann hättest Du jetzt NICHT immer noch ein "echo cd "C:\getit__PDF\" drin , wie bastla und ich es schon mehrfach unkorrigiert gelassen haben.
Außerdem
- immer zusätzlich zum "@echo off" und das "setlocal" verwenden - siehe Setlocal /?
- hier: "echo echo off & setlocal enableDelayedExpansion >> 1.bat " muss das &-Zeichen maskiert werden (als ^&)
- und die Zeile "set Eingabe3=%Eingabe%+_c001_+%Eingabe2% " braucht zwar keine "+"-Zeichen (einfach weglassen)
- aber die bringt erst etwas, NACHDEM %Eingabe% und %Eingabe2% einen Wert haben. die Zeile muss weiter unten stehen.
Grüße
Biber
@MrSonei6
Sorry - war etwas in Eile und deshalb leider ungenau
...
gedacht (auch der geplante Hinweis darauf ist bei meinem Kommentar auf der Strecke geblieben). Wenn Du diese Zeile an den Anfang des Batches stellst, um eine Pfadangabe erweiterst und danach anstelle von "1.bat" konsequent "%Bat%" verwendest, wird das klappen; mit der "1.txt" kannst Du analog dazu verfahren.
@Biber
Danke für's Geradebiegen - bin selbst noch etwas unrund (keine Sorge, nicht äußerlich
) ...
Grüße
bastla
Sorry - war etwas in Eile und deshalb leider ungenau
Frage 2)
was muss ich wo ändern damit die konfig.bat nicht im Zielordner, der zu erstellenden Dateien 1.txt und 1.bat, liegen zu braucht.
Z.B das die konfig.bat von überall ausgeführt werden kann und die beiden dateien immer in
C:\Programme\FreePDF_XP\FTP\Profile
landen
Dazu war eigentlich die Zeilewas muss ich wo ändern damit die konfig.bat nicht im Zielordner, der zu erstellenden Dateien 1.txt und 1.bat, liegen zu braucht.
Z.B das die konfig.bat von überall ausgeführt werden kann und die beiden dateien immer in
C:\Programme\FreePDF_XP\FTP\Profile
landen
set "Bat=1.bat"
@Biber
Danke für's Geradebiegen - bin selbst noch etwas unrund (keine Sorge, nicht äußerlich
Grüße
bastla
Hallo MrSonei6!
Noch besser wäre die Verwendung der Systemvariablen %ProgramFiles%, da so unabhängig von der Windows-Version der richtige "Programme"-Ordner verwendet wird - das sähe dann so aus:
Da im Pfad Leerzeichen enthalten sein können, muss dieser bei der Verwendung immer unter Anführungszeichen stehen (was ich in meinem Vorschlag oben bereits berücksichtigt hatte - siehe
bzw
zeigt Dir den Unterschied. Im ersten Fall änderst Du den aktuellen Pfad für Laufwerk X:, bräuchtest aber danach noch ein
um tatsächlich im Pfad "x:\Unterordner" zu landen - im zweiten Fall wird unmittelbar gewechselt, sodass der Prompt danach
lauten würde.
Grüße
bastla
Wenn ich nun in PushD dasVverzeichniss eingebe wo die 1.bat und 1.txt erstellt werden sollen ...
... ist das eine mögliche Vorgangsweise - die andere (nämlich vollständige Pfade zu verwenden) habe ich unten erwähnt - diese könnte so aussehen:set "Bat=C:\Program Files\FreePDF_XP\Skript\Profil1\1.bat"
set "Bat=%ProgramFiles%\FreePDF_XP\Skript\Profil1\1.bat"
>"%Bat%" echo ...
... muss ich so zu sagen gleich nach PushD PopD ausführen aber was bringd das?
"pushd" und "popd" sollen natürlich nicht unmittelbar nacheinander verwendet werden, sondern in der Art, dass mit "pushd" ein sicheres Wechseln des aktuellen Verzeichnisses (auch auf ein anderes Laufwerk) möglich ist, wobei gleichzeitig der vorher aktuelle Pfad zwischengespeichert wird, und mit "popd" der (temporäre) Verzeichniswechsel nach der Bearbeitung der Dateien wieder rückgängig gemacht wird.Warum kann ich nicht einfach mit cd und den Pfad angeben?
Kannst Du ja, aber mit dem Zusatz "/d" wird sicher gestellt, dass auch das richtige Laufwerk verwendet wird - ein Test an der Kommandozeile mitC:\>cd x:\Unterordner
C:\>cd /d x:\Unterordner
C:\>x:
X:\Unterordner>
Grüße
bastla
Moin MrSonei6.
und noch eine weitere Deiner Fragen zu beantworten:
Kurz gefasst bedeutet "|" in einer Aufzählung von mehreren Parametern immer EINTWEDER...ODER. (nicht beides gleichzeitig).
Grüße
Biber
P.S. & OT zum mehrfach verwendeten "das Verzeichniss". Das einzige deutsche Wort mit der Endung "-niss" ist meiner Kenntnis nach das Wort für die männliche Faltenwespe ("der Horniss"). Aber gute Nachricht: ich stehe nach wie vor dazu: ein Kasten Becks für den ersten, der mir 3 deutsche Worte mit Endung "-niss" liefert.
P:P:S. @bastla
Was machst Du eigentlich schon hier? Urlaub wegen Regen abgebrochen?
Oder werfen nur große Ereignisse ihre Schatten voraus?
und noch eine weitere Deiner Fragen zu beantworten:
Alss CMD hilfe steht drin man soll PUSHD so angeben [Pfad | ..]
Eftl hab ich das falsch gemacht? was bedeutet der Strich?
Die Syntax bzw die Bedeutung der in der Hilfe zu einzelnen CMD-Befehlen verwendeten Zeichen wie "[", "]" oder "|" erfährst Du am schnellsten in der grafischen Windows-Hilfe "Hilfe und Support". Und dort mal nach "pushd" suchen.Eftl hab ich das falsch gemacht? was bedeutet der Strich?
Kurz gefasst bedeutet "|" in einer Aufzählung von mehreren Parametern immer EINTWEDER...ODER. (nicht beides gleichzeitig).
Grüße
Biber
P.S. & OT zum mehrfach verwendeten "das Verzeichniss". Das einzige deutsche Wort mit der Endung "-niss" ist meiner Kenntnis nach das Wort für die männliche Faltenwespe ("der Horniss"). Aber gute Nachricht: ich stehe nach wie vor dazu: ein Kasten Becks für den ersten, der mir 3 deutsche Worte mit Endung "-niss" liefert.
P:P:S. @bastla
bin selbst noch etwas unrund...
Na ja, die vielen ausgeruhten Neuankömmlinge werden es sicher versuchen, dich für ein paar neue Runden zu gewinnen.Was machst Du eigentlich schon hier? Urlaub wegen Regen abgebrochen?
Oder werfen nur große Ereignisse ihre Schatten voraus?
Hallo MrSonei6!
Da es sich ja offensichtlich um eher temporäre Dateien handelt, könntest Du diese ja gleich im %temp%-Ordner erstellen lassen, also etwa
und dann, wie schon oben vorgeschlagen, nur noch über die jeweilige Variable %Bat% bzw %Txt% darauf zugreifen ...
Grüße
bastla
Da es sich ja offensichtlich um eher temporäre Dateien handelt, könntest Du diese ja gleich im %temp%-Ordner erstellen lassen, also etwa
1
2
2
set "Bat=%temp%\1.bat"
set "Txt=%temp%\1.txt"
Grüße
bastla
ja klingt logisch aber der Inhalt des temp Ordners wird auch des öfteren einfach mal so gelöscht um wieder Speicherplatz zu gewinnen.
Dann verwende eben einen anderen Speicherort unterhalb von %LOCALAPPDATA% oder %APPDATA% (je nachdem, ob die Datei(en) in's servergespeicherte Profil sollen) ...Grüße
bastla
Hallo MrSonei6!
Zu
Grundsätzlich wird mit dieser Schleife jeder vom Befehl
gelieferte Dateiname (erfasst werden alle .pdf-Dateien des Ordners "C:\getondemand_PDF" bzw, um genau zu sein, auch alle Unterdordner, die auf ".pdf" enden) als "%%i" zur weiteren Verarbeitung (passiert nach dem "do") zur Verfügung gestellt.
Diese Verarbeitung
hat den Zweck, jede dieser Dateien, zur Absicherung für den Fall, dass Leerzeichen im Namen enthalten wären, in der Schreibweise Anführungszeichen - Dateiname ohne umgebende Anführungszeichen (deshalb nicht "%%i" sondern "%%~i") - Anführungszeichen umzubenennen, wobei der neue Name gebildet wird aus
Besser wäre übrigens die Schreibweise
da hier in "%%i" nicht nur der Dateiname, sondern der gesamte Pfad zur Verfügung steht - damit funktioniert das Umbenennen unabhängig vom aktuellen Verzeichnis (braucht daher kein vorheriges "cd" oder "pushd"), während oben eigentlich zur Sicherheit
verwendet werden sollte, da, wie erwähnt, in "%%i" eben nur der Dateiname steht.
Grüße
bastla
Zu
for /f "tokens=*" %%i in ('dir /b "C:\getondemand_PDF\*.pdf"') do ren "%%~i" "%Eingabe%#%%~nxi"
dir /b "C:\getondemand_PDF\*.pdf"
Diese Verarbeitung
ren "%%~i" "%Eingabe%#%%~nxi"
- dem Inhalt der Variablen %Eingabe%
- einem "#" und
- dem ursprünglichen Namen ("%%~nxi" steht für Name und Dateityp von "%%i" - siehe dazu die Hilfe zu "for" gegen Ende).
Besser wäre übrigens die Schreibweise
for %%i in ("C:\getondemand_PDF\*.pdf") do ren "%%~i" "%Eingabe%#%%~nxi"
ren "C:\getondemand_PDF\%%i" "%Eingabe%#%%~nxi"
Grüße
bastla
Hallo MrSonei6!
... dann findest Du auch diesen Hinweis: %Variable Ein ersetzbarer Parameter bestehend aus einem einzelnen Buchstaben.
Grüße
bastla
hab gesucht und raus bekommen das "tokens" aus einer Datei auslesen lässt.
Das ist so nicht vollständig: Mit einer "for /f"-Schleife (und nur in diesem Fall kannst Du "tokens" verwenden) wird der Inhalt einer (Text-)Datei zeilenweise verarbeitet, allerdings auch, so wie in diesem Fall, die Ausgabe eines Befehles ("dir /b ..."), wobei die Zeile bei Bedarf in Einzelteile, die "Tokens", zerlegt werden kann (bzw defaultmäßig anhand der Trennzeichen "Leerzeichen" und "Tab" zerlegt wird). Die Angabe von "tokens=*" sorgt dafür, dass keine Zerlegung erfolgt, sondern die gesamte Zeile zurückgegeben wird. Im Übrigen: "for /?" ...... dann findest Du auch diesen Hinweis: %Variable Ein ersetzbarer Parameter bestehend aus einem einzelnen Buchstaben.
Könnte es auch "%%~a" oder "%%~hallo" heißen?
Die Verwendung von "i" hat sich eingebürgert, es kann aber auch ein anderer einzelner Buchstabe sein.Grüße
bastla