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 Batch vergleich von zwei dateien

Mitglied: realdaveger

realdaveger (Level 1) - Jetzt verbinden

24.01.2015, aktualisiert 26.01.2015, 882 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

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 ...

Batch & Shell

Batch vergleich Dateien if else

Frage von zeroblue2005Batch & Shell2 Kommentare

Hallo Zusammen, suche eine einfache Lösung um zwei Dateien miteinander zu vergleichen. Hintergrund ist der, dass ich eine Update ...

Neue Wissensbeiträge
Windows 7

Windows 7 - Server 2008 R2: Exploit für Total Meltdown verfügbar

Information von kgborn vor 19 StundenWindows 7

Kleine Information für Administratoren, die für die Updates von Windows 7 SP1 und Windows Server 2008 R2 SP1 verantwortlich ...

Sicherheit

Zero Day-Schwachstelle im Internet Explorer - wird von APT bereits ausgenutzt

Information von kgborn vor 1 TagSicherheit

Im Kernel des Internet Explorer scheint es eine Zero Day-Lücke zu geben, die von staatlichen Akteuren (APT) im Rahmen ...

Microsoft
Folder Security Viewer-Lizenzen zu gewinnen
Information von kgborn vor 1 TagMicrosoft

Ich nehme das Thema mal in Absprache mit Frank hier auf, da es für den einen oder anderen Administrator ...

Hardware

Feueralarm killt Festplatten in Rechenzentrum - führt zu größerem Ausfall

Information von kgborn vor 1 TagHardware12 Kommentare

Noch ein kleiner Beitrag für Administratoren, die in Rechenzentren aktiv sind - so als Fingerzeig. Denn es gibt Szenarien, ...

Heiß diskutierte Inhalte
Linux
Linux Server oder Windows Server - lohnt eine Umstellung auf Linux und ebenso basierende SW bei einer langfristigen Planung?
Frage von motus5Linux27 Kommentare

Wir brauchen bei uns einen neuen Server. Dieser wird als Fileserver, Domäne Controller sowie Exchange Server verwendet. Wir versuchen ...

C und C++
Frage1 C Programmierung-Makefile Frage2 PHP-Programmierung HTTP-Fehler 404
Frage von KatalinaC und C++24 Kommentare

Hallo, ich habe 2 Fragen, die nichts miteinander zu tun haben aber mit denen ich mich gerade beschäftige: 1. ...

LAN, WAN, Wireless
Watchguard T15 VPN Einrichtung
gelöst Frage von thomasjayLAN, WAN, Wireless22 Kommentare

Hallo zusammen, wir möchten gerne über unsere Watchguard T15 einen VPN-Tunnel (Mobile VPN with IPSec) einrichten! Als Client nutzen ...

DSL, VDSL
ISP Wechsel auf Vodefone Koax, Gebäudeverkabelung nur per Cat 7
gelöst Frage von wusa88DSL, VDSL18 Kommentare

Hallo Zusammen, ich bin momentan bei Mnet als Glasfaser Kunde und möchte Preis/Leistungs-Technisch zu Kabel Deutschland / Vodafone wechseln. ...