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 Set-Befehl innerhalb einer Schleife funktioniert nicht wie erwartet

Mitglied: Koyote

Koyote (Level 1) - Jetzt verbinden

11.02.2008, aktualisiert 12.02.2008, 7739 Aufrufe, 7 Kommentare

Hallo Experten,

mit folgendem Problem schlage ich mich seid Tagen herum und komme einfach nicht weiter. Und zwar möchte ich innerhalb einer Schleife eine Textdatei zeilenweise auslesen. Aus der jeweiligen Zeile soll ein bestimmter String extrahiert und über die Konsole ausgegeben werden. Die Entwicklung erfolgt auf einer Rechner mit Windows XP SP2.


Inhalt der Datei "test.txt":
3 Datei(en) 1.245.247 Bytes
1 Datei(en) 2.902.052 Bytes


Inhalt der Batchdatei:
for /f "tokens=1 delims=;" %%j in (c:\temp\test.txt) do (
set v1=%%j
set v2=%v1:*Datei(en)=%
echo %v2%
)
pause

Gewünschtes Ergebnis soll sein:
1.245.247 Bytes
2.902.052 Bytes

Jedoch erhalte ich als Ausgabe:
*Datei(en


Ich vermute, dass das Problem im Zusammenhang mit dem "set"-Befehl innerhalb der Schleife liegt, da der Befehl außerhalb einer Schleife erfolgreich ausgeführt wird.

Für einen Tip bin ich dankbar!



Zusatz:
Eine Lösung konnte ich mittlerweile finden, indem ich mit dem CALL-Befehl die Stringextraktion außerhalb der Schleife durchführe. Aber vielleicht gibt es noch eine elegantere Lösung.


Inhalt der Batchdatei:
for /f "tokens=1 delims=;" %%j in (c:\temp\test.txt) do (
set v1=%%j
call :prozedur
)
pause

:prozedur
set v2=%v1:*Datei(en)=%
echo %v2%
Mitglied: bastla
11.02.2008 um 17:20 Uhr
Hallo Koyote!

Deine gefundene Lösung ist nicht wirklich unelegant - aber Du kannst das Unterprogramm auch so vermeiden:
01.
for /f "tokens=2*" %%j in (c:\temp\test.txt) do echo %%k
Grüße
bastla
Bitte warten ..
Mitglied: miniversum
11.02.2008 um 17:32 Uhr
Ja das liegt daran das die Auflösung von Variabeln in Schleifen ncith geht. Da kan man eben entweder so wie Du machen indem man es in eine Extra Prozedur umleitet oder mit delayedexpansion arbeitet.

Eleganter wäre das ganze doch wenn ich das richtig verstehe einfach so:
for /f "tokens=2* delims= " %%j in (c:\temp\test.txt) do echo %%k
Bitte warten ..
Mitglied: bastla
11.02.2008 um 18:33 Uhr
... um vielleicht auch die Verwendung der angesprochenen "delayedexpansion" zu demonstrieren:
01.
@echo off & setlocal enabledelayedexpansion 
02.
for /f "delims=" %%j in (cs:\temp\test.txt) do ( 
03.
	set "v1=%%j" 
04.
	set "v2=!v1:*Datei(en)=!" 
05.
	echo !v2! 
06.
07.
pause
Nachteil dieser Vorgangsweise (allerdings hier vermutlich zu vernachlässigen): In den Daten enthaltene "!" gehen verloren, sind in einer Zeile sogar zwei "!", verschwindet auch der Text dazwischen.

Grüße
bastla
Bitte warten ..
Mitglied: Koyote
12.02.2008 um 14:57 Uhr
Danke für die schnellen Rückmeldungen. Diese konnten auf jeden Fall meine große Leere übers Batchen ein weinig füllen. Aber wie das nunmal beim Programmieren so ist, habe ich dieses Problem bereits abgehackt und bin dafür auf ein neues gestoßen.

Eigentlich müsste ich dafür einen neuen Thread öffnen, aber vielleicht lässt dieses sich auch hier lösen.

Und zwar geht es um Rechenoperationen mit Zahlen größer 32 Bit. Einen Lösungsansatz konnte ich dem Thread "freien Festplattenspeicher über die Kommandozeile abfragen" entnehmen. Genauer geht es um das vom Biber eingestellte Batch:


Biber 04.04.2006

::------snipp getfreespace.bat
@echo off & setlocal enabledelayedexpansion
@for %%a in (%*) do @for /f "tokens=3" %%i in ('dir /-c %%a:^|find /i "Bytes fre"') do call :calc %%a %%i
goto disp
:calc
(Set "Dim=GigaByte") & (set fs_drive%1=%1) & set fs_space=%2
set /a fs_space=%fs_space:~0,-9%+0
if %fs_space% == 0 (set /a fs_space=%2/1024) && set "Dim=KByte"
if [%Dim%]==[KByte] if %fs_space% GTR 1024 (set /a fs_space/=1024) && set "Dim=MByte"
if [%Dim%]==[GigaByte] if %fs_space% GTR 1024 (set /a fs_space/=1024) && set "Dim=TeraByte"
if [%Dim%]==[GigaByte] if %fs_space% GTR 1024 (set /a fs_space/=1024) && set "Dim=PetaByte"
set "fs_space%1=%fs_space% %dim% frei"
goto :eof

:disp
For %%i in (%*) do echo Laufwerk !fs_drive%%i!:\ !fs_space%%i!
::------snapp getfreespace.bat

Biber 04.04.2006


Soweit ich dieses richtig verstehe, wird vor der weiteren Verwendung einer Variabel als Zahl, diese zuvor mit

--- set /a fs_space=%fs_space:~0,-9%+0 --- und
--- if %fs_space% == 0 ---

geprüft. Nicht nachvollziehen kann ich, wie das Programm mit Zahlen größer 32 Bit umgeht.

Für jeden Tip bin ich dankbar!
Bitte warten ..
Mitglied: miniversum
12.02.2008 um 15:21 Uhr
In dieser Batch wird ja die Anzeige der freien Bytes vom Dir Befehl benutzt.
Das ist dann eine Zahl beliebiger Länge, z.B. 13967048704
Diese Zahl wird dann als Textstring weiter verarbeitet.
die in meinem Beispiel verwendete Zahl ist ja in der Einheit B. In GB wäre das (groß) einfach das gleiche wenn man die letzten 9 Stellen entfernt, also 13 GB.
Der Befehl
set fs_space=%fs_space:~0,-9%
Würde dies damit erledigen.

der hier Verwendete zusatz mit /a und der +0 macht zusätzlich aus dem Textstring eine Zahl die man dann auf größer und kleiner prüfen kann.
Wäre also die Zahl nach dem Abschneiden der letzten 9 Stellen = 0 würde das also Bedeuten das die zahl kleiner einem GB ist. Daher diese kontrolle mit
if %fs_space% == 0 ..

miniversum
Bitte warten ..
Mitglied: Koyote
12.02.2008 um 16:08 Uhr
Danke für die super schnelle Antwort.

D.h. also man muss diesem Fall mit Unschärfen leben.
Zum Beispiel:

75161927680 Bytes entsprechen 70 GigaByte, wobei das Batch 75 GigaByte ausgeben würde.
Bitte warten ..
Mitglied: miniversum
12.02.2008 um 16:16 Uhr
Ja.
Alternativ gibt es in dem Posting glaube ich auch ein VBS skript was das genau kann.

miniversum
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Set-Befehl funktioniert nicht
gelöst Frage von DschingisBatch & Shell7 Kommentare

Hallo zusammen, ich bin geraden dabei ein Programm zu erweitern. Dieses Programm soll das Feld "MobilePhone" im AD füllen. ...

Batch & Shell

Verwendung von "set" in For-Schleife funktioniert nicht

gelöst Frage von rkrausbyBatch & Shell2 Kommentare

Hallo zusammen. Ich habe ein kleines Problem beim erstellen einer Abfrage. Das Hauptproblem liegt darin dass ich innerhalb einer ...

Batch & Shell

Batchdatei: SET-Befehl funktioniert in IF ELSE nicht

Frage von Alicudi2000Batch & Shell9 Kommentare

Guten Tag In einer CMD-Batchdatei musste ich den Quellcode ändern, weil ich keine Variable im ELSE-Teil definieren konnte. Einen ...

Batch & Shell

BATCH: Minuszeichen in set-Befehl

gelöst Frage von SchottenrockBatch & Shell3 Kommentare

Guten Morgen, ich komme gerade nicht weiter und es wit wohl nur eine Kleinigkeit, aber ich steh gerade auf ...

Neue Wissensbeiträge
Router & Routing

Endlich: Reines Kabel-TV Modem in D erhältlich !

Information von aqui vor 2 TagenRouter & Routing9 Kommentare

Mit dem Technicolor TC4400-EU Modem sind nun auch Breitband Router ohne integriertes Modem oder Firewalls wie z.B. die pfSense ...

Netzwerkgrundlagen
The Illustrated TLS Connection
Information von Lochkartenstanzer vor 3 TagenNetzwerkgrundlagen

Moin, Unter findet man eine gelungene Erläuterung von TLS. Fördert sehr das verständnis darüber, was da passiert. lks

Windows 10

Zuverlässiger Remove-AppxProvisionedPackage Ausführen in W10-1803

Tipp von NetzwerkDude vor 4 TagenWindows 104 Kommentare

Moin, Remove-AppxProvisionedPackage hat in 1709 recht zuverlässig funktioniert, in 1803 ist es leider so das es gerne mail failed ...

LAN, WAN, Wireless
Erfahrung mit dem tplink eap115-wall
Erfahrungsbericht von fisi-pjm vor 4 TagenLAN, WAN, Wireless

Die Hintergründe Als ausgebildeter Fisi und ambitionierter "Hobby ITler" bin ich Netzwerktechnisch immer auf der Suche nach "schönen" Lösungen ...

Heiß diskutierte Inhalte
Netzwerkprotokolle
OpenVPN auf dem Client Verständnisfrage
gelöst Frage von bk900042Netzwerkprotokolle23 Kommentare

Hallo Community, möchte OpenVPN benutzen, um mich über VPN per RDP zu einem Server zu verbinden und auch GIT ...

Windows Server
AD User wird immer wieder gesperrt
Frage von YellowcakeWindows Server14 Kommentare

Hey ich habe einen User (ein GL User - Natürlich was denn sonst) der immer wieder gesperrt wird. Ich ...

Netzwerkmanagement
Netzwerklaufwerk verbinden nicht möglich
gelöst Frage von SteiniMNetzwerkmanagement13 Kommentare

Hallo Leute, ich bin neu hier und brauche eure Hilfe. Danke schon mal im Voraus. Ich habe folgendes Problem: ...

Switche und Hubs
OpenSource oder Freeware zur Verwaltung von Switchen
Frage von JonskezSwitche und Hubs12 Kommentare

Hallo, gibt eine kostenlose Verwaltungssoftware für Switche (überwiegend HP/Aruba)? Es sollte möglich sein, aus der Ferne z.B. die Firmware ...