tommylik
Goto Top

Nach neuester Datei suchen und verschieben.

Hallo an alle,

Ich habe im Internet folgenden Code gefunden:

Dim fNewest
set oFolder=createobject("scripting.filesystemobject").getfolder("D:\")  
For Each aFile In oFolder.Files
    If fNewest = "" Then  
        Set fNewest = aFile
    Else
        If fNewest.DateCreated < aFile.DateCreated Then
            Set fNewest = aFile
        End If
    End If
Next

MsgBox "Neueste Datei: " + fNewest.name   

Der sucht nach der neuesten Datei was auch super funktioniert.

Ich habe die Aufgabe, auf der Arbeit, alle Rechner durchzugehen
und von allen System die neuste Datei in einen extra angelegtem Ordner zu verschieben.

Dieser Code müßte jetzt erweitert werden auf 3 -4 Dinge.
Das man Dateitypen angeben kann und die dann verschiebt in einem vorher angelegten Ordner.
z.B.
" Suche die neuste Datei von *.zip und *.rar auf Laufwerk D:" erstelle den Ordner D:\Backup\Zip und D:\Backup\rar
und verschiebe die Dateien dahin."
Und damit kein Durcheinander geschieht, nach dem verschieben, den Quellordner einmal löschen und wieder erstellen.

Könnte einer von Euch Profis mir da helfen und den Code erweitern.
Ich bin auf dem Gebiet absoluter Neuling.

Vielen Dank schon mal vorab.

Mfg Tom

Content-ID: 163518

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

Ausgedruckt am: 17.11.2024 um 11:11 Uhr

Biber
Biber 29.03.2011 um 03:38:33 Uhr
Goto Top
Moin Tommylik,

so zwei, drei Details sind mir noch unklar, bitte um Erläuterung...

Zitat von @Tommylik:

Ich habe im Internet folgenden Code gefunden:

<bla>
...
Ich habe die Aufgabe, auf der Arbeit, alle Rechner durchzugehen
und von allen System die neuste Datei in einen extra angelegtem Ordner zu verschieben.
Bezahlt? Zum Lernen? Zum Angst-Nehmen vor einfachen Gebrauchsskripten?

Dieser Code müßte jetzt erweitert werden auf 3 -4 Dinge.
Sagt wer? Muss es VBS sein? Reicht nicht Batch, wenn du kein VBS kannst?

Das man Dateitypen angeben kann und die dann verschiebt in einem vorher angelegten Ordner.
z.B.
" Suche die neuste Datei von *.zip und *.rar auf Laufwerk D:" erstelle den Ordner D:\Backup\Zip und D:\Backup\rar
und verschiebe die Dateien dahin."
Und damit kein Durcheinander geschieht, nach dem verschieben, den Quellordner einmal löschen und wieder erstellen.
Ist ja ein toller Plan...
Hört sich für mich allerdings so an, als wäre das Hauptziel, dass du dich ein bisschen mit dem Werkzeug VBS vertraut machst.

Könnte einer von Euch Profis mir da helfen und den Code erweitern.
Warum sollten wir derart Sinnloses tun? Wir nageln schon genug Pudding an die Wand während unserer normalen Schicht.

Ich bin auf dem Gebiet absoluter Neuling.
Was genau können wir dafür, was genau tust du dagegen?
Welche Versuche außer einem einfachen Guttenberg von einer namenlosen Seite hast du unternommen, dich mit dem Problem auseinanderzusetzen?

Vielen Dank schon mal vorab.
Diese Floskel ist voreilig - nicht immer kommen die erwarteten Antworten.

Mfg Tom
dto Biber
Skyemugen
Skyemugen 29.03.2011 um 08:29:10 Uhr
Goto Top
Zitat von @Tommylik:
Hallo an alle,
Aloha,
Ich habe im Internet folgenden Code gefunden:
und du hättest auch zum Verschieben von Dateien und setzen von Dateifilter im Internet etwas finden können, genauer gesagt: sogar hier im Forum.

Aber des Bibers erleuchtender Aussage
Hört sich für mich allerdings so an, als wäre das Hauptziel, dass du dich ein bisschen mit dem Werkzeug VBS vertraut machst.
kann man eigentlich nur zustimmen. Hier gibt es einige Leute, die dir gerne Fragen zu Problemen beantworten aber ungern dir etwas hinschustern ach, jetzt denkt der Biber wieder an seine PraktikantinnenLeisten ... es wurde ja noch kein geltendes Wort festgelegt, damit du mit der Lösung aber immernoch null Ahnung hier rausgehst und dann evtl. die nächste Aufgabe bekommst, bei der wir dann deinen nächsten Thread begrüßen dürfen.

greetz André
Tommylik
Tommylik 29.03.2011 um 20:49:01 Uhr
Goto Top
Hallo Biber,

Erstmal Danke für die Antwort überhaupt.


so zwei, drei Details sind mir noch unklar, bitte um Erläuterung...
Dann wollen wir mal.....

Bezahlt? Zum Lernen? Zum Angst-Nehmen vor einfachen Gebrauchsskripten?
Ich habe diese Aufgabe bekommen und soll nun zusehen wie ich das erledige.
Natürlich soll das nicht eure Aufgabe sein, aber ich wußte mir auch nicht anders zu helfen
und habe den Code-Schnippsel rausgesucht und bei Euch angefragt.

Sagt wer? Muss es VBS sein? Reicht nicht Batch, wenn du kein VBS kannst?
Sagt niemand, im Grunde genommen kommt das von mir.
Nein muß kein VBS sein.
Ich habe nur gehört das ein VBSScript beim dursuchen von Verzeichnissen schneller ist als Batch.
Ob das Stimmt weiß ich noch nicht mal.

Ist ja ein toller Plan...
Hört sich für mich allerdings so an, als wäre das Hauptziel, dass du dich ein bisschen mit dem Werkzeug VBS vertraut machst.
Beruht auch auf der Ausage das VBS schneller sein soll. Klar lerne ich gerne was dazu. Soll aber nicht gerade leicht sein.

Warum sollten wir derart Sinnloses tun? Wir nageln schon genug Pudding an die Wand während unserer normalen Schicht.
Kann ich mir nicht vorstellen das ihr Eure Zeit mit etwas Sinnlosen vergeudet.
Von meiner Seite aus ist es halt nicht sinnlos, da ich damit mir ein bisschen Arbeit ersparen wollte.
1x pro Woche von ca. 35 Rechner die Daten sichern. Und das manuell.

Was genau können wir dafür, was genau tust du dagegen?
Welche Versuche außer einem einfachen Guttenberg von einer namenlosen Seite hast du unternommen, dich mit dem Problem auseinanderzusetzen?
Außer den Codeschnippsel raussuchen eigentlich nichts. Ich war halt überrumpelt worden.
Klar ich verstehe Euch ist keine tolle Leistung von mir und ihr könnt am wenigsten dafür.

Aber das habe ich nach geholt.
Da du ja erwehnt hast ob es auch Batch sein kann.
Habe ich mich selber probiert.
Nicht lachen aber wie Skymugen so schön erwehnt hat:

Hier gibt es einige Leute, die dir gerne Fragen zu Problemen beantworten aber ungern dir etwas hinschustern
Ich schon. Das ist halt der Unterschied ihr könnt programmieren ich nicht.

@echo off & setlocal
cls

pushd "D:\Archiv" ||goto :eof  
for /f "delims=" %%i in ('dir /b /s /a-d /od *.zip') do set "neustezip=%%i"  
for /f "delims=" %%j in ('dir /b /s /a-d /od *.rar') do set "neusterar=%%j"  

:: Backupordner ueberpruefen und gegebenfalls anlegen.
set LWUSB=%~d0
for %%j in (%LWUSB%\Verzeichnisse.txt) do (
if not exist %%j md %%j
)
 
copy /Y "%neustezip%" "D:\Backup\zip"  
copy /Y "%neusterar%" "D:\Backup"\rar  
		  
popd

:: Archivordner löschen....
rd /s /q D:\Archiv
md D:\Archiv 

Diese Floskel ist voreilig - nicht immer kommen die erwarteten Antworten.
Erwarten wäre auch ein bisschen unverschämt, aber ich gebe zu ich erhoffe mir Hilfe zu bekommen.

Ich hoffe du bist nicht mehr so viel im unklaren.

Mfg Tom
Biber
Biber 29.03.2011 um 21:22:13 Uhr
Goto Top
Moin Tommylik,

danke, dass du dir die Zeit zum sachlichen Antworten genommen genommen hast - ich bin mir durchaus bewusst, dass ich manchmal vielleicht ein bisschen spitz bin. Also in meinen Formulierungen mein ich.

Aber es hilft ja nix - irgendwie muss ja geklärt werden, wes Geistes Kind die Fragesteller so sind und wo denn das Ziel der Reise sein soll.

Dann nochmal wieder zum Thema:

a) die reine Batch-Lösung wie von dir gepostet.

Why not? ist doch perfekt.

  • Du kennst jede Zeile, kannst jede Zeile lesen, verstehen und anpassen/erweitern
  • es passt ausgedruckt auf eine halbes Blatt Papier
  • es läuft auf jedem PC von Win2000 bis Windows11
  • und hey! Es ist ein Batch... lass es doch "länger dauern als VBScript" oder C# - who cares? Lass dat Dingen doch per Taskplaner um 05h morgens losplockern.

b) die Umsetzung in VBS

  • hätte den Charme und den Reiz für dich (ohne jegliche Ironie gemeint), dass du an deinem Praxisbeispiel mit diesem neuen Werkzeug VBS üben kannst.
  • und ja, diese gatesverdammten 30 Zeilen VBS werden dich Stunden oder gar Tage kosten und auch mal ein Snickers für zwischendurch
  • und ja - in Stundenlohn umgerechnet ist es nicht der Brüller, was eine Zeile VBS dir einbringt.

Aber gerade mit diesen Datei-Operationen (kopieren/verschieben/löschen/verzeichnisse anlegen...) ist IMHO der sanfteste Einstieg in das "Wie tickt VBSkript?" möglich. Was eigentlich passieren soll, nämlich ein COPY/DEL/CD/MD usw... ist dir nicht fremd,
die entsprechende Umsetzung mit VBSkript (bzw. dem ganzem VB-Geraffel) ist das FileSystemObject mit seinen Propertys, seinen Methoden und eben auch seinen tonnenweisen Tutorials und Einstiegsskripten im Netz und auch hier über die Forums-Suchfunktion.

Das wäre mein Tipp an dich für ein weiteres Vorgehen. "FileSystemObject" wäre das Zupf-Fädchen in dem VBS-Knäuel, mit dem du es aufdröseln kannst.
Wirf eine Suchmaschine deiner Wahl an, knie dich da zwei Stunden rein, guttenborg dir zwei Beispielskripte zu dem Verzeichnisse-Durchwackeln und lass sie laufen.

Und dann - nach diesem Einstieg, den dir keiner hier abnehmen will, dann können wir über irgendwelche Klemmer oder Anpassungen reden.

Grüße
Biber
Skyemugen
Skyemugen 29.03.2011 um 22:20:49 Uhr
Goto Top
Aloha,

wie der Biberle schon so schön erwähnt hat: VBScript mag irgendwie irgendwo schneller sein aber wie oft muss das vbs laufen, damit du deine Arbeitszeit, die da drinsteckt, wieder gutgemacht hast? =)
Der Vorteil beim Batch ist ebenso: Es läuft überall, die Ausführung von VBScripten könnte deaktiviert sein.

EIn batch für solche Sachen lässt sich meiner Meinung nach a) schneller erstellen und b) besser/schneller editieren (meine Meinung, wie gesagt) - ich persönlich greife nur zu VBS, wenn es für batch einfach zu umständlich wäre (z.B. Datumsberechnung, Textdateieneditierung etc. etc.)

greetz André
Tommylik
Tommylik 29.03.2011 um 23:51:04 Uhr
Goto Top
Hallo Biber,

Vielen Dank für deine Erklärung.

Von diesen Gesichtspunkten aus, habe ich das ganze noch garnicht betrachtet.

Nun gut, dann werd ich mir mal bei Gelegenheit damit beschäftigen.

Also der Batchcode von mir ist Ok. Wunderbar.

Es würde mich aber dennoch interessieren, ob dieser Code eingekürzt werden könnte.

Ansonsten nochmals vielen Dank für Eure Unterstützung.

Mfg Tom
Tommylik
Tommylik 29.03.2011 um 23:57:31 Uhr
Goto Top
Hallo Skyemugen,

Auch dir persönlich nochmals vielen Dank für deine Beiträge.

Der Vorteil beim Batch ist ebenso: Es läuft überall, die Ausführung von VBScripten könnte deaktiviert sein.

Und unter diesem Gesichtspunkt fällt mir die Entscheidung nicht schwer in Zukunft weiterhin Batch zu nehmen.

Es sei denn, es geht einfach nicht.

Mfg Tom
Tommylik
Tommylik 30.03.2011 um 15:35:24 Uhr
Goto Top
Hallo an alle,

Ich würde gerne die neuste Datei, aus jedem Ordner sichern. (von den angegeben Dateitypen)

Wie müßte ich den Code (siehe oben) abändern.

Ich habe schon im Internet gesucht aber leider nichts passendes gefunden.
"Aus jedem Ordner die neuste Datei sichern."

Ich weiß nicht wie ich "Batch" sagen soll schaue in jeden Ordner, suche die neuste Datei von *.zip, *.rar, ........
und kopiere sie nach D:\Backup\......

Ich denke ohne zwischenspeichern geht das nicht.
Dateien suchen, Info speichern und dann alle Dateien kopieren.....? No sé.

Vielen Dank schon mal vor ab.

Mfg Tom
Tommylik
Tommylik 01.04.2011 um 15:21:11 Uhr
Goto Top
Hallo an alle,

Ich hatte Euch vor einigen Tagen etwas gepostet.
Ich habe leider den Fehler gemacht und habe es mittendrin plaziert.
Etwas weiter oben. Dadurch habt ihr es wahrscheinlich nicht gesehen.

Nun gut an dieser Stelle noch mal.

Ich würde gerne die neuste Datei, aus jedem Ordner sichern. (von den angegeben Dateitypen)
Wie müßte ich den Code (siehe oben) abändern.
Ich habe schon im Internet gesucht aber leider nichts passendes gefunden.
"Aus jedem Ordner die neuste Datei sichern."
Ich weiß nicht wie ich "Batch" sagen soll schaue in jeden Ordner, suche die neuste Datei von *.zip, *.rar, ........
und kopiere sie nach D:\Backup\......
Ich denke ohne zwischenspeichern geht das nicht.
Dateien suchen, Info speichern und dann alle Dateien kopieren.....? No sé.

Ich habe hier einen Codeschnippsel den ich getestet habe und funktioniert.

for /d %%i in ("D:\Archiv\*.*") do call :Sub "%%i"   
goto :eof 
:Sub 
set "neueste="   
for /f "delims=" %%a in ('dir /b /a-d /od "%~1\*.*" 2^>nul') do set "neueste=%~1\%%a"   
if defined neueste copy "%neueste%" "D:\Backup\"  

Könntet ihr mir vielleicht noch bestätigen, das dieser Code in dieser Form auch zuverlässig ist.
Also das er wirklich unterhalb von D:\Archiv mir von jedem Dateityp die aktuellste Datei
in den Backupordner kopiert. Vielleicht gibt es etwas was ich nicht bedacht habe.

Noch etwas, es ist nicht immer notwendig von allen die neueste Datei zu sichern.
Ich würde gerne eine option haben. Alle oder nur die ich vorgebe.
Könntet ihr mir sagen, wie der Code geändert werden muß,
wenn ich nur von allen zip und allen rar-Dateien die neueste Datei haben möchte.

Wäre super und vielen Dank vorab.

Mfg Tom
Skyemugen
Skyemugen 01.04.2011 um 17:13:01 Uhr
Goto Top
Aloha Tom,

ohje glaube ich habe dein gewolltes falsch interpretiert ... (Freitag + Feierabend = ...)
Ich ging davon aus, dass du in D:\Archiv auch noch weitere Unterordner haben könntest und haber daher ein Skript gebaut, das jeweils die aktuellste xyz-Datei (oder einfach nur die aktuellste Datei im Ordner) aus jedem Unterordner + Unterordner etc. greift.
Das mit den von allen Dateitypen habe ich falsch gelesen *pfeif* ... mit deinem Skript habe ich mich gar nicht weiter befasst, aufgrund meiner Missinterpretation lief es für mich nicht wie gewollt *lol*

Gut, das wird dir vllt. nur halb eine Hilfe sein aber eventuell braucht ja mal einer das Skript:

Code für einen oder mehrere Dateitypen
@echo off & setlocal
set "Quelle=D:\"  
set "Ziel=D:\Backup\"  
set /p "Typ=Bitte gebe den Dateityp an: (* fuer alle oder xyz abc fuer mehrere)"  

for /f "delims=" %%a in ('dir /b /s /ad-h-s /od "%Quelle%" ^|findstr "%Quelle%Archiv"') do call :Datei "%%a"  
pause
goto :eof

:Datei
pushd %1
for %%t in (%Typ%) do call :Prozess "%%t"  
popd
goto :eof

:Prozess
set "neueste="  
for /f "delims=" %%i in ('dir /b /a-d /od *.%~1 2^>nul') do set "neueste=%%~dpnxi"  
if defined neueste copy "%neueste%" "%Ziel%"  
goto :eof

Wenn man das findstr entfernen würde, könnte man ein ganzes Laufwerk durchsuchen (allerdings nur die Unterordner) ...

Naja, werde mich auf den Weg nach Hause machen, wird Zeit *g*

bis später

greetz André

edit: Backslash im findstr entfernt
EDIT 1. Revision
EDIT Final Release (danke bastla)
Option: Wie for-Schleife verkürzen in der Abarbeitungszeit, wenn einer der Typen nicht vorhanden ist mal sehen, ob man das noch in Angriff nimmt
Tommylik
Tommylik 01.04.2011 um 18:28:21 Uhr
Goto Top
Hallo André,

Vielen Dank für deine Hilfe.

Du bist richtig davon ausgegangen das unter D:\Archiv einige andere Unterordner sind.
Und die haben auch noch Unterordner. Deine Idee ist schon richtig gewesen.
Nur mit der Erweiterung z.B. die aktuellste Datei von *.zip aus jedem Ordner unterhalb von D:\Archiv.

Ich habe den Code getestet und es geschiet folgendes:

http://www.pic-upload.de/view-9441915/screenshot4.jpg.html

Eine Sache die mich stört ist folgendes:

set /p "Typ=Bitte gebe den Dateityp an: (* für alle)"   

OK (* für alle).
Aber wenn ich einen Dateityp angeben möchte dann kann ich nur einen angeben oder?
Ich kann jetzt Batch nicht sagen er soll nur nach *.zip und *.bin suchen?

Nochmals vielen Dank für deine Hilfe.

Mfg Tom
Biber
Biber 01.04.2011 um 18:42:48 Uhr
Goto Top
Moin Tommylik,

sorry, ich hatte deinen Thread ein wenig aus den Augen verloren.

Zu deiner Frage:
Aber wenn ich einen Dateityp angeben möchte dann kann ich nur einen angeben oder?
Ich kann jetzt Batch nicht sagen er soll nur nach *.zip und *.bin suchen?

Doch, kannst du ohne Anpassungen tun.
Du siehst ja, wo der %Typ% genutzt wird.
for /f "delims=" %%i in ('dir /b /a-d /od *.%Typ%')

-> wenn du auf als Variable eingibst "zip"---> wird der DIR-Befehl zu [dir /b /a-d /od *.zip]
-> wenn du auf als Variable eingibst "*"---> wird der DIR-Befehl zu [dir /b /a-d /od *.*]
-> wenn du auf als Variable eingibst "zip *.bin"---> wird der DIR-Befehl zu [dir /b /a-d /od *.zip *.bin] --->as should do

Grüße
Biber
Skyemugen
Skyemugen 01.04.2011 um 19:09:19 Uhr
Goto Top
Aloha,

*puh* wenn es also doch richtig interpretiert war, sollte es ja einwandfrei laufen (habe es selbst getestet gehabt - allerdings, muss ich zugeben, anfangs ab Laufwerksebene, darum kam das findstr noch mit dazu, sonst würde er keine Dateien in Archiv selbst finden, sondern nur in den Unterordnern [ebenso getestet]), allerdings verwirrt mich noch deine Aussage
von jedem Dateityp die aktuellste Datei
da * ja nur die aktuellste Datei unabhängig des Dateitypes in Archiv & Unterordnern liefert und nicht die aktuellste Datei jeden Dateitypes ...

Was der Biber dir da vorgeschlagen hat, war mir auch noch nicht bekannt *g* - good to know, wenn es so mit mehrfacher Auswahl auch klappen sollte.

greetz André

P.S.: Zeile zwei in deinem Prompt for / %i in sieht interessant aus :P
Tommylik
Tommylik 01.04.2011 um 20:20:03 Uhr
Goto Top
Hallo an alle,

@Biber

Danke für die schnelle Antwort und für deine Hilfe.

sorry, ich hatte deinen Thread ein wenig aus den Augen verloren.
Kein Problem ihr habt soviel um die Ohren da sollte so was auch mal vorkommen.

Danke für den Tipp habe ich auch gleich ausprobiert, konnte aber leider nicht feststellen ob es funktioniert,
da der Code bei mir nicht funktioniert.

@andré

Ich hab noch mal einen neu Sreenshot gemacht damit du nicht dureinander kommst bei mir funktioniert es nicht.

http://www.pic-upload.de/view-9443406/screenshot6.jpg.html

Zur Info ich habe Windows 7 und ich habe gehört das es da unterschiede gibt.

Meine Testumgebung zur Zeit ist ein Ordner D:\Ablage2.
Darunter befinden sich einige Ordner:

D:\Ablage2\xls
D:\Ablage2\zip
D:\Ablage2\doc
usw...

In den Ordner sind einige Dateien mit unterschiedlichen Datumswerten.

So nun zu deiner Aussage:

allerdings verwirrt mich noch deine Aussage

von jedem Dateityp die aktuellste Datei

Ich möchte das dein Code die Ordner:

D:\Ablage2
D:\Ablage2\xls
D:\Ablage2\zip
D:\Ablage2\doc

prüft welches die Aktuelle Datei ist und sie in den Backupordner kopiert.

Das heißt, ich gebe z.B. gleichzeitig vor der Code soll nach der neuesten zip-Datei suchen und nach der neuesten xls-Datei suchen.

Dann sollte er vieleicht welche im Ordner "D:\Ablage2" finden, weil sagen wir der für alle Dateitypen ist.
Aber auf jeden fall findet der Code eine aktuelle xls-Datei im Ordner "D:\Ablage2\xls"
und eine aktuelle zip-Datei im Ordner "D:\Ablage2\zip"
Vorrausgesetzt sie sind nicht leer.

Ich hoffe das war ein bisschen verständlicher.

Nun gut, vielen Dank nochmal an Euch beide.

Mfg Tom
Skyemugen
Skyemugen 01.04.2011 um 20:42:27 Uhr
Goto Top
Aloha,

oh, das könnte am doppelten Backslash liegen im findstr, ist mir glatt entgangen, XP scheint das egal zu sein, Windows 7 ist da allergisch.

nimm mal das \ im findstr weg und teste erneut.

greetz André
Tommylik
Tommylik 01.04.2011 um 21:24:34 Uhr
Goto Top
Hallo André

Erstmal vielen Dank.

Hat leider nichts gebracht. Gleiche Fehlermeldung.

Dann ist mir aufgefallen das ein Anführungszeichen fehlt.

for /f "delims=" %%a in ('dir /b /s /ad-h-s /od "%Quelle%" ^|findstr /C:"%Quelle%Archiv') do call :Ablauf "%%a"  

und zwar am Ende vom findstr Befehl.

Da tut sich dann was.

Nach dem ich eine Taste drücke wechsel der Push Befehl leider ins falsche Verzeichnis.

Ich habe dann es geändert auf
pushd "%Quelle%\Ablage2"   

Dann führt der Code anscheinend alles aus, aber zum schluß sagt er dann "keine Datei gefunden".

http://www.pic-upload.de/view-9444373/screenshot7.jpg.html

Also ich weiß jetzt auch nicht wo da der Fehler ist.

Vielen Dank für deine Mühe und Zeit.

Mfg Tom
Skyemugen
Skyemugen 01.04.2011 um 22:23:57 Uhr
Goto Top
Aloha,

ja, hat gefehlt =) (kann passieren)

Aber das Skript läuft auf jeden Fall auch unter Windows 7 wunderbar ...
wie du sehen kannst mit echo on
auch im echo off (nicht wundern, die Kopien sind aktueller als der erste Screenshot xD)

momentan wurde nach E:\Skripte\Ablage2 im findstr bei mir im Test gesucht, sodass auch als Ergebnis alle aktuellen %Typ%-Dateien aus Ablage2 & Ablage2\xls & Ablage2\doc gesucht und gefunden wurden

Bibers Vorschlag hingegen funktioniert nicht: in der jetzigen Skriptform ...
xls *.doc = doc
xls .doc = xls
setzt man %Typ% in Zollzeichen, wird generell nichts gefunden bei Mehrfachauswahl ...

greetz André

edit: ruft man das Skript im cmd auf, führt er es sachgemäß durch, versucht danach allerdings (nach Pause - bei goto :eof passiert logischerweise nichts mehr) erneut irgendeine Datei zu suchen (wohl im aktiven cmd-Verzeichnis)
bastla
bastla 01.04.2011 um 22:55:00 Uhr
Goto Top
@Skyemugen
ruft man das Skript im cmd auf, führt er es sachgemäß durch, versucht danach allerdings (nach Pause - bei goto :eof passiert logischerweise nichts mehr) erneut irgendeine Datei zu suchen (wohl im aktiven cmd-Verzeichnis)
Ich kenne ja den aktuellen Stand des Batches nicht, aber in der Version oben vermisse ich in Zeile 8 ein "goto :eof" (was dann beim zusätzlichen - unerwünschten - Durchlauf des Unterprogramms zum "Datei nicht gefunden" führen dürfte).
Ein "2^>nul" am Ende des "dir" würde übrigens diese unerfreuliche Meldung zumindest optisch beseitigen (vor allem für den Fall, dass es tatsächlich keine Dateien des gesuchten Typs gibt, sinnvoll) ...
Kein Beinbruch (aber ein Schönheitsfehler face-wink) sind die "Zollzeichen" beim "pushd", da ja der Parameter %1 ohnehin schon beim Unterprogrammaufruf damit versorgt wurde ...
Was Bibers Vorschlag angeht: Ein Befehl der Art
dir /b /a-d /od *.xls *.doc
ist gültig und funktioniert auch (jedenfalls bei mir unter XPSP3) ...

Grüße
bastla
Skyemugen
Skyemugen 01.04.2011 um 23:23:29 Uhr
Goto Top
Aloha bastla!

Ja, mich haben die überflüssigen Zollzeichen in der letzten cmd-Testrunde eigentlich auch gestört, hehe.
goto :eof sollte statt pause kommen aber danach ist derzeit ja auch nicht verkehrt ;)

Das mit den Mehrfachdateitypen funktioniert in der Tat an sich (getestet im prompt ohne irgendwas drumherum) allerdings nicht im Skript ... (auch nicht, wenn ich es direkt eintrage also ohne %Typ%) nicht in dieser Form gesetzten Variable %neueste% ...

Grüße, André

edit: Code überarbeitet, zweite Sub hinzugefügt, jetzt klappt das Mehrfachzeug aber es wird nicht mehr die neueste ausgegeben, da muss ich wohl nochmal .. ist das überhaupt möglich in einem Zug zwei oder mehrere neueste Dateien zu bekommen? Man liest doch eigentlich nur den letzten Wert der dir-Ausgabe aus und der kann dann auch nur eine Datei sein ...
Tommylik
Tommylik 02.04.2011 um 00:00:28 Uhr
Goto Top
Hallo an alle,

Also mein Code sieht so jetzt aus:

@echo off & setlocal 
cls
 
set Typ=rar *.zip 

for /f "delims=" %%a in ('dir /b /s /ad-h-s /od "D:\" ^|findstr /C:"D:\Ablage2"') do call :Ablauf "%%a"   
pause 
goto :eof
:Ablauf 
pushd "%1"  
set "neueste="   
for /f "delims=" %%i in ('dir /b /a-d /od *.%Typ% 2^>nul') do set "neueste=%%~dpnxi"   
if defined neueste copy "%neueste%" "D:\Test\"  
popd

und funktioniert unter Windows 7 und Windows XP einwandfrei.

Eine Sache die mir aufgefallen ist, wenn man einen Dateitypen mit angibt der nicht existiert in den Ordner,
dann dauert es ganz schön lange bis sich was tut.

Nun gut, vielleicht gibt es dafür auch noch ne Lösung aber vorläufig sollte das erstmal reichen.

Damit können wir die Beitrag als gelöst betrachten.

Ich sage mal an alle beteiligten nochmals vielen vielen Dank
ihr habt mir sehr geholfen.
Super arbeit.

Mfg Tom
Skyemugen
Skyemugen 02.04.2011 um 00:04:07 Uhr
Goto Top
Aloha,

hö? Und er gibt dir so die neueste .rar und die neuste .zip aus einem Unterordner aus? (War doch das, was du eigentlich erreichen wolltest oder nicht? Oder hast du generell die Dateitypen separat liegen?)

Mein Plan war jetzt eigentlich: Ordner 1 enthälft zip rar xls doc und neueste soll von zip und xls sein (Beispiel) - aber diese erweiterte Variante benötigst du wohl doch nicht(?)
greetz André

edit: Für dich mag das dann abgeschlossen sein, ich sehe es als weiterhin unfertig an (außer für einen einzelnen Dateitypen, da funktioniert es ja) ... *^__^*
edit: revidiert
bastla
bastla 02.04.2011 um 00:11:26 Uhr
Goto Top
Hallo Skyemugen!

Um von mehreren Typen jeweils die neueste Datei zu erhalten, einfach als %Typ% zB "rar zip" angeben und dann ein Schleifchen außen herum wickeln:
:Ablauf
pushd %1
for %%t in (%Typ%) do call :Ablauf2 "%%t"  
popd
goto :eof

:Ablauf2
set "neueste="  
for /f "delims=" %%i in ('dir /b /a-d /od *.%~1 2^>nul') do set "neueste=%%~dpnxi"  
if defined neueste echo copy "%neueste%" "D:\Test\"  
goto :eof
Grüße
bastla
Skyemugen
Skyemugen 02.04.2011 um 00:22:19 Uhr
Goto Top
Abend bastla! (oder Nacht?)

Heureka! Also genau umgekehrt, wie ich es erst versucht hatte (sozusagen), sprich erst Datei dann Ablauf ... hm, ob ich darauf noch selbst gekommen wäre? Man weiß es nicht aber ich danke dir für den Lösungsbeitrag =)

Das Zitat vom TE könnte man noch optional in Angriff nehmen ... (aber nicht jetzt, höhö)
Eine Sache die mir aufgefallen ist, wenn man einen Dateitypen mit angibt der nicht existiert in den Ordner, dann dauert es ganz schön lange bis sich was tut.
Wenn in den durchsuchten Unterordnern nichts ist, kommt ebenso die Meldung Das System kann den angegebenen Pfad nicht finden ... unschön ^.^

Grüße & so gut wie gute Nacht,
André

Code wurde angepasst und als final release angegeben ;) erst einmal *lach*
Tommylik
Tommylik 02.04.2011 um 01:44:28 Uhr
Goto Top
Hallo an alle,

hö? Und er gibt dir so die neueste .rar und die neuste .zip aus einem Unterordner aus? (War doch das, was du eigentlich erreichen wolltest oder nicht? Oder hast du generell die > Dateitypen separat liegen?)

Ja so war das von Anfang an geplant.

Klar auf meinem Rechner zum Testen habe ich mir das prepariert um sicher zu sein.

D:\Ablage2 ------> gemischte Dateien alle Typen
D:\Ablage2\xls ------> 2 xls - Dateien mit unterschiedlichem Datum ---> jeweils die neuere ist dann im Ordner "Test"
D:\Ablage2\zip ------> 2 zip - Dateien mit unterschiedlichem Datum
D:\Ablage2\doc -----> 2 doc - Dateien mit unterschiedlichem Datum

Code ausführen lassen und ich habe dann im Ordner "Test" meine aktuellen Dateien
Wie man anhand der Zip-Datei sehen kann so gar bis auf die Sekunde verglichen.

http://www.pic-upload.de/view-9446807/screenshot8.jpg.html

So vielen Dank noch mal an alle.

Mfg Tom
Biber
Biber 02.04.2011 um 01:53:48 Uhr
Goto Top
Moin Tom,

ich trau mich ja kaum, in diesen Zeiten etwas "witzig" zu nennen, aber irgendwie witzig ist es schon, dass der Thread damit begann, dass du in den unendlichen Weiten des Internets einen VBS-Schnipsel gefunden hattest, an den du gern zwei Zusatzösen drangeflanscht haben wolltest.

Drei Tage und zwei Dutzend Kommentare später gehst du mit einem zehnzeiligen CMD-Batch unterm Arm zufrieden nach Haus und alle sind glücklich über die gemeinsam entwickelte Lösung.

Ich mag solche Threads.

Grüße
Biber
Skyemugen
Skyemugen 02.04.2011 um 09:53:47 Uhr
Goto Top
Aloha Tom,

gut, wenn es von Anfang an so geplant war, dass du in gemischten Verzeichnissen von erschiedenen Dateitypen jeweils die aktuellste Datei suchen willst, dann ist ja dank bastlas Hilfe der Code heute Nacht komplettiert worden *g*

Ich war mir darüber die ganze Zeit nicht 100% im Klaren *lach*.

Grüße & schönes Wochenende an alle
André
Tommylik
Tommylik 04.04.2011 um 13:51:18 Uhr
Goto Top
Moin Moin,

@ Biber

Ja schon witzig wie du sagst, habe ich mir auch nicht gedacht. Auf jeden fall war dieser Weg der bessere.
Ich hab obendrein wieder was dazu gelernt und es hat spaß gemacht.

@ André

Ja ist immer wieder interessant wie der Verlauf so einer Runde ist.

Wie sag man so schön Peine - Paris - Pattensen. Das ist das Leben, man beginnt kompliziert
und am Ende merkt man, man hätte es auch einfacher haben können.

Nun gut ich sage nochmal vielen vielen Dank und wunsche eine schöne Woche.

PS. Falls ihr Euch über die Uhrzeit wundert, wann ich Euch zurückschreibe,
das liegt daran das ich mich in Mexico befinde und Frühschicht habe. (Ihr seid mir 7 Stunden vorraus)


Mfg Tom