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

GELÖST

Batch vergleich von zwei dateien

Mitglied: realdaveger

realdaveger (Level 1) - Jetzt verbinden

24.01.2015, aktualisiert 26.01.2015, 825 Aufrufe, 6 Kommentare

Hallo,

nach Jahrelangem zugucken, habe ich jetzt schlussendlich eine Frage welche ich selbst stelle.

Ich versuche 2 zeiten aus 2 dateien miteinander zu vergleichen und wenn die "alte" zeit geringer ist als die "neue", soll die alte ersetzt werden.

Leider stehe ich jetzt ein bisschen im Wald, wenn man Stundenlang nach einer Lösung sucht, sieht man evtl. die einfacheren Möglichkeiten nicht. Daher wäre super wenn mir jemand dabei helfen könnte. Was ich bisher habe:

01.
for /f %%A in ('dir /s /b timings\*.new') do (  
02.
	for /f "tokens=1,2,3 delims= " %%r in (%%A) do ( 
03.
		echo %%r:%%s:%%t > %%A 
04.
05.
	for /f %%r in (%%A) do ( 
06.
		set inp=%%A 
07.
		set raw=%inp:~0,-3% 
08.
		set tnew=%%r 
09.
		if exist %raw%txt (  
10.
			set told= <%raw%txt 
11.
			)  
12.
		if not exist %raw%txt (  
13.
			set told=99.99.999 
14.
15.
		if "%tnew%" LSS "%told%" echo %tnew% > %raw%txt 
16.
17.
)
Der erste abschnitt bereitet die Zeiten nur wie folgt auf:

2 16 543 zu 2:16:543

Das ganze soll in einer for schleife, denn es sollen einige hundert Dateipaare verglichen werden.

folgender Output wird generiert:

01.
set inp=C:\test\logtest\timings\nurburgring\ruf_yellowbird\RealDaveGER.new 
02.
 set raw=C:\test\logtest\timings\nurburgring\ruf_yellowbird\RealDaveGER. 
03.
 set tnew=2:19:654 
04.
 if exist C:\test\logtest\timings\nurburgring\abarth500_s1\alexis.thomas69.txt ( 
05.
set told=  0<C:\test\logtest\timings\nurburgring\abarth500_s1\alexis.thomas69.txt ) 
06.
 if not exist C:\test\logtest\timings\nurburgring\abarth500_s1\alexis.thomas69.txt (set told=99.99.999 ) 
07.
 if "2:19:654" LSS "99.99.999" echo 2:19:654  1>C:\test\logtest\timings\nurburgring\abarth500_s1\alexis.thomas69.txt 
08.
09.
2:19:654
Wie es aussieht komme ich mit den set raw nicht zurecht, dort wird es nicht mitgenommen.

Danke euch,

BTW schöne community hier!

Gruß Dave
Mitglied: rubberman
24.01.2015, aktualisiert um 16:22 Uhr
Hallo Dave, willkommen im Forum.

Ich denke du hast 2 Probleme.
  1. Variablen werden innerhalb einer Kommandozeile oder eines (in Klammern eingefassten) Blocks von Kommandozeilen nur einmal zum Wert aufgelöst. Abhilfe schafft die verzögerte Variablenerweiterung (setlocal EnableDelayedExpansion).
  2. Da du Punkte zwischen deinen Zahlen setzt, wird alphanumerisch verglichen. Ohne vorangestellte 0 bei einstelligen Stunden, ist das Ergebnis nicht das, das du erwartest. (2.12.123 ist größer als 10.12.123, da 2 größer als 1 ist)

Um dir helfen zu können, wäre es besser du würdest mal beispielhaft den Inhalt einer deiner *.new Dateien posten.

Grüße
rubberman
Bitte warten ..
Mitglied: realdaveger
24.01.2015, aktualisiert um 18:15 Uhr
ähmm ok, evtl. nicht gleich ersichtlich:

aus bsp. 2 15 547

wird hier:

01.
for /f %%A in ('dir /s /b timings\*.new') do (   
02.
	for /f "tokens=1,2,3 delims= " %%r in (%%A) do (  
03.
	echo %%r:%%s:%%t > %%A
2:15:547

dies ist der einzige Inhalt

zum anderen Punkt, wenn ich folgendes teste:

01.
if "2:19:654" LSS "99.99.999" echo true
dann wird meines erachtens richtig verglichen.

edit: problem erkannt, du hast recht!

setlocal ist in der batch mit aufgeführt, das hatte ich vergessen zu erwähnen. Leider bringt "EnableDelayedExpansion" keine Veränderung.

Gruß
Bitte warten ..
Mitglied: rubberman
24.01.2015 um 18:20 Uhr
Hallo Dave.

2 15 547
Ah, OK. Wenn das Beispiel 15 mal einstellig ist, hast du dann eine vorangestellte 0? Also bspw. 9 oder 09?

dann wird meines erachtens richtig verglichen.
Oh, das ist ja noch schlimmer (hatte ich gar nicht gesehen). Punkt und Doppelpunk sind nicht die gleichen Zeichen in einem Vergleich.

Leider bringt "EnableDelayedExpansion" keine Veränderung.
Doch, doch. Die Syntax für Variablen ändert sich aber gleichzeitig. Aus den umschließenden Prozentzeichen müssen umschließende Ausrufezeichen werden.

Egal. Beantworte erst mal die erste Frage. Wahrscheinlich kann man sich die verzögerte Erweiterung sowieso sparen.

Grüße
rubberman
Bitte warten ..
Mitglied: rubberman
LÖSUNG 24.01.2015, aktualisiert 26.01.2015
OK, hab mal fix was zusammen geschrieben, was unabhängig davon immer funktionieren sollte.
01.
@echo off &setlocal 
02.
 
03.
set /a "current_num = 0, smallest_num = 9999999" 
04.
set "file=" 
05.
for /f "delims=" %%i in ('dir /a-d /b /s "timings\*.new"') do ( 
06.
  for /f "usebackq tokens=1-3" %%j in ("%%~i") do ( 
07.
    set /a "current_num = 100000 * (100%%j %% 100) + 1000 * (100%%k %% 100) + 1000%%l %% 1000" 
08.
    setlocal EnableDelayedExpansion 
09.
    echo !current_num! kleiner als !smallest_num! ? 
10.
    if !current_num! lss !smallest_num! ( 
11.
      endlocal 
12.
      set /a "smallest_num = current_num" 
13.
      set "file=%%~i" 
14.
    ) else endlocal 
15.
16.
17.
 
18.
echo Datei mit der kleinsten Nummernfolge: 
19.
echo "%file%" 
20.
pause
Grüße
rubberman
Bitte warten ..
Mitglied: realdaveger
26.01.2015 um 11:25 Uhr
Danke schon einmal vorab für die Hilfe,

mit Punkt und Doppelpunkt, hatte ich nur vergessen die shift taste zu drücken...

Grundsätzlich kann das erst einmal außer Betracht gelassen werden. Die Zeiten sehen wie folgt aus:

2 15 547 | ohne punkt oder doppelpunkt. Die 3 Tokens werden ja von deinem Script schon richtig verglichen. Das letzte Problem was halt besteht ist, das natürlich in der kompletten Struktur durchsucht wird und die niedrigste Zeit ausgegeben wird.

Es muss unterschieden werden in "Track\auto\fahrer\bestzeit.txt(/new)" -> so ist auch die ordnerstruktur aufgebaut. Neue Zeiten kommen in die Datei:

"x:\Track\auto\fahrer\bestzeit.new" und diese Zeit soll verglichen werden (wenn vorhanden) mit der bestehenden "x:\Track\auto\fahrer\bestzeit.txt", wenn die neue Zeit kleiner ist als die vorhandene, dann soll er diese überschreiben.

Mein Verständisproblem besteht darin, wie ich mit der ersten for Schleife die vorhandene Zeit auslesen kann.

Mein Ansatz wäre halt gewesen die erste Variable zu missbrauchen, indem die letzten 3 Zeichen abgeschnitten werden und neu gesetzt werden.

01.
set inp=%%A 
02.
set old=%inp:~0,-3%
Ich versuche mal weiter...

Grüße
Bitte warten ..
Mitglied: realdaveger
26.01.2015 um 13:59 Uhr
Ok ich habs hinbekommen.

Einmal für die Nachwelt:

01.
for /f %%A in ('dir /s /b timings\*.new') do ( 
02.
	SETLOCAL ENABLEDELAYEDEXPANSION 
03.
	set dat= 
04.
	set old= 
05.
	set told= 
06.
	set tnew= 
07.
	set tnewraw= 
08.
	set dat=%%A 
09.
	set old=!dat:~0,-3!txt 
10.
	if exist "!old!" for /f "tokens=1,2,3 delims= " %%f in ('type "!old!"') do set told=%%f%%g%%h 
11.
	if not exist "!old!" set told=9999999 
12.
	for /f "tokens=1,2,3 delims= " %%i in ('type "%%A"') do ( 
13.
		set tnew=%%i%%j%%k 
14.
		set tnewraw=%%i %%j %%k 
15.
16.
	if !tnew! LSS !told! echo !tnewraw! > "!old!" 
17.
	 
18.
	endlocal 
19.
)
Danke nochmal an dich, Radiergummimann
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Zwei Werte vergleichen in einer Batch-Datei
gelöst Frage von PatrickHeissi10Batch & Shell1 Kommentar

Ich möchte die beiden Variablen %eins% und %zwei% vergleichen haben diese den gleichen Wert haben-> goto einszwei Danke

Batch & Shell
Batch vergleiche Dateien mit Zeitstempel
gelöst Frage von Streuner1Batch & Shell5 Kommentare

Hallo, ich möchte mit einer batch in einem Ordner Dateien mit einem Zeitstempel suchen, vergleichen, kopieren und löschen. Möglichkeiten: ...

Batch & Shell
Batch Vergleichen von Dateien
gelöst Frage von BlaberBatch & Shell2 Kommentare

Hallo Leute, ich habe ein kleines Problem bei einer Batch-Datei. In dieser versuche ich zwei Text-Dateien miteinander zu vergleichen, ...

Batch & Shell
Kopierte Dateien per Batch vergleichen
Frage von dobym24Batch & Shell7 Kommentare

Hallo zusammen, ich habe folgendes Problem und mittlerweile Tage im Internet verbracht um eine Lösung zu findenLeider erfolglos Ich ...

Neue Wissensbeiträge
Linux

Meltdown und Spectre: Linux Update

Information von Frank vor 16 StundenLinux

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 1 TagTipps & 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 1 TagSicherheit12 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 1 TagSicherheit9 Kommentare

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

Heiß diskutierte Inhalte
Sicherheit
Meltdown und Spectre: Die machen uns alle was vor
Information von FrankSicherheit25 Kommentare

Aktuell sieht es in den Medien so aus, als hätten die Hersteller wie Intel, Microsoft und Co den aktuellen ...

Netzwerke
Packet loss bei "InternetLeitungsvollauslastung"
gelöst Frage von Freak-On-SiliconNetzwerke17 Kommentare

Servus; Ja der Titel klingt komisch, is aber so. Wenn die Internetleitung voll ausgelastet ist, hab ich extreme packet ...

Ubuntu
Ubuntu - Starter für nicht vertrauenswürdige Anwendungen
Frage von adm2015Ubuntu17 Kommentare

Hallo zusammen, Ich verwende derzeit die Ubuntu Versionen 17.10 bzw. im Test 18.04. Ich habe mehrere .desktop Dateien in ...

Windows 10
Automatische daten kopieren, USB zu USB unter Win10 im Hintergrund
Frage von DerEisigeWindows 1016 Kommentare

Hallo Leute, ich bin auf der Suche nach einem Skript, dass von einem USB Stick automatisch nach dem einstecken ...