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, 7731 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
Backup

2016 - Restore mit WBAdmin - iSCSI Device als Sicherungsziel

Erfahrungsbericht von Henere vor 55 MinutenBackup

Servus zusammen, was mich eben einige graue Haare gekostet hat Server 2016. Ich habe meinem Server eine weitere M2 ...

Humor (lol)
(Part num your Hacked phone. +XX XXXXXX5200)
Erfahrungsbericht von Henere vor 2 TagenHumor (lol)5 Kommentare

Mein Handy hat aber ne ganz andere Endnummer. Muss ich mir jetzt Sorgen machen ? :-) Vielleicht betrifft es ...

Exchange Server

Letztes Update für Exchange 2016 CU9 war in gewisser Weise destruktiv

Erfahrungsbericht von DerWoWusste vor 2 TagenExchange Server7 Kommentare

Kurzer Erfahrungsbericht zu Exchange2016-KB4340731-x64 Der Exchangeserver hat wie gewöhnlich versucht, es in der Nacht automatisch zu installieren - abgesehen ...

Erkennung und -Abwehr

Neue Sicherheitslücke Foreshadow (L1TF) gefährdet fast alle Intel-Prozessoren

Information von Frank vor 3 TagenErkennung und -Abwehr3 Kommentare

Eine neue Sicherheitslücke, genannt Foreshadow (alias L1TF) wurde auf der Usenix Security 18 von einem Team internationaler Experten veröffentlicht. ...

Heiß diskutierte Inhalte
Netzwerke
Netzwerk-Architektur mit VLANs
Frage von niLuxxNetzwerke40 Kommentare

Liebe Community, Ich hätte eine kurze Frage an euch. Ich werde in Kürze das Netzwerk unserer (sehr) kleinen Firma ...

Netzwerke
SSH - Wieso werde ich nach VPN Verbindung rausgeschmissen?
Frage von VernoxVernaxNetzwerke10 Kommentare

Hallo, ich habe es endlich geschafft mein Handy mit einer VPN Verbindung an meinen Router anzuschließen. Nach der Login ...

Microsoft
Ist es möglich ein reines Volume C Datenbackup in eine Hyper-V VM zu konvertieren?
Frage von Frank84Microsoft10 Kommentare

Hallo zusammen, ich habe hier ein Backup vorliegen, das ausschließlich das komplette C:\ Volume eines physischen Server 2012 enthält. ...

Windows Server
Freigaben per Default nur für Domänen-Benutzer
Frage von tierwoWindows Server8 Kommentare

Hallo gibt es eine Möglichkeit, einen Server 2016 so zu konfigurieren (z.B. per GPO), dass Freigaben die erstellt werden ...