Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

gelöst Variablen Zusammenbauen 2.0 ( Batch )

Mitglied: clragon

clragon (Level 1) - Jetzt verbinden

14.11.2016 um 17:08 Uhr, 640 Aufrufe, 6 Kommentare, 3 Danke

Hey Leute.

Ich bin's mit dieser wunderschönen Fortsetzung des "Großen Variablen Problems"

Damals ging es darum in einem goto Loop eine Variable aus einem Counter und einem Namen zusammenzubauen.

Funktioniert soweit gut, wenn ich das mit !VariableX%counter%! praktiziere.
Leider bin ich über goto loops hinaus, da diese das Skript verlangsamen.
Ich habe ein neues Skript, welches mit einem FOR Loop Linien aus einer TXT ausliest, und diese in Line1 usw abspeichert.
Line1 usw wird so gesetzt:
01.
for /f "usebackq delims=" %%i in ("%userprofile%\Desktop\Eine.txt") do ( set /a lines+=1  & set "line!lines!=%%i" )
Ich wollte dann das Skript noch etwas verfeinern, in dem es mir die Buchstaben in der Line zählt und
diese in eine Neben-Variable sowas wie Line1le einspeichert.
Um zu sehen ob das ganze Funktioniert hab ich dann einen DEBUG echo gemacht.
Dieser zeigt mir, das das ganze ganz und gar nicht funktioniert.
Ich kann weder !Line!lines!! noch !Line!Lines!le! ausgeben. War auch klar.
Nur wie umgehe ich das jetzt?
Ich kann die !lines! Variable nicht mehr mit %Prozentzeichen% zusammen benutzen, da ich mich nun in einem FOR Loop befinde.
Aus irgendeinem Grund hat bei mir
01.
set "cline=line!lines!
02.
echo !cline!
nicht funktioniert.

hier ein Beispiel des Codes

01.
@echo off
02.
setlocal enableextensions enabledelayedexpansion
03.
for /f "usebackq delims=" %%i in ("%userprofile%\Desktop\Eine.txt") do (
04.
set /a lines+=1 
05.
set "line!lines!=%%i" 
06.
set "cline=line!lines!
07.
call :length "%%i" "line!lines!le"
08.
echo [DEBUG] Line!lines! has now the value !cline! and the length !line!lines!le!
09.
)
10.
echo pre phase completed. script stopped
11.
pause>nul
12.
exit
13.

14.
:length <measure> <output>
15.
set "string=%~1"
16.
:lengthsub
17.
if defined string ( set "string=%string:~1%" & set /a "len +=1" & goto lengthsub )
18.
set /a "%~2=%len%"
19.
exit /b
20.
Um ihn auszuprobieren müsste man eine Eine.txt Textdatei auf dem Desktop erstellen und einfach ein paar Dinge hinenschreiben z.b

Salat
Brot
Käse
Fisch
Eier
Kartoffeln

Das script solle dann eigentlich für jede Linie die Länge und den Inhalt hinter dem [DEBUG] anzeigen.

Freue mich auf HIlfe,

schönen Abend, clragon



Mitglied: rubberman
14.11.2016 um 21:14 Uhr
Hallo clragon.

Am einfachsten geht das, indem du die Variable lines in einer FOR /F Schleife verarbeitest. Die FOR Variable kannst du dann wieder in einer Variablenverschachtelung verwenden.
01.
@echo off
02.
setlocal enableextensions enabledelayedexpansion
03.
for /f "usebackq delims=" %%i in ("%userprofile%\Desktop\Eine.txt") do (
04.
  set /a lines+=1 
05.
  set "line!lines!=%%i" 
06.
  set "cline=line!lines!
07.
  call :length "%%i" "line!lines!le"
08.
  for /f %%j in ("!lines!") do echo [DEBUG] Line%%j has now the value !cline! and the length !line%%jle!
09.
)
10.
echo pre phase completed. script stopped
11.
pause>nul
12.
exit
13.

14.
:length <measure> <output>
15.
set "len=0"
16.
set "string=%~1"
17.
:lengthsub
18.
if defined string ( set "string=%string:~1%" & set /a "len +=1" & goto lengthsub )
19.
set /a "%~2=%len%"
20.
exit /b
(Hab len für jeden Aufruf auf 0 zurückgesetzt ...)

Grüße
rubberman
Bitte warten ..
Mitglied: clragon
14.11.2016 um 21:53 Uhr
Hey! Danke für die Hilfe.

Zwar funktioniert damit das Längen-Messen echt gut, jedoch wird der Inhalt der Variable trotzdem nicht angezeigt,
Bzw er wird angezeigt, nur ist das nicht der Inhalt den ich haben will.
Hier ein Bild:

Man sieht darauf, das !cline! nur die aktuelle Linie angibt, jedoch nicht den Inhalt der Linie, wie gedacht.

Vieleicht hast du ja auch dafür eine Idee.

LG clragon
screenshot_1 - Klicke auf das Bild, um es zu vergrößern
Bitte warten ..
Mitglied: rubberman
LÖSUNG 14.11.2016 um 22:12 Uhr
Ach so, hab ich übersehen. Aber das Prinzip ist dasselbe.
01.
@echo off
02.
setlocal enableextensions enabledelayedexpansion
03.
for /f "usebackq delims=" %%i in ("%userprofile%\Desktop\Eine.txt") do (
04.
  set /a lines+=1 
05.
  set "line!lines!=%%i" 
06.
  call :length "%%i" "line!lines!le"
07.
  for /f %%j in ("!lines!") do (set "cline=!line%%j!" &set clength=!line%%jle!)
08.
  echo [DEBUG] Line!lines! has now the value !cline! and the length !clength!
09.
)
10.
echo pre phase completed. script stopped
11.
pause>nul
12.
exit
13.

14.
:length <measure> <output>
15.
set "len=0"
16.
set "string=%~1"
17.
:lengthsub
18.
if defined string ( set "string=%string:~1%" & set /a "len +=1" & goto lengthsub )
19.
set /a "%~2=%len%"
20.
exit /b
Wenn es sich irgendwie vermeiden lässt, solltest du natürlich die Erstellung solcher assoziativer Arrays weglassen und gleich mit der FOR Variablen arbeiten...
Bitte warten ..
Mitglied: Biber
15.11.2016, aktualisiert um 10:44 Uhr
Moin clragon,

ohne an rubbermans Lösung reumzumäkeln . ich würde eine andere Strategie wählen.
Das Simulieren von Array-Strukturen/verschachtelten Variablen verursacht relativ einzigartige Probleme bei der CMD-Batch.


Weil.... hey! Wenn ich beim Durchlaufen eines Arrays nicht mal in einem Arbeitsschritt/einem Schleifendurchlauf sowohl Werte setzen kann wie auch diese auslesen.. wie soll ich so arbeiten?

(BTW: Das sind allerdings Probleme, deren Lösung auch kein Nobelpreiskomitee honorieren wird.)

In der Tendenz würde ich mich den Gegebenheiten anpassen - wenn es nicht in EINEM Arbeitsschritt möglich ist, dann machen wir das halt in zweien.

01.
@echo off
02.
setlocal enableextensions enabledelayedexpansion
03.

04.
REM Eine For-Anweisung zum Ermitteln der Werte ubnd Speichern in Variablen
05.
for /f "usebackq delims=" %%i in (".\Eine.txt") do (
06.
  set /a lines+=1 
07.
  set "line!lines!=%%i" 
08.
  call :length "%%i" "line!lines!len"
09.
)
10.
REM Eine For-Anweisung zum Ausgeben der gesetzten Variablen
11.
FOR /L %%i in (1,1,%lines%) do (
12.
echo [DEBUG] Line%%i has now the value [!Line%%i!] and the length line%%ilen=!line%%ilen!
13.
)
14.
echo pre phase completed. script stopped
15.

16.
pause>nul
17.
goto :eof 
18.
: exit
19.

20.
:length <measure> <output>
21.
set "string=%~1"
22.
set len=0
23.
:lengthsub
24.
if defined string ( set "string=%string:~1%" & set /a "len +=1" & goto lengthsub )
25.
set /a "%~2=%len%">nul
26.
goto :eof
27.
: exit /b
Ausgabe:
[DEBUG] Line1 has now the value [Salat bleifrei] and the length line1len=14
[DEBUG] Line2 has now the value [Brot mit Pommes] and the length line2len=15
[DEBUG] Line3 has now the value [Thunfischmarmelade] and the length line3len=18
[DEBUG] Line4 has now the value [Fischlebkuchen] and the length line4len=14
[DEBUG] Line5 has now the value [Eier mit Honig] and the length line5len=14
[DEBUG] Line6 has now the value [Kartoffeln] and the length line6len=10
pre phase completed. script stopped
Wenig Verrenkungen beim Setzen der Variablen in der ersten FOR-Anweisung, wenig Stress beim Auslesen in der zweiten FOR-Anweisung.

Grüße
Biber
Bitte warten ..
Mitglied: clragon
15.11.2016 um 21:08 Uhr
Heya! Danke für die Lösung.

Ich finde zwar, das meine Probleme durchaus mit einem Nobelpreis honoriert werden sollten,
und außerdem hast du Käse vergessen, aber das Script oben hat auf Jedenfalls die gewünschte Wirkung gezeigt,
nämlich die längste Linie zu finden und das war es ja auch was ich wollte.

Der Rest funktioniert jetzt auch sehr gut, und ich kann mich endlich darauf fokussieren, Die ToDo's auf der Liste
auch ABZUARBEITEN anstatt nur eine Liste dafür zu programmieren...

schönen Abend,
clragon
Bitte warten ..
Mitglied: Biber
16.11.2016 um 12:08 Uhr
Moin clragon,

und außerdem hast du Käse vergessen,
Aber dafür gab es lecker Fischlebkuchen und Thunfischmarmelade extra für dich.

Man sollte auch offen für Neues sein.

Grüße
Biber
Bitte warten ..
Ähnliche Inhalte
Router & Routing
OpenVPN Wlan im Studentenwohnheim 2.0
Frage von SacorZRouter & Routing56 Kommentare

Guten Tag liebe Gemeinde! Mit großer Sorgfalt habe ich den Thread gelesen Ich habe im grunde dasselbe Problem und ...

Peripheriegeräte
USB 2.0 Karte für PCI-X
gelöst Frage von pelzfruchtPeripheriegeräte11 Kommentare

Hallo, kurz und bündig gefragt, kennt jemand soetwas? Eine Standard PCI USB Karte dürfte wahrscheinlich nicht in einen PCI-X ...

Verschlüsselung & Zertifikate
HP Probook 430, TPM-2.0, Bitlocker
gelöst Frage von usercrashVerschlüsselung & Zertifikate5 Kommentare

Guten Abend, auf einem HP Probook 430 sind TPM-2.0 (Hardware) und Bitlocker in Win10prof aktiviert, die Windows-Partition C:\ ist ...

Festplatten, SSD, Raid
WD Red Nasware 2.0 und 3.0
gelöst Frage von Xaero1982Festplatten, SSD, Raid4 Kommentare

Hallo Zusammen, ich hab in nem Dell-Server WD-Red Platten laufen. Eine ist kürzlich ausgestiegen und ich hab ihm Rahmen ...

Neue Wissensbeiträge
Off Topic
Europawahl 2019 - Ein Statement der Jugend
Information von Frank vor 1 TagOff Topic16 Kommentare

Dies ist ein offener Brief. Ein Statement. Von einem großen Teil der Youtuber-Szene. Am Wochenende sind die EU-Wahlen und ...

Off Topic
Europawahl 2019
Information von Frank vor 2 TagenOff Topic44 Kommentare

Vom 23. bis 26. Mai 2019 findet die Europawahl in den Mitgliedstaaten der Europäischen Union statt (ja auch in ...

Humor (lol)

Minister wollen offenbar Ausweispflicht für .de-Domain

Information von Kraemer vor 2 TagenHumor (lol)7 Kommentare

Zitat von Golem.de: Die zuständigen Verbraucherschutzminister fordern einem Medienbericht zufolge offenbar eine Ausweispflicht für .de-Domains. Das soll Betrugsfälle mit ...

Off Topic
Was als Noob hier mal gesagt werden musste
Information von th30ther vor 4 TagenOff Topic5 Kommentare

Moinsen wertes Forum, ich möchte mich an dieser Stelle mal beim Forum generell und bei aqui speziell bedanken! Ich ...

Heiß diskutierte Inhalte
Router & Routing
ZyXEL ZyWALL USG 20 Routing
Frage von Oggy01Router & Routing27 Kommentare

Hallo, und wieder habe ich ein Problem mit dem Routing. Bis vor ein paar Tagen habe ich das mit ...

Off Topic
Europawahl 2019 - Ein Statement der Jugend
Information von FrankOff Topic14 Kommentare

Dies ist ein offener Brief. Ein Statement. Von einem großen Teil der Youtuber-Szene. Am Wochenende sind die EU-Wahlen und ...

LAN, WAN, Wireless
Welches Material ist das Richtige?
Frage von Motte990LAN, WAN, Wireless12 Kommentare

Guten Morgen Leute, ich bin aktuell damit beschäftigt in unserm neu gekauften Haus das Netzwerk einzubauen. Aktuell wurden bis ...

Router & Routing
2 Server über VPN (3. Netz) verbinden mit iptables
Frage von samsillaRouter & Routing8 Kommentare

Hallo, mein Ziel ist, zwei Netzwerke (192.168.0.X und 192.168.2.X) über ein VPN (10.8.0.X) zu verbinden. Folgender Netzwerkaufbau ist gegeben: ...