Batch soll Neue Excel Datei suchen und in anderem Ordner Kopieren
Hallo zusammen,
ich habe gestern zum ersten mal eine Batchdatei geschrieben sie macht auch EIGENTLICH das was sie soll.
Das Problem was ich nur habe ich er sucht sich nicht die Aktuelle bzw. Neue Datei raus und Kopiert die sondern eine alte.
Zur Vorgeschichte:
Ich muss für meine Arbeit immer einen Tagesbericht machen diese werden in Excel geschrieben diese haben immer dieses Format
Tagesbericht Name 2013-05-02.xls
Diese Datei liegt in einen Ordner namens Meine Tagesberichte, der hat dann noch die Ordner 2012, 2013 und 2014
und in diesen Ordnern sind dann die jeweiligen Monate Januar- Dezember wo diese Exceldatein dann drin liegen.
Wenn ich die Batch Ausführe dann Kopiert er mir aber immer nur den den Tagesbericht vom März 2013 mit dem Datum vom 21.3.2013
Wobei aber eigentlich der Tagesbericht vom 30.5.2013 Kopiert werden soll.
Selbst wenn ich meine ganzen Tagesberichte auf meinen Privaten Rechner zuhause kopiere und die Batch Ausführe kopiert er nur diese.
Noch mal zum Verständnis diese Datei ist auch nicht als letztes Bearbeitet worden oder so... Aktuell ist die Datei mit heutigen Datum zu gekommen und die soll er finden.
Meine Batch hat folgende Einträge:
@echo off
for /f "delims=" %%a in ('dir /a-d /od-g /b /s *.xls') do set "newestFile=%%a"
xcopy "%newestFile%" "C:\Users\Herr und Gebieter\Desktop\A"
pause
Vielleicht kann mir ja einer sagen wo das Problem bei mir ist.
ich habe gestern zum ersten mal eine Batchdatei geschrieben sie macht auch EIGENTLICH das was sie soll.
Das Problem was ich nur habe ich er sucht sich nicht die Aktuelle bzw. Neue Datei raus und Kopiert die sondern eine alte.
Zur Vorgeschichte:
Ich muss für meine Arbeit immer einen Tagesbericht machen diese werden in Excel geschrieben diese haben immer dieses Format
Tagesbericht Name 2013-05-02.xls
Diese Datei liegt in einen Ordner namens Meine Tagesberichte, der hat dann noch die Ordner 2012, 2013 und 2014
und in diesen Ordnern sind dann die jeweiligen Monate Januar- Dezember wo diese Exceldatein dann drin liegen.
Wenn ich die Batch Ausführe dann Kopiert er mir aber immer nur den den Tagesbericht vom März 2013 mit dem Datum vom 21.3.2013
Wobei aber eigentlich der Tagesbericht vom 30.5.2013 Kopiert werden soll.
Selbst wenn ich meine ganzen Tagesberichte auf meinen Privaten Rechner zuhause kopiere und die Batch Ausführe kopiert er nur diese.
Noch mal zum Verständnis diese Datei ist auch nicht als letztes Bearbeitet worden oder so... Aktuell ist die Datei mit heutigen Datum zu gekommen und die soll er finden.
Meine Batch hat folgende Einträge:
@echo off
for /f "delims=" %%a in ('dir /a-d /od-g /b /s *.xls') do set "newestFile=%%a"
xcopy "%newestFile%" "C:\Users\Herr und Gebieter\Desktop\A"
pause
Vielleicht kann mir ja einer sagen wo das Problem bei mir ist.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 207258
Url: https://administrator.de/forum/batch-soll-neue-excel-datei-suchen-und-in-anderem-ordner-kopieren-207258.html
Ausgedruckt am: 20.04.2025 um 12:04 Uhr
9 Kommentare
Neuester Kommentar
Moin ajmambo,
willkommen im Forum.
in deinem DIR-Befehl lässt du die Suche ja mit /s über mehrere Unterverzeichnisse schrapeln.
Dadurch machst du dir leider die Sortieroption "nach Datum" kaputt, denn die letzte Datei in der Bildschirmauflistung ist dann immer die aktuellste in dem letzten Ordner, der durchsucht wird.
Okay, EIN möglicher Workaround für dich wäre folgender (mit Herleitung):
Heute ist es ja so, dass geplanterweise die aktuellste/neueste xls-Tabelle kopiert werden soll.
Aber auf jeden Fall nur EINE (wenn du heute drei xls-Tabellen aktualisiert hättest, würdest du auch nur die berücksichtigen, die als letztes gespeichert wurde.
Wenn es also ohnehin nur eine Datei werden sol, die die CMD-Zeile abfackelt, dann wäre das ja immer eie Datei von "heute".
Diese wiederum könntest du auch mit einer "Dir /S"-Suche finden:
-->
> kennst du schon
-->
>... echo mir Datum/uhrzeit der Datei %i, pipe das nach "Findstr "heutigesDatum"
-->
>... und wenn du das heutige Datum gefunden hast, dann führe aus "echo Isch kopiere Datei %i
Grüße
Biber
willkommen im Forum.
in deinem DIR-Befehl lässt du die Suche ja mit /s über mehrere Unterverzeichnisse schrapeln.
Dadurch machst du dir leider die Sortieroption "nach Datum" kaputt, denn die letzte Datei in der Bildschirmauflistung ist dann immer die aktuellste in dem letzten Ordner, der durchsucht wird.
Okay, EIN möglicher Workaround für dich wäre folgender (mit Herleitung):
Heute ist es ja so, dass geplanterweise die aktuellste/neueste xls-Tabelle kopiert werden soll.
Aber auf jeden Fall nur EINE (wenn du heute drei xls-Tabellen aktualisiert hättest, würdest du auch nur die berücksichtigen, die als letztes gespeichert wurde.
Wenn es also ohnehin nur eine Datei werden sol, die die CMD-Zeile abfackelt, dann wäre das ja immer eie Datei von "heute".
Diese wiederum könntest du auch mit einer "Dir /S"-Suche finden:
C:\Users\Biber>for /f %i in ('dir /a-d /b /s b:\*.xls') do @echo %~ti|find "%date%">nul && @echo Isch kopiere %i ...
-->
for /f %i in ('dir /a-d /b /s b:\*.xls') do ...
> kennst du schon
-->
... @echo %~ti|find "%date%">nul
>... echo mir Datum/uhrzeit der Datei %i, pipe das nach "Findstr "heutigesDatum"
-->
&& @echo Isch kopiere %i ...
>... und wenn du das heutige Datum gefunden hast, dann führe aus "echo Isch kopiere Datei %i
Grüße
Biber
Moin ajmambo,
Öhmm, ja es gibt auch einen "Bieber" mit Frisurproblemen, aber ich bin "Biber".
Und auch wenn der andere Bieber und ich gelegentlich die gleiche Zielgruppe ansprechen - ich bevorzuge den Teil davon, der schon lesen und schreiben kann.
Also bring uns bitte nicht durcheinander - es gibt Unterschiede.
es tut mir leid ich raff das nicht....
Ich habe Verstanden und Nachvollzogen das er die Letzte Datei in meinen Ordnern nimmt...
Das stimmt soweit auch weil in darunterliegenden Ordner September nix mehr drin ist.
Das war mein Hauptanliegen - die Ursache für das "unerklärliche Problem" aufzuzeigen.
Dein Schnipsel Kapiere ich jedoch nicht so ganz auch wenn Du es Erklärt hast.
--> for /f %i in ('dir /a-d /b /s b:\*.xls') do ...
> das b:*.xls muss doch nicht sein oder? es kann auch nur *.xls stehen
Ich habe nur bei mir das Laufwerk b:\ genommen, weil da zufällig eine heute geänderte *.xls-Datei vorhanden war.
Zweiter Halbsatz: Er sucht nach Datum/Uhrzeit: ja.
Danach gibt es zwei Möglichkeiten wie meist im Leben: entweder es wurde der String gefunden (wir Geeks nennen den Zustand oft TRUE oder SUCCESS) oder aber es wurde nix gefunden (FALSE oder FAILED)
Das eigentliche Ergebnis "was/welche Zeile wurde gefunden" würde auf dem Bildschirm ausgegeben werden
Da mich das "was" aber gar nicht interessiert schicke ich die Ausgabe mit ">nul" nach dorthin, wohin auch die laufenden Entwicklungskosten für den EuroHawk gebucht werden.
Verwerten will ich dagegen das oben genannte TRUE oder FALSE.
Dafür bietet mir die batchverabeitung zwei Operatoren
a) der Operator "&&", der so viel heisst wie: wenn der vorige Befehl SUCCESS/TRUE zurückgab, dann mach als nächstes...
und das nächste, was gemacht werden soll ist in der demo oben:
Und dort beachten: am CMD-Prompt haben FOR-Laufvariablen immer ein prozentzeichen (%i, %j,...).
Im batch werden zwei Prozentzeichen (%%i, %%j, ..) benötigt.
Jau, da bist du hier richtig.
Siehst du es?

Grüße
Biber
Öhmm, ja es gibt auch einen "Bieber" mit Frisurproblemen, aber ich bin "Biber".
Und auch wenn der andere Bieber und ich gelegentlich die gleiche Zielgruppe ansprechen - ich bevorzuge den Teil davon, der schon lesen und schreiben kann.
Also bring uns bitte nicht durcheinander - es gibt Unterschiede.
es tut mir leid ich raff das nicht....
Ich habe Verstanden und Nachvollzogen das er die Letzte Datei in meinen Ordnern nimmt...
Das stimmt soweit auch weil in darunterliegenden Ordner September nix mehr drin ist.
Eine Möglichkeit währe vor jedem Monat die entsprechende Monats zahl zu machen damit sie in der richtigen reinfolge
währen... das möchte ich aber nicht machen
Die Strategie wäre auch nur meine dritte Wahl.währen... das möchte ich aber nicht machen
Dein Schnipsel Kapiere ich jedoch nicht so ganz auch wenn Du es Erklärt hast.
--> for /f %i in ('dir /a-d /b /s b:\*.xls') do ...
> das b:*.xls muss doch nicht sein oder? es kann auch nur *.xls stehen
--> ... echo %~ti|find "%date%">nul
>... echo mir Datum/uhrzeit der Datei %i, pipe das nach "Findstr "heutigesDatum"
>....hier sucht er nach ein Datum was %~ti und >nul machen soll Verstehe ich nicht
Erster Teilsatz: ja.>... echo mir Datum/uhrzeit der Datei %i, pipe das nach "Findstr "heutigesDatum"
>....hier sucht er nach ein Datum was %~ti und >nul machen soll Verstehe ich nicht
Zweiter Halbsatz: Er sucht nach Datum/Uhrzeit: ja.
Danach gibt es zwei Möglichkeiten wie meist im Leben: entweder es wurde der String gefunden (wir Geeks nennen den Zustand oft TRUE oder SUCCESS) oder aber es wurde nix gefunden (FALSE oder FAILED)
Das eigentliche Ergebnis "was/welche Zeile wurde gefunden" würde auf dem Bildschirm ausgegeben werden
Da mich das "was" aber gar nicht interessiert schicke ich die Ausgabe mit ">nul" nach dorthin, wohin auch die laufenden Entwicklungskosten für den EuroHawk gebucht werden.
Verwerten will ich dagegen das oben genannte TRUE oder FALSE.
Dafür bietet mir die batchverabeitung zwei Operatoren
a) der Operator "&&", der so viel heisst wie: wenn der vorige Befehl SUCCESS/TRUE zurückgab, dann mach als nächstes...
und das nächste, was gemacht werden soll ist in der demo oben:
--> && echo Isch kopiere %i ...
>... und wenn du das heutige Datum gefunden hast, dann führe aus "echo Isch kopiere Datei %i
>.... Isch kopiere ist doch kein Befehl und was macht %i ? ? ?
... aber "echo isch kopieren" bzw. "echo irgendein text" ist gültig>... und wenn du das heutige Datum gefunden hast, dann führe aus "echo Isch kopiere Datei %i
>.... Isch kopiere ist doch kein Befehl und was macht %i ? ? ?
Ich habe mit dem Schnipsel mal ein bissen Experimentiert aber bei mir macht er nix nur das Dos Fenster auf und zu was ja eindeutig
ein Fehler ist und wenn ich das im CMD Fenster eintrage dann bekomme ich ein Syntax Fehler.
Bitte immer testen im "CMD-Fenster" ==" Start"->"Ausführen"->cmdein Fehler ist und wenn ich das im CMD Fenster eintrage dann bekomme ich ein Syntax Fehler.
Und dort beachten: am CMD-Prompt haben FOR-Laufvariablen immer ein prozentzeichen (%i, %j,...).
Im batch werden zwei Prozentzeichen (%%i, %%j, ..) benötigt.
Ich weiß das ist viel Verlangt aber ich möchte auch Verstehen wie es Funktionier was ich da mache.
Jau, da bist du hier richtig.
for /f %i in ('dir /a-d /b /s C:\Users\Herr und Gebieter\Desktop\Meine Tagesberichte\*.xls') do @echo %~ti|find
"%date%">nul &&
@echo %i ...
Wie oben geschrieben: am CMD immer %i, %j usw - im Batch immer %%i, %%j usw."%date%">nul &&
@echo %i ...
Siehst du es?
Und ja es darf gelacht werden...
Na ja, wir Biber sind da absolut humorlos.Vielen Dank im Vorraus
Jetzt wirst du lachen: genau diese Schreibweise hab ich hier schon 87x angeprangert. Grüße
Biber
Hallo ajmambo,
sich hier im Forum "im Vorraus" zu bedanken wird nicht gern gesehen. Wie ich finde zu Recht.
Ich habe ein Skript geschrieben, das passen könnte. Es geht davon aus, dass dein Datums- und Zeitformat auf Deutsch:Standard
Und bitte: immer nachher bedanken
Gruss!
sich hier im Forum "im Vorraus" zu bedanken wird nicht gern gesehen. Wie ich finde zu Recht.
Ich habe ein Skript geschrieben, das passen könnte. Es geht davon aus, dass dein Datums- und Zeitformat auf Deutsch:Standard
dd.mm.yyyy hh:mm
eingestellt ist, wenn nicht kann das geändert werden. Es hat auch Nachteile: es ist ziemlich langsam. Du musst den Ausgangsordner als %startfolder% eintragen und wenn alles OK ist, das Wort echo
vor copy
entfernen.@echo off &setlocal
set "startfolder=C:\Users\Herr und Gebieter\Desktop\Meine Tagesberichte"
for /r "%startfolder%" %%i in (*.xls) do (
set /a cn+=1
set "st=%%~ti"
set "fn=%%~fi"
call set "fs=%%st:~6,4%%%%st:~3,2%%%%st:~0,2%%%%st:~11,4%%"
call set "$%%fs%%%%cn%%=%%fn%%"
)
for /f "tokens=1*delims==" %%i in ('set "$"') do set "newest=%%j"
if defined newest (echo Newest file: "%newest%") else echo Error newest file not found!&goto:eof
echo copy "%newest%" "C:\Users\Herr und Gebieter\Desktop\A"
Und bitte: immer nachher bedanken
Gruss!