Batch Datei Variablen

2 Antworten

Soll das der verunglückte Versuch sein einen Text aus einer Datei zu lesen?

set/p dient der Abfrage der Standardeingaben (Tastatur). Zudem ist die von Dir verwendete Syntax für die Angabe der verwendeten Variable falsch.

richtig sähe dies so aus:

set /p "Variable=Text der  angezeigt werden soll"

möchtest Du die 1.Zeile einer Textdatei in eine Variable lesen , funktioniert dies mit set/p indem man die -Standardeingabe auf die betreffende TextDatei umleitet:

set /p "Variable=" <"MeineDatei.txt"

Batch ist kompliziert! ...aber erlaubt viel Trickserei. somit ginge auch folgendes:

MeineDatei.txt

Passwort=123@Passwort

demo.cmd

set /p "Input=" <"MeineDatei.txt"  &rem erste Zeile  aus Datei lesen
echo inhalt  von Input : "%Input%"
set "%Input%"        &rem Aus dem inhalt von "input" eine dynamische Variable  erzeugen
echo Inhalt  der  dynamisch erzeugten  Variable Paswort: "%Passwort%"
pause

möchtest Du mehr als eine Zeile . bzw "Variablenname=Inhalt" -kombination aus einer Datei einlesen und zuweisen musst Du dies mit einem For/f-Loop tun:

MeineDatei.txt

Passwort_1=123@Passwort
Passwort_2=1Horn-Pups
Passwort_3=4712Jauche

demo.cmd

for /f "usebackq tokens=*" %%a in ("MeineDatei.txt") do (
  set "%%a"
)
set "Passwort_"  &rem mal alle Variablen anzeigen, die mit "Passwort_" begeinnen

echo pw1: "%Passwort_1%"
echo pw3: "%Passwort_2%"
echo pw3: "%Passwort_3%"
pause
Woher ich das weiß:eigene Erfahrung – Ich mach das seit über 30 Jahren

Kannst Du nicht. Wenn Du einen neuen Namen willst, erstell eine neue Variable.

Woher ich das weiß:Berufserfahrung – C#.NET Senior Softwareentwickler

Erzesel  28.05.2025, 09:02

Man kann auch in Batch dynamisch Variablen erzeugen. selbst (Pseudo)Arrays sind machbar:

demo.cmd

for /l %%a in (0,1,9) do (
    set "MeinArray_%%a=blubb %%a"
)
rem  pseudo-Array mal  anzeigen:
set "MeinArray_"

der "Index" eines solchen "Arrays" ist auch nicht auf Zahlen beschränkt

for %%a in ("Oma","Opa","Franz","Nina") do (
    set "Passwort_%%~a=blubb@%%~a"
)

set "Passwort_"

.

Palladin007  28.05.2025, 09:52
@Erzesel

Aber war nicht die Frage, eine Variable umzubenennen?
Dann hab ich die Frage falsch verstanden.

Erzesel  28.05.2025, 11:09
@Palladin007

Hast schon recht.

Bei derartig verschwommenen Fragen kann ich auch nur im trüben fischen und aus den spärlichen/fehlerhaften Angaben versuchen abzuleiten, was der FS letztlich bewirken möchte.

Wie kann ich die Variable nach dem Inhalt des Textdokuments umbennenen?

Mein "Richer" hat mir bei der Fragestellung suggeriert, das der FS mir mit seinem "type Passwort.txt" wohl eher eine "Variablenname=Wert" Kombination aus einer externen Datei einlesen möchte.

...also mal so... der Inhalt der Datei wäre nur eine Zeile mit dem zukünftigen Variablennamen:

test.txt:

MeinNeuerVarName

renVar.cmd

set "AlterVariablenName=Wert der Variable"
set /p "Input=" <"test.txt"  &rem erste Zeile (neuen Namen) aus Datei lesen
set "%Input%=%AlterVariablenName%"  &rem wert der Ursprünglichen variable dem neuen  dynamisch erzeugten Namen zuordnen
set "AlterVariablenName="  &rem ursprüngliche Variable löschen


echo Inhalt  der  dynamisch erzeugten  Variable Paswort: "%MeinNeuerVarName%"
rem   man  muss  nicht mal den neuen Namen kennen  mit einen "call" und   verddreifachen der %-Zeichen vor dem Befehl  kann  man sozusagen über  eine "PseudoZeiger" agieren 
call echo Inhalt  der  dynamisch erzeugten  "%input%" ist: "%%%input%%%"
pause

...natürlich läuft es auf das erzeugen einer neuen Variable und das löschen der Alten hinaus... das Ergebniss ist jedoch ein VariablenName mit dem Inhalt der Alten.

Letztlich ist das Umbenenen eines Variablennamens völliger Quatsch . Solche Spielereien funktionieren ohnehin nur mit Interpretersprachen, da nur diese zur Laufzeit Zugriff auf vergebene Variablennamen haben.

Palladin007  28.05.2025, 12:13
@Erzesel

Ja, ist sehr schwammig, kann man beides herauslesen.

Letztlich ist das Umbenenen eines Variablennamens völliger Quatsch

Naja, nicht so ganz - Batch hat (meine ich?) kein Äquivalent zum Dictionary (wie es in .NET heißt), daher bleibt für dynamische Geschichten nur das Umbenennen der Variable übrig.

Oder einfach nicht mit Batch arbeiten :D Powershell ist nicht gerade toll, aber viel mächtiger und man hat alle .NET-Funktionen zur Verfügung.
Und das schreib ich, der vor 12 Jahren Mal eine kleine Verschlüsselung in Batch geschrieben hat :D