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, 680 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
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 ...

Peripheriegeräte
PCIe 2.0 und USB 3.1 Gen 2
gelöst Frage von PeterleBPeripheriegeräte4 Kommentare

Macht auf einem älteren Mainboard mit (nur) PCIe 2.0 die Nachrüstung einer Karte mit USB 3.1 Gen 2 überhaupt ...

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

Microsoft
Always Connected PC: Windows RT 2.0
Information von FrankMicrosoft1 Kommentar

Im Prinzip konnte man es sich bereits denken. Es sieht so aus, als würde ein weiteres "Windows RT" Debakel ...

Neue Wissensbeiträge
Sicherheit

Chrome 79 übermittelt eingegebene Kennwörter nach Hause

Information von DerWoWusste vor 2 TagenSicherheit15 Kommentare

Ab sofort warnt Chrome standardmäßig Nutzer davor, wenn aus Leaks bekannte Passwörter zum Einsatz kommen. Beim Besuch einer Website, ...

Viren und Trojaner
Trend Micro WFBS 10 SP1 Patch 2185
Tipp von Abramelin vor 2 TagenViren und Trojaner3 Kommentare

Hi, Hab gerade gesehen das Patch 2185 für TM WFBS 10 SP1 erschienen ist! Werde mal Morgen den Patch ...

Viren und Trojaner

Neuer Virus lässt Windows im abgesicherten Modus starten

Tipp von transocean vor 3 TagenViren und Trojaner7 Kommentare

Moin, lest selbst. Grüße Uwe

Sicherheit
Böser Bug in Domänenkennwortrichtlinie!
Information von DerWoWusste vor 3 TagenSicherheit2 Kommentare

Ich spiegele mal Borncity: In Kürze: Nutzt Ihr eine Domänen-Kennwortrichtlinie der herkömmlichen Art (keine PSO-Richtlinie)? Ja? Und plant Ihr, ...

Heiß diskutierte Inhalte
Netzwerke
Netzwerkstruktur für Zuhause 1Anschluss 2 Netze
Frage von chrishaefNetzwerke27 Kommentare

Hallo liebes Forum, Ich hätte da mal eine Frage an die Profis. Bei uns liegt ein DSL Anschluss im ...

Windows 7
Windows 7 - Ein DSL Speedtest - Mehrere Browser - Unterschiedliche Ergebnisse
Frage von AusAltwirdNeuWindows 725 Kommentare

Hallo zusammen, mein PC hat zwei Rj45 Anschlüsse. Beide sind auf Gigabit Vollduplex eingestellt. An beiden Anschlüssen erreiche ich ...

Batch & Shell
Eingabeaufforderung macht Pause bei Datensicherung mit Robocopy auf DVD
Frage von anmelderBatch & Shell23 Kommentare

Hallo, ich sichere einige Daten per Robocopy auf DVD-RAM. Wenn ich nicht am Rechner sitze macht der Befehl nach ...

Windows Server
Neuinstallation Windows Server 2016 - wie würdet Ihr vorgehen
Frage von mollyneoWindows Server21 Kommentare

Moin, ich habe gerade ein kleines Problem mit einer bestehenden Installation eines "Fachmanns" und möchte gern wissen, wie ihr ...