Batch Datei Daten auslesen?

1 Antwort

Vom Beitragsersteller als hilfreich ausgezeichnet

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?

Woher ich das weiß:eigene Erfahrung – Ich mach das seit 30 Jahren

DoGame5 
Beitragsersteller
 13.03.2021, 10:07

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

Erzesel  13.03.2021, 12:32
@DoGame5

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

DoGame5 
Beitragsersteller
 13.03.2021, 17:23
@Erzesel

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

Erzesel  13.03.2021, 18:45
@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.

DoGame5 
Beitragsersteller
 13.03.2021, 20:02
@Erzesel

Ok, sorry ich wollte nicht so fies zu dir sein. Danke für deine Hilfe und ich hoffe dir geht es irgendwann besser mit deiner Krankheit oder Behinderung ich bin mir nicht sicher was es war

JoJoAS  19.11.2021, 17:12
@DoGame5

rem: anmerkung (glaube ich ) md: neus verzeichnis erstelln

DoGame5 
Beitragsersteller
 20.11.2021, 18:32
@JoJoAS

ist schon lange her aber danke