mrsonei6
Goto Top

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:


@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:


@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.


@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

Content-Key: 120722

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

Printed on: April 19, 2024 at 22:04 o'clock

Member: bastla
bastla Jul 17, 2009 at 15:43:26 (UTC)
Goto Top
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:
@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"  
Grüße
bastla

P.S.: Wozu eigentlich die "DelayedExpansion"? Und wenn schon "cd" (und nicht "pushd"/"popd"), dann zur Sicherheit "cd /d" ...
Member: MrSonei6
MrSonei6 Jul 17, 2009 at 16:05:28 (UTC)
Goto Top
danke!

Ich könnte doch dein skript unter meine Konfig.bat noch dran hängen oder?

Eine frage noch die 1.bat die mit deinen script erzeugt wird gibt mir das aus in der dritten Zeile

for /f "tokens=*" %i in ('dir /b "C:\getit_PDF\*.pdf"') do ren "%~i" "454544445634#%~nxi"   

es soll aber das ausgeben

for /f "tokens=*" %%i in ('dir /b "C:\getit_PDF\*.pdf"') do ren "%%~i" "454544445634#%%~nxi"  

Sprich es fehlt an zwei stellen ein zweites % und so funktioniert die 1.bat nciht mehr

ich bin kein batchler ;) hab mir die DelayedExpansion von biber abgeschaut und wie ich mit pushd oder popd umgehen muss weiß ich auch noch nicht. Was bringd ein cd/d?
Member: Biber
Biber Jul 17, 2009 at 16:46:38 (UTC)
Goto Top
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.

@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 verwendest
b) RTFM! [ein einfaches "cd /?" am CMD-Prompt].

Grüße
Biber
Member: MrSonei6
MrSonei6 Jul 17, 2009 at 17:22:54 (UTC)
Goto Top
Vielen Dank ich les das MFM schon seit 2 Tagen, hatte vorher mit so was nie zu tun ;(
Ich werd mich bessern ich versprechs ;)

Ich hätt noch zwei Fragen an euch wenn ihr noch n wenig zeit habt?

Unten steht jetzt meine konfig.bat komplet fertig zum mitlesen ;)

Frage 1) Es wird immer kniffliger finde ich.

Ich hab vergessen, dass ich ja in der dritten Zeile von der 1.bat, als erstes eine ca. 36 stellige Zahl einfügen muss und dann kommt in der mitte ein fester Wert "_c001_u" und dann eine 3 stellige User ID die auch per user Eingabe reinkopiert werden soll. Ich hab das Skript von bastla bzw biber überarbeitet so das die konfig.bat auch noch einen zweiten Wert (die drei Stellige UserID) abfragt
Und dann hab ich aus den beiden Unbekannten Werten einen neuen Wert erzeugt der in der mitte einen Festen wert hat (wert3)

Wert3=wert_c001_wert2

und diesen Wert 3 wollte ich dann in Zeile 3 einfügen
Als ergebniss bekomm ich aber nur " _c001_ " also ohne die beiden werte

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


@ECHO OFF
del 1.bat
del 1.txt
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


echo echo off & setlocal enableDelayedExpansion >> 1.bat
set "Bat=1.bat"   
set Eingabe= 
set Eingabe2= 
set Eingabe3=%Eingabe%+_c001_+%Eingabe2%
set /p Eingabe=Bitte kopieren Sie hier die gewuenschte uuID fuer diese Profiel ein_ 
set /p Eingabe2=Bitte geben sie zum Schluss noch ihre drei Stellige User ID 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:\getit_PDF\"   
>>"%Bat%" echo for /f "tokens=*" %%%%i in ('dir /b "C:\getit_PDF\*.pdf"') do ren "%%%%~i" "%Eingabe3%#%%~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"  

exit
Member: Biber
Biber Jul 17, 2009 at 18:40:59 (UTC)
Goto Top
Moin MrSonei6,

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
Member: bastla
bastla Jul 17, 2009 at 19:58:20 (UTC)
Goto Top
@MrSonei6
Sorry - war etwas in Eile und deshalb leider ungenau face-sad ...

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 Zeile
set "Bat=1.bat"
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 face-wink) ...

Grüße
bastla
Member: MrSonei6
MrSonei6 Jul 17, 2009 at 20:37:08 (UTC)
Goto Top
Vielen Lieben dank biber jetzt funktionierts
Darauf wär ich nie gekommen das man set wert3 weiter runter setzen muss, aber im nachhinein klingsts logisch. Ech super klasse

Wegen dem Pushd welches den Pfad speichert was dann wiederum PopD ausließt.

Wenn ich nun in PushD dasVverzeichniss eingebe wo die 1.bat und 1.txt erstellt werden sollen muss ich so zu sagen gleich nach PushD PopD ausführen aber was bringd das?
Warum kann ich nicht einfach mit cd und den Pfad angeben?

Hier mal die ersten drei geänderten Zeilen

@echo OFF
PUSHD "C:\Program Files\FreePDF_XP\Skript\Profil1"
POPD
del 1.bat
del 1.txt
..


Die beiden Dateien werden aber immer noch in dem Verzeichniss angelegt in dem die .bat ausgeführt wird?!

Alss CMD hilfe steht drin man soll PUSHD so angeben [Pfad | ..]
Eftl hab ich das falsch gemacht? was bedeutet der Strich?
Member: bastla
bastla Jul 17, 2009 at 20:56:59 (UTC)
Goto Top
Hallo MrSonei6!
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"
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:
set "Bat=%ProgramFiles%\FreePDF_XP\Skript\Profil1\1.bat"
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
>"%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 mit
C:\>cd x:\Unterordner
bzw
C:\>cd /d x:\Unterordner
zeigt Dir den Unterschied. Im ersten Fall änderst Du den aktuellen Pfad für Laufwerk X:, bräuchtest aber danach noch ein
C:\>x:
um tatsächlich im Pfad "x:\Unterordner" zu landen - im zweiten Fall wird unmittelbar gewechselt, sodass der Prompt danach
X:\Unterordner>
lauten würde.

Grüße
bastla
Member: Biber
Biber Jul 18, 2009 at 19:06:23 (UTC)
Goto Top
Moin MrSonei6.


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.

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? face-wink
Member: MrSonei6
MrSonei6 Jul 20, 2009 at 15:29:01 (UTC)
Goto Top
Hi ich versuche gerade mein script von oben Vista Fähig zu machen, da ich ja in der bat eine txt datei erstelle und eine weitere .bat erstelle funktioniert das ganze nicht in Vista im Laufwerksbuchstaben c:\ zumindest!. Nicht mal dann wenn ich die .bat als admin ausführe.
runas admin geht nciht da das skript auf vielen verwschiedenen Rechner laufen soll. Ist ja eh das selbe wie rechtsklick und als Admin ausführen?

Gibt es eine Möglichkeit die .bat so umzuschreiben das sie auch in Vista in c:\ funktioniert und dateien erstellen darf?
Member: bastla
bastla Jul 20, 2009 at 16:01:38 (UTC)
Goto Top
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
set "Bat=%temp%\1.bat"  
set "Txt=%temp%\1.txt"  
und dann, wie schon oben vorgeschlagen, nur noch über die jeweilige Variable %Bat% bzw %Txt% darauf zugreifen ...

Grüße
bastla
Member: MrSonei6
MrSonei6 Jul 20, 2009 at 16:06:46 (UTC)
Goto Top
Hmmm wie meinst du das?

Dann liegen die zwei Dateien doch nicht im richtigen Ordner unter C:\Programme\FreePDF\Skript
sondern uunter C:\temp oder? Free PDF braucht die dateien aber in dem Programm Pfad.
Member: bastla
bastla Jul 20, 2009 at 16:12:01 (UTC)
Goto Top
Hallo MrSonei6!
Free PDF braucht die dateien aber in dem Programm Pfad.
Dann erstelle im entsprechenden Pfad eine (immer gleich bleibende) "1.bat" mit dem Inhalt:
@%temp%\1.bat
um damit die im %temp%-Verzeichnis liegende angepasste "1.bat" zu starten.

Grüße
bastla
Member: MrSonei6
MrSonei6 Jul 20, 2009 at 16:19:06 (UTC)
Goto Top
ja klingt logisch aber der Inhalt des temp Ordners wird auch des öfteren einfach mal so gelöscht um wieder Speicherplatz zu gewinnen.
Dann müsste ich so zu sagen einen eigenen Ordner anlegen unter C:\ und das darf ich leider nicht ;(

Gibt es wirklich keine Möglichkeit dies zu umgehen?
Member: bastla
bastla Jul 20, 2009 at 17:09:07 (UTC)
Goto Top
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
Member: MrSonei6
MrSonei6 Jul 23, 2009 at 15:40:40 (UTC)
Goto Top
kann mir evtl einer erklären was hier genau passiert?

for /f "tokens=*" %%i in ('dir /b "C:\getondemand_PDF\*.pdf"') do ren "%%~i" "%Eingabe%#%%~nxi"

ich kapier dieses %%~i" " nicht und dan das %#%%~nxi" auch nicht

lg
Member: bastla
bastla Jul 23, 2009 at 22:21:30 (UTC)
Goto Top
Hallo MrSonei6!

Zu
for /f "tokens=*" %%i in ('dir /b "C:\getondemand_PDF\*.pdf"') do ren "%%~i" "%Eingabe%#%%~nxi"
Grundsätzlich wird mit dieser Schleife jeder vom Befehl
dir /b "C:\getondemand_PDF\*.pdf"
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
ren "%%~i" "%Eingabe%#%%~nxi"
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
  • 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"
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
ren "C:\getondemand_PDF\%%i" "%Eingabe%#%%~nxi"
verwendet werden sollte, da, wie erwähnt, in "%%i" eben nur der Dateiname steht.

Grüße
bastla
Member: MrSonei6
MrSonei6 Jul 24, 2009 at 06:34:00 (UTC)
Goto Top
ahh vielen Dank ;)

also könnte ich deiner Meinung nach dieses Tokens weglassen? hab gesucht und raus bekommen das "tokens" aus einer Datei auslesen lässt.
Dies brauch ich hier nicht oder? Und zu den %%~i der Wert "i" wurde der wirlkürlich verwendet? Könnte es auch "%%~a" oder "%%~hallo" heißen?
Member: bastla
bastla Jul 24, 2009 at 06:49:01 (UTC)
Goto Top
Hallo MrSonei6!
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