themida
Goto Top

Komma aus Variable wird durch Leerzeichen ersetzt

Ich bin relativ gesehn noch anfänger als bitte kein schläge :D

In meiner Batch datei möchte ich 2 zeichen aus einer variablen mit einer anderen variablen vergleichen.
normalerweiße passiert das ja mit %variable:~0,2% beim ausführen wird aber das Komma durch ein Leehrzeichen ersetzt.
Ich wär für Ideen und Lösung dankbar, die variablen %%c bis %%g mit !lastaccess! (01.01.1970 00:00) zu vergleichen

Meine Batchdatei
setlocal enableDelayedExpansion
...
for /f "tokens=1,3 delims=;" %%a in (files.tmp) do (  
	for /f "tokens=1,2,3,4,5 delims=:." %%c in ('echo %%b') do (  
		if %%e GEQ !lastaccess:~6,4! (
			if %%d GEQ !lastaccess:~3,2! (
				if %%c GEQ !lastaccess:~0,2! (
					if %%f GEQ !lastaccess:~11,2! (
						if %%g GTR !lastaccess:~14,2! (
							echo %%a
						)
					)
				)
			)
		)
	)
)
del files.tmp
pause

DOS Ausgabe (Prompt Pfad entfernt)
echo "U:\Pfad\Datei.exe";11776;25.03.2011 09:51;14.06.2012 03:28;14.06.2012 03:28;".exe" 1>files.tmp  

for /F "tokens=1,3 delims=;" %a in (files.tmp) do (  
	for /F "tokens=1,2,3,4,5 delims=:." %c in ('echo %b') do (  
		if %e GEQ !lastaccess:~6 4! (
			if %d GEQ !lastaccess:~3 2! (
				if %c GEQ !lastaccess:~0 2! (
					if %f GEQ !lastaccess:~11 2! (
						if %g GTR !lastaccess:~14 2! (
							echo %a
)
) )

del files.tmp

Content-Key: 194930

Url: https://administrator.de/contentid/194930

Printed on: April 25, 2024 at 21:04 o'clock

Member: bastla
bastla Nov 27, 2012 at 12:11:26 (UTC)
Goto Top
Hallo themida!

Verwende als Delimiter in Zeile 5 zusätzlich ein Leerzeichen - also
for /f "tokens=1,2,3,4,5 delims=:. " %%c in ("%%b") do (
Die Schreibweise mit "%%b" ist etwas kürzer und in anderen Situationen ev auch sicherer (Stichwort "Sonderzeichen"), hier aber nicht entscheidend ...

Grüße
bastla
Member: themida
themida Nov 27, 2012 updated at 15:54:09 (UTC)
Goto Top
hab ich vergessen um Jahreszahl und stunde zu trennen aber das bei meinen Problem keine eine Fehlermeldung kommt irritiert mich sehr
Member: bastla
bastla Nov 27, 2012 updated at 17:24:47 (UTC)
Goto Top
Hallo themida!

Stimmt - eigentlich sollte die Zeile 9 zu einem Fehler führen ...

... anyhow - die ganze Folge von "if" würde ich ohnehin einsparen und einfach mit
for /f "tokens=1,3 delims=;" %%a in (files.tmp) do (  
	for /f "tokens=1,2,3,4,5 delims=:. " %%c in ('echo %%b') do (  
        if "%%e%%d%%c%%f%%g" gtr "!lastaccess:~6,4!!lastaccess:~3,2!!lastaccess:~0,2!!lastaccess:~11,2!!lastaccess:~14,2!" echo %%a  
)
prüfen ...

Anmerkung: Der Vergleich der beiden Timestamps muss als String erfolgen (deshalb die Anführungszeichen), da ein Zahlenwert 201103250951 die Grenze für arithmetische Operationen in CMD (für positive Werte: 2^31 - 1 = 2147483647) natürlich bei Weitem übersteigt.

Grüße
bastla
Member: themida
themida Nov 27, 2012 at 18:51:01 (UTC)
Goto Top
ich versteh zwar nicht warum als ausgabe !lastaccess:~14 2! kommt aber deine art ist besser und auch nicht so umständlich geschrieben wie meins

danke