xguix
Goto Top

Dir - Datei mit größerer ID anzeigen

Hallo Leute,

ich habe einen "dir" Befehl welcher mir folgendes ausgibt:
Verfuegbarkeit_TNG_DSL_VPN_20140501_3432.pdf
Verfuegbarkeit_TNG_DSL_VPN_20140501_3433.pdf
Verfuegbarkeit_TNG_VK_20140501_3442.pdf
Verfuegbarkeit_TNG_VPN-Gateway_20140501_3443.pdf
Befehl:
dir /B *TNG*V*%Monat:~-2%01*.pdf
Das Problem ist, eine Datei gibt es zwei mal, aber ich brauch in der Ausgabe die mit der Größeren ID (3433)
Wie kann ich den Befehl anpassen um das zu erreichen?

Liebe Grüße

Content-Key: 241576

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

Ausgedruckt am: 28.03.2024 um 11:03 Uhr

Mitglied: Pjordorf
Pjordorf 23.06.2014 um 13:02:28 Uhr
Goto Top
Hallo,

Zitat von @xgUix:
dir /B *TNG*V*%Monat:~-2%01*.pdf
Liefert dir doch "Alles" TNG"Alles"V"Alles"%Monat~-2%01"Alles".PDF. Wie ist dein %Monat~-2% definiert? In einer Batchdatei?

Das Problem ist, eine Datei gibt es zwei mal
Falsch. In einen Ordner kann es diese Datei nur genau 1 mal geben. Wenn die dort 2 mal existiert, ist dein dateisystem zum Teufel. Dein Betriebssystem ist ein?

aber ich brauch in der Ausgabe die mit der Größeren ID (3433)
Dir *3433.PDF ?

Gruß,
Peter
Mitglied: xgUix
xgUix 23.06.2014 um 13:35:55 Uhr
Goto Top
Hallo,
danke für deine Antwort, ich verstehe das ich mich ein wenig missverständlich ausgedrückt habe.

Zitat von @Pjordorf:
> dir /B *TNG*V*%Monat:~-2%01*.pdf
Liefert dir doch "Alles" TNG"Alles"V"Alles"%Monat~-2%01"Alles".PDF. Wie ist dein
%Monat~-2% definiert? In einer Batchdatei?
Richtig. Die Variable Monat ist folgend definiert:
set /a Monat=1%date:~-7,2%-1
if %Monat% leq 100 set /a Monat+=12
Somit bekomme ich (für diesen Monat) 05 an dieser Stelle.

> Das Problem ist, eine Datei gibt es zwei mal
Falsch. In einen Ordner kann es diese Datei nur genau 1 mal geben. Wenn die dort 2 mal existiert, ist dein dateisystem zum Teufel.
Dein Betriebssystem ist ein?
Da hast du Recht, das Problem ist, es gibt 2 Dateien die sich im Namen nur in der ID unterscheiden.
Win Server '08 R2 Standart.

> aber ich brauch in der Ausgabe die mit der Größeren ID (3433)
Dir *3433.PDF ?
Die ID ändert sich von Monat zu Monat, ich brauche immer die Datei mir der größeren ID.

Liebe Grüße
Mitglied: colinardo
colinardo 23.06.2014 aktualisiert um 14:49:14 Uhr
Goto Top
Moin,
es gibt 2 Dateien die sich im Namen nur in der ID unterscheiden.
dann z.B. so:
for /f "delims=" %%a in ('dir /B /A-D /ON "*TNG*V*%Monat:~-2%01*.pdf"') DO set "file=%%a"  
echo %file%
oder wenn der Name am Anfang unterschiedlich sein sollte:
setlocal ENABLEDELAYEDEXPANSION
set maxid=0
for /f "delims=" %%a in ('dir /B /A-D /ON "*TNG*V*%Monat:~-2%01*.pdf"') DO @(  
  set fname=%%~na
  set num=!fname:~-4!
  if !num! GTR !maxid! (
	set maxid=!num!
	set "file=%%a"  
  )
)
echo %file%
Grüße Uwe
Mitglied: Pjordorf
Pjordorf 23.06.2014 um 14:17:12 Uhr
Goto Top
Hallo,

Zitat von @xgUix:
Da hast du Recht, das Problem ist, es gibt 2 Dateien die sich im Namen nur in der ID unterscheiden.
Die ID ändert sich von Monat zu Monat,
Deine beiden Aussagen passen nicht zusammen. Entweder pro Monat eine neue ID oder Pro Monat mehrere IDs und Dateien. Dann sollte die höhere ID auch das jüngere Datum tragen, oder?

ich brauche immer die Datei mir der größeren ID.
Über das Datum?

Oder etwas komplexer indem du die in Frage kommenden Dateien ausliest, die ID extrahierst und diese dann Zahlenmäßig vergleichst bis du die höhere ID gefunden hast.(Aufwendig). könnte dir helfen....

Gruß,
Peter
Mitglied: xgUix
xgUix 23.06.2014 um 14:37:41 Uhr
Goto Top
Hallo Peter,

Zitat von @Pjordorf:
Deine beiden Aussagen passen nicht zusammen. Entweder pro Monat eine neue ID oder Pro Monat mehrere IDs und Dateien. Dann
sollte die höhere ID auch das jüngere Datum tragen, oder?
Die Dateien werden von einem Programm erstellt und enthalten im Namen immer das Startdatum an dem die Datei gestartet hat (Report Datei, startet immer am ersten eines Monats)
Daher das Datum 2014 05 01
Jetzt erstellen wir ab und zu diese Dateien vorab um diese zu prüfen, bevor sie automatisch erstellt werden. (Manuell diese Dateien wieder löschen könnte vergessen werden, ein weiteres Skript welches das erledigt ist nicht gewünscht.)
Der Name wird aber immer von diesem Programm vergeben und enthält immer das Startdatum (20140501). Damit keine Daten überschrieben werden kommt dann noch eine ID hinten dran.
Also egal wann die Datei erstellt wird, immer steht das Startdatum im Namen.

> ich brauche immer die Datei mir der größeren ID.
Über das Datum?
Datum im Namen ist immer 20140501 egal wann die Datei erstellt wird(außer in einem anderen Monat)

Oder etwas komplexer indem du die in Frage kommenden Dateien ausliest, die ID extrahierst und diese dann
Zahlenmäßig vergleichst bis du die höhere ID gefunden hast.(Aufwendig).

könnte dir helfen....
Danke, mal sehen was sich finden lässt.

Liebe Grüße
Mitglied: xgUix
xgUix 23.06.2014 um 14:50:14 Uhr
Goto Top
Hallo Uwe, danke für die Antwort.
Leider wirf die Zeile einen Fehler aus:
%%a was unexpected at this time.

Und würde dann nicht nur der letzte Datei-Name in der Text-Datei stehen?!
Mitglied: Pjordorf
Pjordorf 23.06.2014 aktualisiert um 15:52:06 Uhr
Goto Top
Hallo,

Zitat von @xgUix:
Also egal wann die Datei erstellt wird, immer steht das Startdatum im Namen.
Schon mal ein DIR auf die Dateien gemacht und geschaut welches DATEI Datum deine Dateien tragen? Erstellt, geändert, letzter Zugriff.
http://msdn.microsoft.com/en-us/library/windows/desktop/ms724290(v=vs.8 ...
http://support.microsoft.com/kb/299648
http://jpsoft.com/help/timestamps.htm
http://www.forensicswiki.org/wiki/New_Technology_File_System_(NTFS)
http://superuser.com/questions/387042/how-to-check-all-timestamps-of-a- ...

Datum im Namen ist immer 20140501
Namen sind Schall und rauch.

egal wann die Datei erstellt wird(außer in einem anderen Monat)
Eine Datei welche ich erstelle und den Namen "17020601-223201.txt" gebe wird aber trotzdem mit heutigem Datum und Uhrzeit im Dateisystem eingetragen (sofern meine Systemzeit eben NICHT den "01.06.1702" und "22:32:01" entsprichtface-smile

Ich dachte es wäre klar das hier von den Dateiattributen Datum und Zeit geredet wurde....

Gruß,
Peter
Mitglied: xgUix
xgUix 23.06.2014 um 15:33:07 Uhr
Goto Top
Hallo,
jetzt verstehe ich was du mir sagen wolltest.

Trotzdem wüsste ich nicht wie ich die richtigen Dateien angezeigt bekomme.
dir /o:d /T:C *TNG*V*%Monat:~-2%01*.pdf
So bekomme ich die Dateien wenigstens in einer vernünftigen Reihenfolge.
Aber wie bekomme ich jetzt nur die, die am 1.6 erstellt wurden?
01.06.2014  00:02           159.167 Verfuegbarkeit_TNG_DSL_VPN_20140501_3432.pdf
01.06.2014  00:38           230.057 Verfuegbarkeit_TNG_VK_20140501_3442.pdf
01.06.2014  00:38           140.849 Verfuegbarkeit_TNG_VPN-Gateway_20140501_3443.pdf
23.06.2014  14:48                 3 Verfuegbarkeit_TNG_DSL_VPN_20140501_3433.pdf

Grüße face-smile
Mitglied: Pjordorf
Pjordorf 23.06.2014 um 16:01:27 Uhr
Goto Top
allo,

Zitat von @xgUix:
Trotzdem wüsste ich nicht wie ich die richtigen Dateien angezeigt bekomme.
Indem du dir Klar wirst welche dieser Vier verschiedenen Dateien du überhaupt sehen willst. Die sind zwar beide vom Gleichen datum und Uhrzeit, aber die beinhalten doch sicherlich Grundsätzlich andere Inhalte, oder?

> dir /o:d /T:C *TNG*V*%Monat:~-2%01*.pdf
Liefert dir doch 4 Verschiedene Datei und Inhalte (zumindest sieht es für uns so aus)
> 01.06.2014  00:02           159.167 Verfuegbarkeit_TNG_DSL_VPN_20140501_3432.pdf
> 01.06.2014  00:38           230.057 Verfuegbarkeit_TNG_VK_20140501_3442.pdf
> 01.06.2014  00:38           140.849 Verfuegbarkeit_TNG_VPN-Gateway_20140501_3443.pdf
> 23.06.2014  14:48                 3 Verfuegbarkeit_TNG_DSL_VPN_20140501_3433.pdf
Welche Datei soll es denn tatsächlich sein? Sicher das dein DIR dir überhaupt dein gewünschtes resultat zeigt? oder willst du aus diesem Dir dann tatsächlich nur die eine Datei mit ID 3443 haben?

Was liefert dir ein
 dir *TNG_VP*%Monat:~-2%01_*.PDF

Gruß,
Peter
Mitglied: xgUix
xgUix 23.06.2014 um 16:24:10 Uhr
Goto Top
Hallo Peter,

Zitat von @Pjordorf:
Indem du dir Klar wirst welche dieser Vier verschiedenen Dateien du überhaupt sehen willst. Die sind zwar beide vom Gleichen
datum und Uhrzeit, aber die beinhalten doch sicherlich Grundsätzlich andere Inhalte, oder?
Entschuldige die Unklarheiten. Ich versuche ausführlicher zu werden.
Grundsätzlich sind diese Dateien vom Inhalt her gleich.
Außer das in der "frischeren" Datei ein größerer Zeitraum zum auswerten gegeben war.
Alle drei Dateien vom 01.06 sollen angezeigt werden, das ist schon korrekt.
Nochmal kurfassung: Ich lasse vom Programm einen Report erstellen den ich prüfen möchte: "Verfuegbarkeit_TNG_DSL_VPN_20140501_3433.pdf" dieser wird später automatisiert nochmal erstellt.
Jetzt habe ich 2 Dateien.
Das ganze wird ausgeführt für ingesamt 3 Reports zum prüfen und 3 werden später nochmal automatisiert erstellt.
Die Dateien, die ich aber brauche(für weiterverarbeitung in blat), werden immer am ersten des Monats erstellt (automatisiert)

Liefert dir doch 4 Verschiedene Datei und Inhalte (zumindest sieht es für uns so aus)
Korrekt
> > 01.06.2014  00:02           159.167 Verfuegbarkeit_TNG_DSL_VPN_20140501_3432.pdf
> > 01.06.2014  00:38           230.057 Verfuegbarkeit_TNG_VK_20140501_3442.pdf
> > 01.06.2014  00:38           140.849 Verfuegbarkeit_TNG_VPN-Gateway_20140501_3443.pdf
> > 23.06.2014  14:48                 3 Verfuegbarkeit_TNG_DSL_VPN_20140501_3433.pdf
Welche Datei soll es denn tatsächlich sein? Sicher das dein DIR dir überhaupt dein gewünschtes resultat zeigt? oder
willst du aus diesem Dir dann tatsächlich nur die eine Datei mit ID 3443 haben?
Die, die am ersten des Monats erstellt wurden face-smile

Was liefert dir ein
 dir *TNG_VP*%Monat:~-2%01_*.PDF
liefert:
01.06.2014  00:38           140.849 Verfuegbarkeit_TNG_VPN-Gateway_20140501_3443.pdf
da fehlen dann die 2 anderen Dateien aus dem Monat 06

Ich hoffe es ist nicht zu umfangreich aber trotzdem verständlich.

Gruß
Mitglied: colinardo
Lösung colinardo 23.06.2014, aktualisiert am 24.06.2014 um 11:42:19 Uhr
Goto Top
Zitat von @xgUix:
Leider wirf die Zeile einen Fehler aus:
hier geht's ... du musst das natürlich in eine Batchdatei packen und nicht direkt in die Konsole tippen ! Dort
müsstest du die doppelten Prozentzeichen durch einfache ersetzen! Und es war natürlich nur ergänzend zu deinem Code !
Und würde dann nicht nur der letzte Datei-Name in der Text-Datei stehen?!
ja sicher, und zwar die Datei mit der größten Nummer da geordnet ausgegeben, ich zitiere dich:
aber ich brauch in der Ausgabe die mit der Größeren ID (3433)
da dachte ich du brauchst nur "ein" File. Aber in der Schleife oben kannst du ja auf alle Files vom ersten des Monats zugreifen und machen was du willst!
(hier gehe ich auch von einem deutsch eingestellten Datumsformat aus dd.mm.yyyy):
for /f "delims=" %%a in ('dir /B /A-D /ON "*TNG*V*%Monat:~-2%01*.pdf"') DO (  
   set filedate=%%~ta
   if "!filedate:~0,2!" == "01" (  
      REM hier für jedes File vom ersten des Montats was machen ...
      echo %%a
   )
)
in der Laufvariablen %%a steht dann bei jedem Durchlauf der aktuelle Dateiname.
Alternativ ginge es auch so (bei deutsch eingestelltem Datumsformat dd.mm.yyyy):
for /f "tokens=1 delims=:" %%a in ('forfiles /M "*TNG*V*%Monat:~-2%01*.pdf" /c "cmd /c echo @file:@fdate" 2^>nul ^| findstr /re ":01\.[0-1][0-9]\.[1-2][0-9][0-9][0-9]"') DO @echo %%a  
Grüße Uwe

p.s. in Powershell ist das ganze auch ein Kinderspiel (noch ein Grund langsam mal umzusteigen face-wink) :
dir c:\ordner\*TNG*V*0501*.pdf | ?{$_.CreationTime.Day -eq "1"}
Mitglied: xgUix
xgUix 24.06.2014 um 08:09:23 Uhr
Goto Top
Hallo Uwe,
vielen Danke für deine Antwort!!!

Ich hoffe ihr habt euch nicht schon zu oft vor den Kopf gefasst, aber der Syntax Meister bin ich hier sicher nicht.
Daher habe ich nochmal eine Frage.

Zitat von @colinardo:
> for /f "delims=" %%a in ('dir /B /A-D /ON "*TNG*V*%Monat:~-2%01*.pdf"') DO (  
>    set filedate=%%~ta
>    if "!filedate:~0,2!" == "01" (  
>       REM hier für jedes File vom ersten des Montats was machen ...
>       echo %%a
>    )
> )
Die ausgegebenen Werte sollen in eine einfache Text Datei, damit ich Sie dann später mit BLAT weiterverwenden kann.
So hatte ich den Plan an der Stelle deines Kommentars:
>test.txt 
Wäre wohl zu einfach gewesen?!


Alternativ ginge es auch so (bei deutsch eingestelltem Datumsformat dd.mm.yyyy):
> for /f "tokens=1 delims=:" %%a in ('forfiles /M "*TNG*V*%Monat:~-2%01*.pdf" /c "cmd /c echo  
> @file:@fdate" 2^>nul ^| findstr /re ":01\.[0-1][0-9]\.[1-2][0-9][0-9][0-9]"') DO @echo %%a  
> 
Funktioniert, bloß hier das gleiche, wie kann ich die Ausgabe in eine Text datei schreiben lassen? face-smile

p.s. in Powershell ist das ganze auch ein Kinderspiel (noch ein Grund langsam mal umzusteigen face-wink) :
> dir c:\ordner\*TNG*V*0501*.pdf | ?{$_.CreationTime.Day -eq "1"}
> 
Funktioniert auch super, würde ich mich gern weiter mit beschäftigen.
Doch fehlt mir hier die Variable im Namen, also statt 05.
Wäre sowas möglich? Wenn ja google ich mal ein wenig.

Liebe Grüße
Mitglied: colinardo
Lösung colinardo 24.06.2014 aktualisiert um 11:42:11 Uhr
Goto Top
Die ausgegebenen Werte sollen in eine einfache Text Datei, damit ich Sie dann später mit BLAT weiterverwenden kann.

echo %%a>>textdatei.txt

zur Powershell-Variante:
Sicher kannst du dort auch Variablen verwenden, das war nur ein Beispiel face-smile
$var = "05"  
dir "c:\ordner\*TNG*V*$var01*.pdf" | ?{$_.CreationTime.Day -eq "1"} | select -ExpandProperty FullName | set-content textdatei.txt  
Grüße Uwe
Mitglied: xgUix
xgUix 24.06.2014 um 08:53:24 Uhr
Goto Top
Zitat von @colinardo:
 echo %%a>>textdatei.txt
Ah face-smile Okay.
Ich danke dir recht herzlich!
Weiteres Problem face-sad.. BLAT kommt mit den Anführungszeichen, vor und hinter dem Dateinamen, nicht klar.
Es erkennt dadurch nur den ersten Eintrag. (Bei der 2. Möglichkeit)
Ich habe versucht Anführungszeichen zu entfernen, jedoch ohne Erfolg.
Ist es möglich die Anführungszeichen leicht weg zu bekommen? Oder im nachhinein zu löschen?
Tut mir echt leid, dass es hier so stückchenweise vor sich geht.

In der ersten Variante wird irgendwie keine Textdatei erstellt?!
Aber in der 2. funktioniert es.

(Wenn ich das Skript zwei Mal ausführe, stehen dann doppelt so viele Einträge in der Datei.
Nach der Weiterverarbeitung würde ich die Datei dann einfach wieder löschen.)


zur Powershell-Variante:
Sicher kannst du dort auch Variablen verwenden, das war nur ein Beispiel face-smile
> $var = "05"  
> dir "c:\ordner\*TNG*V*$var01*.pdf" | ?{$_.CreationTime.Day -eq "1"} | select -ExpandProperty FullName |  
> set-content textdatei.txt
> 
Okay.. das werde ich mal auf später schieben, sonst komm ich hier arg durcheinander face-smile
Trotzdem DANKE!

Liebe Grüße
Mitglied: colinardo
Lösung colinardo 24.06.2014 aktualisiert um 11:42:03 Uhr
Goto Top
Zitat von @xgUix:
Ich danke dir recht herzlich!
Weiteres Problem face-sad.. BLAT kommt mit den Anführungszeichen, vor und hinter dem Dateinamen, nicht klar.
auch kein Problem:
echo %%~a>>textdatei.txt
(Wenn ich das Skript zwei Mal ausführe, stehen dann doppelt so viele Einträge in der Datei.
Nach der Weiterverarbeitung würde ich die Datei dann einfach wieder löschen.)
das legt die Anzahl der ">>" fest, wenn du eins > verwendest dir der Inhalt der Datei immer überschrieben, wenn du zwei >> benutzt wird immer an die Datei angehängt. Also lösche am besten das File bevor du es neu erstellst.

p.s. wenn es dich interessiert: hier gibt es von mir bereits fertige VBS-Scripte die sich leicht an dein Vorhaben mit Blat anpassen ließen:
PDF Dateien aus Verzeichnis automatisch per Email versenden

Grüße Uwe
Mitglied: xgUix
xgUix 24.06.2014 um 11:41:57 Uhr
Goto Top
Hallo Uwe,
jetzt funktioniert alles so wie es gewünscht war.
Vielen Dank dafür!


Zitat von @colinardo:
p.s. wenn es dich interessiert: hier gibt es von mir bereits fertige VBS-Scripte die sich leicht an dein Vorhaben mit Blat
anpassen ließen:
PDF Dateien aus Verzeichnis automatisch per Email versenden
Hab ich mir mal angeschaut, super Sache!


Liebe Grüße