Batch Datei Daten auslesen?
Hey, ich programmiere wenn man es so nennen kann gerade eine Batch Datei.
Dabei bin ich auch folgendes Problem gestoßen, ich habe eine Datei mit dem Namen config.txt diese Datei will ich mit Batch auslesen.
Nun ist das problem nicht das auslesen sondern die variablen darin zu benutzen.
Die config sieht ca so aus:
########
#Info's#
########
Name: Pfad
Name: Pfad
Dabei will ich zum einen den Name auslesen und zum anderen den Pfad öffnen.
Wenn soll eine Abfrage kommen. Willst du den Pfad %pfad% mit dem name %name% öffnen? (y/n)
Diese Frage methode bekomme ich auch noch hin. Aber der benutzer soll unterschiedlich viele Name: Pfad teil in die config.txt schreiben können. Und es soll für jeden einzeln diese Abfrage von oben kommen.
Wie ist das möglich das ich für jeden eintrag eine echo %name%: %pfad% zeile zum beispiel ausgeben kann.
1 Antwort
Falsch konzipiert... du kannst keine Variablen aufrufen/verarbeiten/speichern deren Namen man nicht kennt.
Unter Batch kann man zumindest dynamisch Variablennamennamen erzeugen(das geht mit keiner anderen Sprache).
Um auf derartige Konstrukte zuzugreifen muss man wenigstens den ersten gemeinsamen Teil solcher Variablennamennamen kennen.
@echo off
setlocal enableDelayedExpansion
rem ich weiß nicht welchen zufälligen Namen die 10 erzeugten Variablen bekommen ;)
rem aber alle haben den gleichen Präfix.
for /l %%a in (1,1,10) do (
rem erzeuge zufälligen Namen mit zufällgem Pfad als Inhalt
set "__wasGemeinsames.Name!random!=myfolder\irgendwas!random!"
)
rem anzeigen
set "__wasGemeinsames."
pause
Damit lässt sich arbeiten...
Die nächste Kritik... So hübsch Deine configdatei auch sein mag sie ist unpraktisch:
- Header machen beim Einlesen nur Ärger (klar, kann man mit skip=x überspringen)
- Variablenname : wert ...ist Käse, weil man Leerzeichen Doppelpunkt Leerzeichen loswerden muss um daraus Variable=wert zu machen (...und beim Spechern umgedreht)
Alles machbar, kein Thema. aber speichern aller Variablen mit gleichem Präfix geht mit einem Befehl:
set "__wasGemeinsames.">"config.txt"
...auch zum Einlesen aller Variablen nur eine Zeile.
for /f "usebackq tokens=*" %%a in ("config.txt") do (set "%%a")
...wenn Der Header und die Doppelpunkte nicht sein müssen sähe das Ganze in etwa so aus:
demo.cmd
@echo off
rem umlaute anzeigen
chcp 65001 >nul
setlocal enableDelayedExpansion
rem Abeitsverzeichnis ist das Batchverzeichnis, egal von wo die Batch aufgerufen wird (so stimmen die Pfade immer)
cd "%~dp0"
rem Basispfad f?r alle Nutzerordner (zur Demo Pfad dieser Batch\MyUsers)
set "baseUsersFolder=MyUsers"
rem erzeuge ihn, wenn er noch nicht existiert.
md "%baseUsersFolder%" 2>nul
rem wenn bereits die config.txt existiert alle gespeichten Variablen einlesen
if exist "config.txt" (
for /f "usebackq tokens=*" %%a in ("config.txt") do (set "%%a")
)
set /p "Name=Gib Deinen Namen ein:"
rem VariablenNamen mit Leerzeichen sind nicht gut also Tauschen wir Leerzeichen gegen Underline_
set "currendName=%Name: =_%
rem jetzt arbeiten wir mit der dynamischen Variable aus Präfix __@. und %currendName%
rem existiert schon der Name unter den eingelesenen Variablen?
if defined __@.%currendName% (
echo %Name% wurde gefunden.
rem ArbeitsDublikat um nicht ständig mit unserer ZauberVariable rumzueiern
set "currendPath=!__@.%currendName%!"
) else (
echo Der Name ist neu.
echo Ich lege nun eine Nutzerbereich für Dich an.
rem erzeuge eine ID (eigentlich nur genaue Zeit und eien Zufallszahl nahezu unmöglich das weltweit zwei die Gleiche haben...)
for /f "skip=1 tokens=2,3 delims=,.+" %%a in ('wmic os get LocalDateTime /format:csv') do (set "id=%%a%%b"&set "id=!id:~2,15!!random!")
rem ordne relativen Pfad aus ID unserer dynamisch erzeugten Variable !__@.%currendName%! zu
set "__@.%currendName%=%baseUsersFolder%\!id!"
set "currendPath=!__@.%currendName%!"
rem erzeuge Unterordner für den Nutzer
md "!currendPath!" 2>nul
rem mache ihn unsichtbar
attrib "!currendPath!" +h
echo NutzerOrdner wurde erzeugt.
rem alle __@.Variablen wieder in die confg.txt schreiben
set "__@.">"config.txt"
)
rem das war es schon, jetzt hat sich Dein Nutzer eingeloggt und du kannst mit %name% den "currend-Variablen fortfaren"
rem dem Nutzer geht es nichts an wo seine Sachen gespeichert werden.
rem schreibe eien Datei in den Ordner des aktuelen Nutzers
echo blubb ich bin ein Text %random% >"%currendPath%\meineTextDatei.%random%.txt"
echo Hallo %Name% ^^!
echo Du hast folgende Dateien in Deinem Ordner:
dir /b "%currendPath%\*.*"
rem offne zur Demo den Ordner im Explorer
start "" "%currendPath%"
pause
exit /b
Die config.txt ist nun nicht mehr so hübsch, aber wenn interessiert's?
..sag mal...👿 geht man so mit Leuten um, welche sich hinsetzten und Dir etwas zeigen?
Noch dazu heißt es "Prefix" und nicht "Präfix".
Geht's noch? Präfix .
programmiere wenn man es so nennen kann gerade eine Batch Datei. ... Nun ist das problem nicht das auslesen...
Wer eine Datei in Batch auslesen kann... hat bereits den For/f-Loop im Griff und ist kein blutiger Anfänger mehr.
...damit kann ich davon ausgehen, das wenigsten die banalsten Anfängergundkenntnisse einigermaßen vorhanden sind.
- rem Kommentar Anmerkung
...damit erklärt sich weshalb das vor fast jeder Zeile steht und noch dazu ein deutschsprachiger Text, der wohl überhaupt keinen Einfluss auf den Ablauf der Batch hat.
Außerdem wäre schön wenn du erklärst was das macht waß du da aufgeschrieben hast
..ja genau das machen die vielen rem-Zeilen... , für einen Profi hätte ich mir nicht die Mühe gemacht simple Sachen wie chcp oder md zu kommentieren.
Man kann auch in der Console einfach mal die Hilfe zu einem Kommando aufrufen Befehl /? (zB. rem /? oder md /?)
So wie ich in obigem Post Dinge erkläre, ist das schon auf sehr niedrigem Level. Darunter kommt eigentlich nur noch Handpuppen, Äpfel und freundliche Ameisen, welche Sachen durch die Gegend schleppen.
Eigentlich hatte ich mit einer Nachfrage enableDelayedExpansion und !Variable.index! gerechnet.. ,weil das ein wirklich heikles Thema ist..😨
Wenn Du vielleicht noch noch ein Paar Schreibfehler findest, die darfst Du behalten: (eine Erklärung zu fehlenden Zeichen, Buchstabendrehern etc findest Du in meinem Profil)
Sorry das du direkt denkst, das man ein Profi ist. Hier gibt es auch noch andere und nicht nur Profis.
Außerdem habe ich ganz normal geschrieben. Und bin dich in keiner weise angegangen, also verstehe ich den "👿" nicht.
Ja es geht noch da es Prefix heißt. Am ende heißt es bei dir auch noch Kemie und nicht Chemie.
Noch dazu mache ich Batch nur nebenbei. Mein haupt ding ist eh php backend. Das macht wenigstens sinn.
Damit ist auch schon deine nächste Frage geklärt. Ich bin ein anfänger und weiß nur die minimalsten anfänger commands.
Da ich nicht wusste das rem eine Kommentar zeile ist. Wusste ich auch nicht das dass die erklärung dazu ist.
Dann komme bitte nicht das ich angeblich mit dir "👿" schreibe, wenn du es selber machst. Mit solchen dingen wie:
Darunter kommt eigentlich nur noch Handpuppen, Äpfel und freundliche Ameisen, welche Sachen durch die Gegend schleppen.
Gerne kannst du mir die 2 Befehle noch erklären von den du dachtest das ich danach Fragen würde, aber ne warte ich muss ja direkt ein profi sein. Deshalb weiß ich ja diese Begriffe.
Und du kannst behinderungen nicht immer als Ausrede nehmen. Man kann alles lernen und antrainieren.
Bei nächste unfreundlichen Kommentare wirst du gemeldet.
MfG DoGame5
Bei nächste unfreundlichen Kommentare wirst du gemelde
Echt ... Ich zittere.. 😅 ... bis ins Mark... Was passiert wohl? Werde ich entlassen? Werde ich nicht mehr bezahlt?...ach ich vergaß, ich mache das ja zum Spaß , gratis... Ich habe also keinen Schaden... Ich habe keine Fragen, welche mir nicht beantwortet werden... 🤔🥱
nicht immer als Ausrede nehmen. Man kann alles lernen und antrainieren.
Das ist keine Ausrede sondern gelebte Realität. Jeden Tag seit 10 Jahren...
Was Du da von Dir gibst ist eine Verhöhnung gegenüber Menschen, welche ständig im Wettlauf mit dem Fortschreiten einer Krankheit sind. Ja ich lerne und trainiere jeden Tag... , das verzögert , aber bringt keinen alten Zustand zurück.
Ich wünsche niemandem was Böses, aber Leute wie Du sollten für ein Paar Wochen erleben wie es ist wenn sich klammheimlich die eine oder andere Funktion verabschiedet.
Im übrigen wünsch ich Dir einen schönen und gesunden Rest vom Leben.
Die config muss nicht "hübsch" sein. Außerdem wäre schön wenn du erklärst was das macht waß du da aufgeschrieben hast weil als anfänger ist das komplett bahnhof.
Noch dazu heißt es "Prefix" und nicht "Präfix".
Kannst du bitte sagen was die Befehle:
rem, md, chcp