Batch Datei Variablen
set /p %Passwort%="type Passwort.txt" Wie kann ich die Variable nach dem Inhalt des Textdokuments umbennenen?
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
Kannst Du nicht. Wenn Du einen neuen Namen willst, erstell eine neue Variable.
Aber war nicht die Frage, eine Variable umzubenennen?
Dann hab ich die Frage falsch verstanden.
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.
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
Man kann auch in Batch dynamisch Variablen erzeugen. selbst (Pseudo)Arrays sind machbar:
demo.cmd
der "Index" eines solchen "Arrays" ist auch nicht auf Zahlen beschränkt
.