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

Frage Entwicklung Batch & Shell

Befehl zur Variablen - übernahme - übergabe gesucht

Mitglied: leknilk0815

leknilk0815 (Level 3) - Jetzt verbinden

04.05.2013 um 11:19 Uhr, 2569 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 Rabauke84JavaScript

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
Linux

Meltdown und Spectre: Linux Update

Information von Frank vor 1 TagLinux

Meltdown (Variante 3 des Prozessorfehlers) Der Kernel 4.14.13 mit den Page-Table-Isolation-Code (PTI) ist nun für Fedora freigegeben worden. Er ...

Tipps & Tricks

Solutio Charly Updater Fehlermeldung: Das Abgleichen der Dateien in -Pfad- mit dem Datenobject ist fehlgeschlagen

Tipp von StefanKittel vor 2 TagenTipps & Tricks

Hallo, hier einmal als Tipp für alle unter Euch die mit der Zahnarztabrechnungssoftware Charly von Solutio zu tun haben. ...

Sicherheit

Meltdown und Spectre: Wir brauchen eine "Abwrackprämie", die die CPU-Hersteller bezahlen

Information von Frank vor 2 TagenSicherheit12 Kommentare

Zum aktuellen Thema Meltdown und Spectre: Ich wünsche mir von den CPU-Herstellern wie Intel, AMD oder ARM eine Art ...

Sicherheit

Meltdown und Spectre: Realitätscheck

Information von Frank vor 2 TagenSicherheit10 Kommentare

Die unangenehme Realität Der Prozessorfehler mit seinen Varianten Meltdown und Spectre ist seit Juni 2017 bekannt. Trotzdem sind immer ...

Heiß diskutierte Inhalte
Batch & Shell
Meltdown Microsoft Prüf Script - .zip Datei leider leer
gelöst Frage von MasterBlaster88Batch & Shell13 Kommentare

Hallo zusammen, ich patche gerade unsere Windows Server bzgl. der Meltdown Lücke. Patch vorhanden, Reg Keys gesetzt Um das ...

Batch & Shell
Shell-Skript - Syntax error: Unterminated quoted string
Frage von newit1Batch & Shell13 Kommentare

Hallo Ich schreibe ein Skript das eine CSV-Datei in eine mySQL Datenbank schieben soll. Bekomme nach start des Skrips ...

E-Mail
Erfahrungen mit hMailServer gesucht
Frage von it-fraggleE-Mail10 Kommentare

Hallo, meine neue Stelle möchte einen eigenen Mailserver. Ich als Linuxkind war direkt geistig mit Postfix dabei. Leider wollen ...

Entwicklung
VBS: alle PDF-Dateien in einem Ordner gleichzeitig öffnen
gelöst Frage von JuweeeEntwicklung9 Kommentare

Hallo, ich habe in deiner Ordnerstruktur (.\Tagesberichte\xx.18\) mehrere dynamische PDF-Formulare (mit LCD erstellt). Die Berichtsformulare sind im Layout alle ...