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

Befehl zur Variablen - übernahme - übergabe gesucht

Mitglied: leknilk0815

leknilk0815 (Level 3) - Jetzt verbinden

04.05.2013 um 11:19 Uhr, 2584 Aufrufe, 9 Kommentare

Inhalt von %%i soll an eine Variable übergeben werden

Servus,
trotz stöberns finde ich keine Lösung, obwohl mein Problem sicher "primitiv" ist...

In einer Datei "dirtmp.txt" sind zeilenweise untereinander Dateinamen gelistet, die nacheinander in einer for- Schleife abgearbeitet werden sollen.
Die Zeilen werden ausgelesen und tauchen in %%i auf (wie gewünscht).
Der Inhalt von %%i soll bei jedem Durchgang an die Variable "datei" übergeben werden - das bringe ich nicht hin...

Hier das "Script"...
01.
set "Datei=1234.LOG" 
02.
 
03.
for /f %%i in (dirtmp.txt) do ( 
04.
echo %%i 
05.
%%i==%Datei% 
06.
rem set "Datei=%%i" 
07.
set "%%i=Datei" 
08.
echo das soll abgearbeitet werden 
09.
echo %Datei% 
10.
echo %%i 
11.
)  
12.
pause
Die drei Zeilen:
%%i==%Datei%
rem set "Datei=%%i"
set "%%i=Datei"
sind natürlich falsch, hier müsste der richtige Befehl zur Variablenübergabe hin.

Danke vorab, Gruß - Toni
Mitglied: bastla
04.05.2013, aktualisiert um 11:30 Uhr
Hallo leknilk0815!

Der Befehl wäre
set "Datei=%%i"
- die Frage ist allerdings, wozu Du die Variable %Datei% überhaupt benötigst (da sie nämlich ohne "delayedExpansion" bzw ein Unterprogramm in der Schleife ohnehin nicht unmittelbar verwendbar ist) ...

... und da "dirtemp.txt" sehr nach zwischengespeicherter Ausgabe eines "dir"-Befehles klingt: mit zB
for /f "delims=" %%i in ('dir /b *.txt') do
könntest Du diese Datei auch einsparen.

Grüße
bastla
Bitte warten ..
Mitglied: leknilk0815
04.05.2013 um 13:05 Uhr
Servus Bastla,
vielen Dank für Deine Mühe, aber hier komme ich jetzt langsam an die Grenzen...
Du hast mir neulich eine fast vollständige Vorlage für ein Script gegeben, welches aus einer GPS- Logdatei unnötige Einträge ausfiltert und am Ende noch die Kommatrennung für ein CSV- File einfügt.
Da ich für eine vollständige Route mehrere hundert Dateien bearbeiten muss, dachte ich mir, daß man die manuelle Eingabe des nächsten Files eigentlich mit dem Ergebnis eines DIR- Befehls automatisieren könnte.
Daran bastle ich nun seit 2 Tagen, aber es kommt nix vernünftiges dabei raus.
Deshalb komme ich "an die Grenzen"...
Ich glaub, ich mach es manuell...
Bitte warten ..
Mitglied: bastla
04.05.2013 um 14:04 Uhr
Hallo leknilk0815!
Ich glaub, ich mach es manuell...
Ich will Dich nicht davon abhalten - aber eine Schleife um das bestehende Script "herumzuwickeln" wird kein größeres Problem sein ...

Wenn Du also den aktuellen Stand des Scripts und die notwendigen Zusatzinformationen (etwa: Wo befinden sich die Quelldateien? Wie sollen die Zieldateien benannt werden? etc) postest, schau ich mir das nachher an.

Grüße
bastla
Bitte warten ..
Mitglied: leknilk0815
04.05.2013 um 18:26 Uhr
Servus,
das wäre natürlich absolut Spitze!
Ich brauch noch etwas Zeit, prinzipiell funktioniert das Script, ich muss noch ein paar Sachen bereinigen, damit es nicht gar so nach "Kraut und Rüben" aussieht, schön ist's ohnehin nicht.
Leider hatten wir einen Wasserrohrbruch, da muss ich auch noch was "bereinigen", nachdem Hausherr, Installateur und Maurer wieder weg sind...
Ich melde mich heut abend oder (eher) morgen.

Danke und Gruß - Toni
Bitte warten ..
Mitglied: leknilk0815
04.05.2013, aktualisiert um 22:25 Uhr
So, hier das Script.
Es ist so gestrickt, daß die zu bearbeitenden Dateien in einem Verzeichnis unter dem Verzeichnis liegen, in dem die Batch liegt, also z.B. c:\gps-Batch und das Datenverzeichnis c:\gps-batch\quelldateien.
Die daraus erzeugte CSV- Datei mit den bereinigten Daten kann im Batchverzeichnis liegen, das ist egal.
An dieser Struktur wird sich nichts ändern, da die Ursprungsdaten ohnehin manuell in das "Quelldateien"- Verzeichnis kopiert werden müssen (für jede Route extra). Das heißt, daß man den Pfad festmachen kann oder auch am Anfang mit "set /p" abfragen kann. Aber sowas bring ich selber hin, mein Problem liegt momentan eben darin, wie man die Batch zur Abarbeitung des Dir's bringt...
Sicher einfach für Dich, für mich momentan unmöglich...

Hier noch eine Zeile der Log- Dateien als Beispiel:
2012/06/01 13:27:18 G-Sensor(-0.13,-0.06,-1.00) N40 05.536 E019 45.829 5km/h
pro Sekunde werden 10 Zeilen produziert, da kommt was zusammen...

01.
@echo off & setlocal 
02.
echo ################################################################### 
03.
echo -------------- Beschreibung------------------------- 
04.
echo Zuerst bei Aufforderung Pfad und den Namen der Datei  
05.
echo (mit .log- Erweiterung) eingeben 
06.
echo ******************************************************************* 
07.
echo Dann bei Aufforderung den Namen der Ausgabe- Datei 
08.
echo (mit .log- Erweiterung) eingeben. 
09.
echo Solange dieser Name nicht geändert wird, werden die neuen Daten 
10.
echo an eine (wenn vorhandene) bestehende Ausgabedatei angehaengt! 
11.
echo soll die bestehende Ausgabedatei verwendet werden, Enter drueken 
12.
echo ################################################################### 
13.
 
14.
:nextfile 
15.
set "AusgabeFile=gps.csv" 
16.
set /p Datei=bitte Dateinamen der zu bearbeitenden Datei eingeben !Angabe erforderlich!:  
17.
set /p AusgabeFile=bitte Dateinamen der CSV- Ausgabe- Datei eingeben (default=gps.csv):  
18.
  
19.
rem set "Datei=13265400.LOG" 
20.
set "Bak=.bak" 
21.
set "AusgabeDatei=bereinigt-1.log" 
22.
set "Duplikate=Duplikate.txt" 
23.
set /a LineNo=0  
24.
 
25.
move "%Datei%" "%Datei%%Bak%" 
26.
 
27.
copy nul "%Duplikate%">nul 
28.
 
29.
for /f "usebackq delims=" %%i in ("%Datei%%Bak%") do set "Zeile=%%i" & call :ProcessLine 
30.
 
31.
set "Datei=bereinigt-1.log" 
32.
set "Bak=.bak" 
33.
set "AusgabeDatei=%AusgabeFile%" 
34.
set "Duplikate=Duplikate.txt" 
35.
set /a LineNo=0  
36.
 
37.
move "%Datei%" "%Datei%%Bak%" 
38.
copy nul "%Duplikate%">nul 
39.
 
40.
for /f "usebackq delims=" %%i in ("%Datei%%Bak%") do set "Zeile=%%i" & call :ProcessLine2 
41.
 
42.
del "%Datei%%Bak%"  
43.
del "%Duplikate%" 
44.
 
45.
goto nextfile 
46.
goto :eof  
47.
 
48.
:ProcessLine  
49.
set /a LineNo+=1  
50.
 
51.
echo Validiere Zeile %LineNo% ...  
52.
 
53.
findstr /b /c:"%Zeile:~,19%" "%AusgabeDatei%">nul && >>"%Duplikate%" echo %Zeile% || >>"%AusgabeDatei%" echo %Zeile% 
54.
goto :eof 
55.
 
56.
:ProcessLine2 
57.
set /a LineNo+=1  
58.
echo Validiere Zeile %LineNo% ...  
59.
 
60.
set "Reduziert=%Zeile:~,23%%Zeile:~64,-8%" 
61.
set "Reduziert=%Reduziert:~,10%,%Reduziert:~11,8%,%Reduziert:~23,10%,%Reduziert:~34%" 
62.
 
63.
findstr /e /c:"%Zeile:~-31%" "%AusgabeDatei%">nul && >>"%Duplikate%" echo %Zeile% || >>"%AusgabeDatei%" echo %Reduziert% 
64.
goto :eof
Bitte warten ..
Mitglied: bastla
04.05.2013 um 22:30 Uhr
Hallo leknilk0815!

Völlig ungetestet etwa so:
01.
@echo off & setlocal 
02.
set "Quelle=quelldateien" & REM hier auch absolute Pfadangabe möglich 
03.
set "Typ=LOG" 
04.
set "AusgabeFile=gps.csv" 
05.
  
06.
for /f "delims=" %%d in ('dir /b/a-d "%Quelle%\*.%Typ%"') do call :ProcessFile "%Quelle\%%d" 
07.
goto :eof 
08.
 
09.
:ProcessFile 
10.
set "Datei=%~1" 
11.
set "Bak=.bak" 
12.
set "AusgabeDatei=bereinigt-1.log" 
13.
set "Duplikate=Duplikate.txt" 
14.
set /a LineNo=0  
15.
 
16.
move "%Datei%" "%Datei%%Bak%" 
17.
 
18.
copy nul "%Duplikate%">nul 
19.
 
20.
for /f "usebackq delims=" %%i in ("%Datei%%Bak%") do set "Zeile=%%i" & call :ProcessLine 
21.
 
22.
set "Datei=bereinigt-1.log" 
23.
set "Bak=.bak" 
24.
set "AusgabeDatei=%AusgabeFile%" 
25.
set "Duplikate=Duplikate.txt" 
26.
set /a LineNo=0  
27.
 
28.
move "%Datei%" "%Datei%%Bak%" 
29.
copy nul "%Duplikate%">nul 
30.
 
31.
for /f "usebackq delims=" %%i in ("%Datei%%Bak%") do set "Zeile=%%i" & call :ProcessLine2 
32.
 
33.
del "%Datei%%Bak%"  
34.
del "%Duplikate%" 
35.
 
36.
goto :eof  
37.
 
38.
:ProcessLine  
39.
set /a LineNo+=1  
40.
 
41.
echo Validiere Zeile %LineNo% ...  
42.
 
43.
findstr /b /c:"%Zeile:~,19%" "%AusgabeDatei%">nul && >>"%Duplikate%" echo %Zeile% || >>"%AusgabeDatei%" echo %Zeile% 
44.
goto :eof 
45.
 
46.
:ProcessLine2 
47.
set /a LineNo+=1  
48.
echo Validiere Zeile %LineNo% ...  
49.
 
50.
set "Reduziert=%Zeile:~,23%%Zeile:~64,-8%" 
51.
set "Reduziert=%Reduziert:~,10%,%Reduziert:~11,8%,%Reduziert:~23,10%,%Reduziert:~34%" 
52.
 
53.
findstr /e /c:"%Zeile:~-31%" "%AusgabeDatei%">nul && >>"%Duplikate%" echo %Zeile% || >>"%AusgabeDatei%" echo %Reduziert% 
54.
goto :eof
Grüße
bastla
Bitte warten ..
Mitglied: leknilk0815
04.05.2013 um 22:45 Uhr
Servus,

ich habs mal kurz getestet, irgendwo steckt ein Fehler drin, es erfolgt keine Ausgabe, die Batch läuft aber.
Den Fehler finde ich aber (denke ich), dazu muss ich mal ein paar Pausen einbauen und sehen, was das Script nicht macht.
Da werd ich mich aber erst morgen früh damit beschäftigen, für heute hab ich irgendwie die Schnauze voll (hat aber nichts mit dem Script zu tun!)

Danke nochmal für die Hilfe, ich melde mich!
Schönen Rest- Abend noch, Gruß - Toni
Bitte warten ..
Mitglied: Endoro
05.05.2013, aktualisiert um 00:21 Uhr
Hallo bastla,
abgesehen davon, dass dort ein "%" fehlt:
01.
call :ProcessFile "%Quelle\%%d" 
führen diese Konstruktionen zu wundersamen Veränderungen von Zeichenketten, Beispiel:
01.
@echo off &setlocal 
02.
set "file=alcohol ^^ 120%%" 
03.
echo %file% 
04.
setlocal enabledelayedexpansion 
05.
echo !file! 
06.
endlocal 
07.
call:process "%file%" 
08.
goto:eof 
09.
 
10.
:process 
11.
set "pfile=%~1" 
12.
echo %pfile% 
13.
setlocal enabledelayedexpansion 
14.
echo !pfile! 
15.
endlocal 
16.
goto:eof
Output ist:
alcohol ^ 120% 
alcohol ^^ 120% 
alcohol ^^ 120 
alcohol ^^^^ 120
Gruss!
Bitte warten ..
Mitglied: leknilk0815
05.05.2013 um 10:01 Uhr
Servus zusammen,
ich hab grade das fehlende %- Zeichen (danke Endoro!!!) eingesetzt, das Script läuft jetzt wie gewünscht und produziert das eingedampfte CSV- File!
Interessanterweise dauert die CSV- Erstellung praktisch ebensolang wie die Aufzeichnung der Orginaldaten; die Files enthalten jeweils ca. 10 Minuten Echtzeit- Daten, etwa 10 Minuten hat auch das erste File benötigt, bis die CSV erstellt war. Da hat meine Kiste jetzt ein paar Tage lang was zu tun...

Vielen Dank an Bastla für die freundliche "Unterstützung" (ausser den Anforderungen war da ja nicht viel von mir...) und schönen Sonntag,

Gruß - Toni

P.S.: wenn ich das mal in Google Maps drin habe, melde ich mich nochmal.
Bitte warten ..
Ähnliche Inhalte
Batch & Shell

Übergabe der Variablen bei Call funktioniert nicht

gelöst Frage von SupidoBatch & Shell2 Kommentare

Hallo, ich komme mit menem untenstehnden Code nicht weiter. In :install bekomme ich nicht die richtigen Variablen ("%Pathdriver%" "%Printername%") ...

JavaScript

Übergabe einer php-Variable an JS

Frage von Rabauke84JavaScript1 Kommentar

Hallo zusammen, ich hab eine Problem mit einer Übergabe einer Variable in php an JS. Dazu hab ich ein ...

Batch & Shell

Powershell - übergabe von Variablen

gelöst Frage von complexBatch & Shell7 Kommentare

Moin zusammen! ich habe ein kleines Problem mit der Übergabe von Variablen (Achtung bin Powershell-Neuling) Ich möchte eine Read-Host ...

Batch & Shell

Powershell Übergabe von Variablen zwischen verschiedenen Skripten

gelöst Frage von derhoeppiBatch & Shell7 Kommentare

Hallo, folgende Thematik habe ich gerade. Ich habe ein Skript. In diesem habe ich eine Variable, die ich global ...

Neue Wissensbeiträge
Humor (lol)
IoT-Gefahr: Smartes Aquarium leckt!
Information von Lochkartenstanzer vor 2 StundenHumor (lol)3 Kommentare

Moin, Die IoT-Manie hat weitere Opfer gefunden. Ein Casino-Leck durch ein smartes Aquarium: Allerdings haben sie kein Wasser, sondern ...

Router & Routing

Olle Fritzbox 7270 mit VPN und SIP-Telefonie hinter O2 Homebox 6641 als "Modem"

Erfahrungsbericht von the-buccaneer vor 11 StundenRouter & Routing3 Kommentare

Nun war es soweit: Auch O2 hat mich mit VOIP zwangsbeglückt. Heute am Privatanschluss, in 2 Wochen ist das ...

Sicherheit

Ungepatchte Remote Code Execution-Lücke in LG NAS

Information von kgborn vor 1 TagSicherheit

Nutzt wer LG NAS-Einheiten? In den NAS-Einheiten der LG Network Storage-Einheiten gibt es eine sehr unschöne Schwachstelle, die einen ...

Windows Update

Neue Version KB4099950 NIC Einstellungen gehen verloren

Information von sabines vor 1 TagWindows Update2 Kommentare

Es ist eine neue Version des KB4099950 verfügbar, die das Problem mit den verlorenen Netzwerkeinstellungen lösen soll. Das Datum ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
OpenVPN Client Fehlermeldungen
Frage von chris84LAN, WAN, Wireless14 Kommentare

Hallo Zusammen, wir nutzen seit kurzem einen neuen Router und den OpenVPN Client. Die VPN Verbindung klappt; allerdings kommen ...

Sonstige Systeme
Wie Normenkataloge im Unternehmen bereit stellen?
Frage von MuzzepuckelSonstige Systeme14 Kommentare

Hallo Kollegen, ich lese schon lange hier mit, nun mein ersrer Beitrag, bzw. Frage. :-) Wir benötigen für unsere ...

Sicherheit
Verbindliche Zustellung per E-Mail?
Frage von ahussainSicherheit14 Kommentare

Hallo allerseits, ein Kunde von mir nutzt intensiv Fax. Hauptgrund: zusammen mit einer Empfangsbestätigung ist eine verbindliche Zustellung gewährleistet. ...

Netzwerke
Gateway in Switches, Druckern ect eintragen oder nicht
Frage von JodelknutNetzwerke12 Kommentare

Hi, bisher habe ich immer das Gateway überall wo es verlangt oder eintragbar war auch eingetragen. Mein neuer Kollege ...