Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

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

Werte aus FOR-Schleife abfragen bzw. abfangen

Frage Entwicklung Batch & Shell

Mitglied: der-blob

der-blob (Level 1) - Jetzt verbinden

14.05.2011, aktualisiert 12:22 Uhr, 3743 Aufrufe, 4 Kommentare

Ich habe eine kleine Datei mit mehren Zeilen, ich muss die Zeilen mit verschiedenen sachen berechnen & ersetzen, dies ist auch kein problem, mit meiner folgenden lösung


01.
..... 
02.
.... 
03.
for /f "usebackq delims=" %%i in ("%alterdatei%") do ( 
04.
    for /f "tokens=2-4 delims=, " %%a in ("%%i") do ( 
05.
        set "Done=" 
06.
        if "%%a"=="WERT1"( echo 2%%b,9%%c, test42 ) 
07.
		set "Done=true" 
08.
09.
        if "%%a"=="WERT2" ( 
10.
??? was muss hier rein? 
11.
12.
... 
13.
 
14.
15.
 
16.
 
Das ganze gerechne usw. klappt auch für jede zeile, jedoch ist das problem, das wenn

WERT2

in einer zeile steht ich diverse parameter aus WERT1 benötige.

datei sieht wie folgt aus:

WERT1
WERT1
irgendwas ....
WERT1
WERT2
WERT1
usw.

wenn ich nun WERT2 bearbeiten möchte muss der WERT1 welche _VOR_ WERT2 steht gelöscht werden! Und zudem benötige ich das %%b aus WERT1

p.s ist es möglich Rechnungen (cosinus / +/- ...) in der FOR schleife mit einzuarbeiten? - habe diese z.zt. nur seperat, wär halt nur ne "schönheitsanpassung" das mit den Rechnungen , dies ist aber nur eine optionale kleine frage am rande

Ich habe in der SUFU leider nichts genaues gefunden womit ich weiter komme... - vielleicht bin ich einfach nur zu blöd dafür :S - was ich nicht Hoffe.
Mitglied: bastla
14.05.2011 um 12:44 Uhr
Hallo der-blob und willkommen im Forum!
muss der WERT1 welche _VOR_ WERT2 steht gelöscht werden!
Was meinst Du damit - aus der Datei gelöscht?

Ansonsten:
Und zudem benötige ich das %%b aus WERT1
Füge
  • am Anfang (möglichst ohne Tippfehler, wie es mir hier in der ersten Fassung gelungen war )
setlocal enabledelayedexpansion
  • nach Zeile 7
set "ParamB=%%b"
  • und im "WERT2"-Teil die benötigte Verarbeitung (als Beispiel nur eine Ausgabe)
echo !ParamB!
hinzu.
ist es möglich Rechnungen (cosinus / +/- ...) in der FOR schleife mit einzuarbeiten?
Was per CMD berechnet werden kann, siehst Du mit
set /?
ab
Die /A-Option gibt an ...
Grüße
bastla

P.S.: Falls Du nicht noch irgendwo die gesamte Zeile (also "%%i") am Stück brauchst, sollten sich eigentlich
01.
for /f "usebackq delims=" %%i in ("%alterdatei%") do ( 
02.
    for /f "tokens=2-4 delims=, " %%a in ("%%i") do (
zu
01.
for /f "usebackq tokens=2-4 delims=, " %%a in ("%alterdatei%") do (
zusammenfassen lassen ...
Bitte warten ..
Mitglied: der-blob
14.05.2011 um 15:02 Uhr
VIELEN HERZLICHEN DANK!!!!!
so ähnlich hatte ich es schon, nur da hatte mir das
01.
enabledelayedexpansion
gefehlt!
zwecks mit den SET rechnen habe ich schon drin gehabt, nur anderer stelle, nun klappt dies auch - war nen fehler meiner seits.



und das mit dem wert löschen, die datei enthält ja mehrfach WERT1 - dieser soll auch drinne bleiben jedoch wenn WERT2 folgt soll wert1 gelöscht werden:

vorher:

WERT1
WERT1
irgendwas ....
WERT1
WERT2
WERT1
usw.

nacher:
WERT1
WERT1
irgendwas ....
WERT2
WERT1
usw.


der WERT! welcher in der Zeile vor WERT2 steht soll komplett (also ganze zeile) gelöscht werden, ich bekomm das nur hin das er immer immer ALLE zeilen mit WERT1 löscht, jedoch nicht nut die , welche WERT2 als folgezeile haben.

denn wenn ich über findstr gehe und die zeilen in extra bzw. neue datei schreibe übernimmt er ja auch die WERT1 zeilen welche vor WERT2 zeilen stehen...

ich hoffe ich habe es nun verständlich geschrieben.
Bitte warten ..
Mitglied: bastla
14.05.2011 um 18:09 Uhr
Hallo der-blob!

Etwa so (mit Deinem "vorher"-Beispiel als Inhalt der "Vorher.txt" kurz getestet):
01.
@echo off & setlocal 
02.
set "Ein=Vorher.txt" 
03.
set "Aus=Nachher.txt" 
04.
set "Suche1=WERT1" 
05.
set "Suche2=WERT2" 
06.
 
07.
set "Zeile=" 
08.
del "%Aus%" 2>nul 
09.
for /f "tokens=1* delims=:" %%i in ('findstr /n "^" "%Ein%"') do call :ProcessLine "%%j" 
10.
if defined Zeile >>"%Aus%" echo %Zeile% 
11.
goto :eof 
12.
 
13.
:ProcessLine 
14.
echo %1|findstr "%Suche2%">nul && goto :Ausgabe 
15.
if defined Zeile >>"%Aus%" echo %Zeile% 
16.
echo %1|findstr "%Suche1%">nul && ( 
17.
    set "Zeile=%~1" 
18.
    goto :eof 
19.
20.
:Ausgabe 
21.
>>"%Aus%" echo\%~1 
22.
set "Zeile=" 
23.
goto :eof
Es wird für jede Zeile (auch wenn es eine Leerzeile ist) der "%Ein%"-Datei das Unterprogramm ":ProcessLine" mit Übergabe der Zeile (unter Anführungszeichen) als Parameter %1 aufgerufen.

Wenn diese Zeile "WERT2" enthält (falls die Überprüfung auf "nur aus WERT2 besteht" vorzunehmen wäre, könnte als Zeile 14
if %1=="%Suche2%" goto :Ausgabe
verwendet werden), wird sie ausgegeben und eine ev zwischengespeicherte Zeile (%Zeile%) mit "WERT1" wird verworfen.

Enthält die Zeile nicht "WERT2", wird zunächst eine ev zwischengespeicherte Zeile (%Zeile%) ausgegeben.

Dann wird geprüft, ob die aktuelle Zeile "WERT1" enthält; wenn ja, wird die Zeile zwischengespeichert und die Verarbeitung beendet (= Rücksprung aus dem Unterprogramm mit "goto :eof").

Enthält die aktuelle Zeile nicht "WERT1", wird sie ausgegeben und eine ev zwischengespeicherte Zeile gelöscht (wurde ja bereits ausgegeben oder ohnehin nicht benötigt).
Anzumerken wäre noch, dass Du Dich hinsichtlich des Inhaltes der Zeilen sehr bedeckt gehalten hast und ich daher nicht weiß (und nicht berücksichtigen konnte) , ob/dass zB eine Zeile mit einem ":" beginnt oder Sonderzeichen enthält ...

Grüße
bastla
Bitte warten ..
Mitglied: der-blob
14.05.2011 um 18:26 Uhr
vielen herzlichen dank, klappt 100%ig

und vielen dank für die schnelle antwort, dir noch ein schönes wochenende

grüße, der blob
Bitte warten ..
Neuester Wissensbeitrag
Internet

Unbemerkt - Telekom Netzumschaltung! - BNG - Broadband Network Gateway

(3)

Erfahrungsbericht von ashnod zum Thema Internet ...

Ähnliche Inhalte
Batch & Shell
gelöst CMD: icacls in for-Schleife (2)

Frage von Lowrider614 zum Thema Batch & Shell ...

Batch & Shell
gelöst Batch Problem bei einer For Schleife (2)

Frage von Juergen42 zum Thema Batch & Shell ...

Batch & Shell
gelöst For Schleife kaputt? (5)

Frage von Peter32 zum Thema Batch & Shell ...

Batch & Shell
Batch: Variable Expansion in einer FOR-Schleife (9)

Frage von .Sessl zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...

Grafikkarten & Monitore
Tonprobleme bei Fernseher mit angeschlossenem Laptop über HDMI (11)

Frage von Y3shix zum Thema Grafikkarten & Monitore ...

Microsoft Office
Keine Updates für Office 2016 (11)

Frage von Motte990 zum Thema Microsoft Office ...