Batch Neuste Datei kopieren und Namen der Textdatei ändern
Hallo an alle,
ich bin neu hier und habe direkt eine Frage. Beschäftigte mich seit kurzem mit shell/batch und habe folgendes Problem. Aus Code-Schnipseln habe ich versucht mir eine Datei zu bauen, die Text Dateien kopieren soll, die einen bestimmten Namen haben. Es gibt jedoch weitere Dateien mit ähnlichem Namen in diesem Ordner. Jetzt möchte ich ein Batch haben der die neuste Datei mit diesem "Ungefähren-Namen" kopiert.
Hier der Code den ich mir zusammen gebaut / gesucht habe es aber auch so noch nicht funktioniert (kopierfunktion):
@echo off
setlocal
set workdir="C:\Neuer Ordner\"
set files=
dir %workdir% /A-D/B/OG-D>%temp%files.tmp
for /f "tokens=1* delims=" %%i in (%temp%files.tmp) do if not defined files set "files=%%i"
del %temp%files.tmp
echo %files%
xcopy "%files%" "C:\NeuerOrdner\NeuerOrdner\"
pause
Zum Verständnis:
Im Ordner C:\NeuerOrdner\ befinden sich Dateien die folgendermaßen heißen:
DE_999999_Adress_232323
DE_999999_Company_12122
einmal am Tag kommt eine neue DE_999999_Adress_* datei hinzu mit irgendeiner Zahlenkombination am schluss (wird von einem anderen System produziert).
Meine Frage: Wie kann man das Skript so schreiben, dass das Aktuelle File "DE_999999_Adress_" genommen wird.
MEin Versuch oben nimmt nur die aktuellste Datei , was in meinem fall jedoch nicht geht da es auch noch andere Arten von Files gibt die evtl. neuer sind.
Es wäre super wenn ihr mir helfen könnten.
MfG
Mooowe
ich bin neu hier und habe direkt eine Frage. Beschäftigte mich seit kurzem mit shell/batch und habe folgendes Problem. Aus Code-Schnipseln habe ich versucht mir eine Datei zu bauen, die Text Dateien kopieren soll, die einen bestimmten Namen haben. Es gibt jedoch weitere Dateien mit ähnlichem Namen in diesem Ordner. Jetzt möchte ich ein Batch haben der die neuste Datei mit diesem "Ungefähren-Namen" kopiert.
Hier der Code den ich mir zusammen gebaut / gesucht habe es aber auch so noch nicht funktioniert (kopierfunktion):
@echo off
setlocal
set workdir="C:\Neuer Ordner\"
set files=
dir %workdir% /A-D/B/OG-D>%temp%files.tmp
for /f "tokens=1* delims=" %%i in (%temp%files.tmp) do if not defined files set "files=%%i"
del %temp%files.tmp
echo %files%
xcopy "%files%" "C:\NeuerOrdner\NeuerOrdner\"
pause
Zum Verständnis:
Im Ordner C:\NeuerOrdner\ befinden sich Dateien die folgendermaßen heißen:
DE_999999_Adress_232323
DE_999999_Company_12122
einmal am Tag kommt eine neue DE_999999_Adress_* datei hinzu mit irgendeiner Zahlenkombination am schluss (wird von einem anderen System produziert).
Meine Frage: Wie kann man das Skript so schreiben, dass das Aktuelle File "DE_999999_Adress_" genommen wird.
MEin Versuch oben nimmt nur die aktuellste Datei , was in meinem fall jedoch nicht geht da es auch noch andere Arten von Files gibt die evtl. neuer sind.
Es wäre super wenn ihr mir helfen könnten.
MfG
Mooowe
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 189279
Url: https://administrator.de/contentid/189279
Ausgedruckt am: 22.11.2024 um 21:11 Uhr
32 Kommentare
Neuester Kommentar
moin,
zum einen - kennst du die code Tags hier im Forum?
zum anderen, was macht denn das @echo off?
last but not least was macht diese Zeile?
wobei das nur einer von xxx³ Wegen wäre
Gruß
zum einen - kennst du die code Tags hier im Forum?
zum anderen, was macht denn das @echo off?
last but not least was macht diese Zeile?
wobei das nur einer von xxx³ Wegen wäre
for /f "tokens=4" %%a in ('dir DE_999999_Adress_*^|find "%date%"') do type %%a
Gruß
und warum nutzt du Sie dann nicht? - wegen der Editierfunktion?
Ich vernachlässige mal mein Helfersyndrom und leg mich wieder in den Schatten.
@echo = hatte da vorher Textzeilen ausgegeben. kann vernachlässigt werden
Yupp - sehe ich auch so grade beim Bugfixen ist ein führendes ja zwingend erforderlich.Ich vernachlässige mal mein Helfersyndrom und leg mich wieder in den Schatten.
Ungetestet so.
Es könnte bei der Version noch zu einem Problem führen, wenn "DE_999999_Adress_*" in einem Ordner/Unterordner Namen auftaucht.
Wenn ja bescheid sagen.
Grüße
Darkprodukt
@echo off & setlocal
set "workdir=C:\Neuer Ordner\"
set "files="
for /f %%i in ('dir /a-s-h-d /o-d /b /s "workdir"^|findstr "DE_999999_Adress_*"') do if not defined files set "files=%%i"
echo %files%
xcopy "%files%" "C:\NeuerOrdner\NeuerOrdner\"
pause
Es könnte bei der Version noch zu einem Problem führen, wenn "DE_999999_Adress_*" in einem Ordner/Unterordner Namen auftaucht.
Wenn ja bescheid sagen.
Grüße
Darkprodukt
@Darkprodukt
Noch einfacher wäre übrigens als Zeile 4 ([Edit] wenn's nur um den einen Ordner gehen sollte und daher ohne "
Grüße
bastla
Es könnte bei der Version noch zu einem Problem führen, wenn "DE_999999_Adress_*" in einem Ordner/Unterordner Namen auftaucht.
Na, da lässt sich ja etwas dagegen tun (auch ungetestet ):@echo off & setlocal
set "workdir=C:\Neuer Ordner\"
set "files="
for /f %%i in ('dir /a-s-h-d /o-d /b /s "%workdir%\DE_999999_Adress_*"') do if not defined files set "files=%%i"
echo %files%
xcopy "%files%" "C:\NeuerOrdner\NeuerOrdner\"
pause
/s
" [/Edit]:for /f %%i in ('dir /a-s-h-d /od /b "%workdir%\DE_999999_Adress_*"') do set "files=%%i"
bastla
Was heist Fungtioniert garnicht?
-Beendet sich die Konsole ohne jeden Ton?
-Geht es bis zur Pause Zeile am ende?
-Gibts eine echo ausgabe?
-Fungtioniert das Echo, aber das Kopieren nicht?
@bastla
Danke ^^
Aber würde es so nicht auch ordner mit dem Namen "..." durchsuchen ;)
Da muss der Operator /s weg ;)
Und bei der vereinfachten Zeile 4,
würde die älterste Datei als ausgabe erscheinen.
Grüße
Darkprodukt
-Beendet sich die Konsole ohne jeden Ton?
-Geht es bis zur Pause Zeile am ende?
-Gibts eine echo ausgabe?
-Fungtioniert das Echo, aber das Kopieren nicht?
@bastla
Danke ^^
Aber würde es so nicht auch ordner mit dem Namen "..." durchsuchen ;)
Da muss der Operator /s weg ;)
Und bei der vereinfachten Zeile 4,
würde die älterste Datei als ausgabe erscheinen.
Grüße
Darkprodukt
@Darkprodukt
Grüße
bastla
Aber würde es so nicht auch ordner mit dem Namen "..." durchsuchen ;)
Es würden %workdir% und dessen Unterordner untersucht werden - wenn nicht gewünscht, dann (wie Du schon angemerkt hast) ohne "/s
", aber dafür mit Angabe des Quellordners (da ja dann nur noch ein Dateiname - ohne Pfad - als Ergebnis kommt) ...Und bei der vereinfachten Zeile 4,
würde die älterste Datei als ausgabe erscheinen.
Ist Dir das "-" aufgefallen (ich meine das, das es da nicht mehr gibt )?würde die älterste Datei als ausgabe erscheinen.
Grüße
bastla
Ja das ist mir auch gerade aufgefallen ;)
Wuste aber bis jezt nicht das man damit die fungtion umkehrt.
Sehr nützlich das zu wissen.
Grüße
Darkprodukt
So und hier jezt eine Version die fungtioniert.
-Im momment findet es auch ordner die ungefär so heißen "%workdir%\DE_999999_Adress_*\"
Das lässt sich umgehen wenn man die Dateiendung der datein hat.
In dem Fall so:
PS: Die (DATEIENDUNG) mit den Klammern durch die Dateiendung ersetzen. (Der satz ist einfach gut XD )
Wuste aber bis jezt nicht das man damit die fungtion umkehrt.
Sehr nützlich das zu wissen.
Grüße
Darkprodukt
So und hier jezt eine Version die fungtioniert.
@echo off & setlocal
set "workdir=C:\Neuer Ordner\"
for /f "delims=" %%i in ('dir /a-s-h-d /od /b /s "%workdir%\DE_999999_Adress_*"') do set "files=%%i"
echo %files%
xcopy "%files%" "C:\NeuerOrdner\NeuerOrdner\"
pause
-Im momment findet es auch ordner die ungefär so heißen "%workdir%\DE_999999_Adress_*\"
Das lässt sich umgehen wenn man die Dateiendung der datein hat.
In dem Fall so:
for /f "delims=" %%i in ('dir /a-s-h-d /od /b /s "%workdir%^|findstr "DE_999999_Adress_*.(DATEIENDUNG)"') do set "files=%%i"
PS: Die (DATEIENDUNG) mit den Klammern durch die Dateiendung ersetzen. (Der satz ist einfach gut XD )
Salve,
Bist du ein Fungi Koch?
-Im momment findet es auch ordner die ungefär so heißen "%workdir%\DE_999999_Adress_*\"
PS: Die (DATEIENDUNG) mit den Klammern durch die Dateiendung ersetzen. (Der satz ist einfach gut XD )
PS² Was bedeutet denn dieser Schalter -d, der da in beiden Zeilen zu finden ist und warum findet dann die erste Zeile Ordner?
Und was macht der €cho offer, wenn seine Datei keine suffix hat?
Testest du unter Fungi OS?
^Fragen über Fragen
Bist du ein Fungi Koch?
for /f "delims=" %%i in ('dir /a-s-h-d /od /b /s "%workdir%\DE_999999_Adress_*"') do set
-Im momment findet es auch ordner die ungefär so heißen "%workdir%\DE_999999_Adress_*\"
for /f "delims=" %%i in ('dir /a-s-h-d /od /b /s "%workdir%^|findstr
PS: Die (DATEIENDUNG) mit den Klammern durch die Dateiendung ersetzen. (Der satz ist einfach gut XD )
PS² Was bedeutet denn dieser Schalter -d, der da in beiden Zeilen zu finden ist und warum findet dann die erste Zeile Ordner?
Und was macht der €cho offer, wenn seine Datei keine suffix hat?
Testest du unter Fungi OS?
^Fragen über Fragen
moin,
wenn Du schon mit findstr in der Ausgabe herumfilterst dann dezimiere doch die Ausgabe auf eine Zeile, dezimiere noch die /S Rekursion und somit den Batch aufdrei vier Zeilen:
Gruß Phil
wenn Du schon mit findstr in der Ausgabe herumfilterst dann dezimiere doch die Ausgabe auf eine Zeile, dezimiere noch die /S Rekursion und somit den Batch auf
@echo off
pushD "C:\Neuer Ordner\"
for /f "tokens=1*delims=:" %%h in ('dir /a-s-h-d /o-d /b "DE_999999_Adress_*" ^|findstr /n . ^|findstr /b 1: ') do xcopy "%%i" "C:\NeuerOrdner\NeuerOrdner\"
popD
Gruß Phil
Zitat von @60730:
PS² Was bedeutet denn dieser Schalter -d, der da in beiden Zeilen zu finden ist und warum findet dann die erste Zeile
Ordner?
Und was macht der €cho offer, wenn seine Datei keine suffix hat?
Testest du unter Fungi OS?
Fragen über Fragen
Und das @echo off schaltet die Befehlszeilen anzeige aus.PS² Was bedeutet denn dieser Schalter -d, der da in beiden Zeilen zu finden ist und warum findet dann die erste Zeile
Ordner?
Und was macht der €cho offer, wenn seine Datei keine suffix hat?
Testest du unter Fungi OS?
Fragen über Fragen
So das man im CMD fenster nicht sehen kan das z.b. "move bla\bla.bla ula\ula.bla" geschrieben wurde sondern nur noch: "1 Datei wurde verschoben" Den satz könnte ich jezt noch mit "move bla\bla.bla ula\ula.bla>NUL" unterdrücken.
Der schalter d. Zu finden unter dir /? Ist eine unterfungtion von /o
/O Gibt die Liste sortiert aus.
Folge N Name (alphabetisch) S Größe (kleinere zuerst)
E Erweiterung (alphabetisch) D Datum/Zeit (ältere zuerst)
G Verzeichnisse zuerst - vorangestellt kehrt die
Reihenfolge um
@phil
for /f "tokens=1*delims=:" %%h in ('dir /a-s-h-d /o-d /b /s "DE_999999_Adress_*" ^|findstr /n . ^|findstr /b 1: ') do xcopy "%%i" "C:\NeuerOrdner\NeuerOrdner\"
Wennschon:
@echo off & setlocal
set "workdir=C:\Neuer Ordner\"
for /f "delims=" %%i in ('dir /a-s-h /o-d /b /s "%workdir%^|findstr /n "DE_999999_Adress_*."^|findstr /b "1:"') do echo %files% && xcopy "%files%" "C:\NeuerOrdner\NeuerOrdner\"
pause
Grüße
Darkprodukt
@Darkprodukt
T-Mos Frage bezog sich eigentlich auf das "
Grüße
bastla
T-Mos Frage bezog sich eigentlich auf das "
-d
" in "/a-s-h-d
" (und mit "" kennt er sich auch aus ) ...Grüße
bastla
Ah ok ^^
@mooowe
Mit der Batch solte eigentlich genau das klappen wie gewünscht.
Wenn nicht, bitte ein zu gebrauchendes Feedback danke.
Grüße
Darkprodukt
@mooowe
Mit der Batch solte eigentlich genau das klappen wie gewünscht.
Wenn nicht, bitte ein zu gebrauchendes Feedback danke.
@echo off & setlocal
set "workdir=C:\Neuer Ordner\"
for /f "delims=" %%i in ('dir /a-s-h-d /o-d /b /s "%workdir%^|findstr /n "DE_999999_Adress_*."^|findstr /b "1:"') do echo %files% && xcopy "%files%" "C:\NeuerOrdner\NeuerOrdner\"
pause
Grüße
Darkprodukt
@Darkprodukt
Grüße
bastla
Hm das -d solte eigentlich nicht rein. War wohl gewohnheit ;)
Falsche Antwort.Grüße
bastla
moin,
schau dir bitte diesen verlinkten @echo off Beitrag an und befolge die Ratschläge.
Und dann ist eine Frage - was passiert denn mit den kopierten Dateien?
Bleiben die im Ziel oder werden die umbenannt?
Was passiert, wenn du den Einzeiler (die erste Antwort) von
schau dir bitte diesen verlinkten @echo off Beitrag an und befolge die Ratschläge.
Und dann ist eine Frage - was passiert denn mit den kopierten Dateien?
Bleiben die im Ziel oder werden die umbenannt?
Was passiert, wenn du den Einzeiler (die erste Antwort) von
for /f "tokens=4" %%a in ('dir DE_999999_Adress_*^|find "%date%"') do type %%a
auffor /f "tokens=4" %%a in ('dir DE_999999_Adress_*^|find "%date%"') do copy "%%a" ziel\
oder ähnlich umtrimmst?
Hallo mooowe!
Wenn ja, dann etwa so:
wobei natürlich die vorher kopierte Datei überschrieben wird (die heißt ja auch schon "DE_999999_Adress") ...
Grüße
bastla
Beim zweiten mal findet er nicht mehr die jüngste Datei (sondern er will die Datei kopieren die er bereits kopiert hat).
Wenn nicht verschoben, sondern nur kopiert wird, bleibt die jüngste Datei auch die jüngste Datei (bis eine noch jüngere kommt) ...Desweiteren sollte er den Namen ab dem * abtrennen und nur diesen Teil kopieren.
Meinst Du damit, dass die kopierte Datei dann "DE_999999_Adress" heißen soll?Wenn ja, dann etwa so:
@echo off & setlocal
set "workdir=C:\Neuer Ordner"
set "file="
for /f %%i in ('dir /a-s-h-d /od /b "%workdir%\DE_999999_Adress_*"') do set "file=%%i"
if not defined file echo Keine Datei gefunden! & goto :eof
for /f "tokens=1-3 delims=_" %%a in ("%file%") do copy "%workdir%\%file%" "%workdir%\NeuerOrdner\%%a_%%b_%%c">nul
Grüße
bastla
moin,
Kennst du den alten Kneipenspruch "auf einem Bein kann man nicht stehen?"
Kennst du die päärchenbildung?
PS: genau deswegen hab ich mir erlaubt deine Frage als nicht sehr anspruchsvoll zu markieren.
Denn das ganze steht hier sicherlich schon mal extra für dich geschrieben.
N8
Ps: Wenn du sowohl
als auch
Vielen Dank schonmal..
Kennst du den alten Kneipenspruch "auf einem Bein kann man nicht stehen?"
Kennst du die päärchenbildung?
- wieviele " sind in der Zeile set "outfolder="C:\NeuerOrdner\NeuerOrdner\"
- warum steht in deiner geänderten und nicht laufenden batch ein @echo off?
PS: genau deswegen hab ich mir erlaubt deine Frage als nicht sehr anspruchsvoll zu markieren.
Denn das ganze steht hier sicherlich schon mal extra für dich geschrieben.
N8
Ps: Wenn du sowohl
set "infolder=C:\NeuerOrdner\"
set "outfolder="C:\NeuerOrdner\NeuerOrdner\"
set "outfolder="C:\NeuerOrdner\NeuerOrdner\"
als auch
do copy "%infolder%\%file%" "%outfolder%\%%a_
nimmst - wieviele \ sind dann hintereinander und gehören die da hin?
moin mooowe,
da wir leider nicht absolut die gleiche Umgebung haben ist es doch nicht zuviel verlangt, dass Du in Deinem Batch das @echo off entweder zu einem ::@echo off machst oder @echo on drausbastelst.
Es geht ja nicht nur darum, dass Du schon wieder ein paar Fragen (die hier übrigens sehr oft gestellt werden) von Threaderstellern sondern auch von den Antwortenden erwartet werden können.
Timos Tipp ist nicht nur so dahergeschrieben.
Lies ihn durch und befolge ihn.
Dann kannst Du hier die Fehlermeldung oder das was bei Dir Ausgegeben wird hier hinkrizeln.
Gruß Phil
da wir leider nicht absolut die gleiche Umgebung haben ist es doch nicht zuviel verlangt, dass Du in Deinem Batch das @echo off entweder zu einem ::@echo off machst oder @echo on drausbastelst.
Es geht ja nicht nur darum, dass Du schon wieder ein paar Fragen (die hier übrigens sehr oft gestellt werden) von Threaderstellern sondern auch von den Antwortenden erwartet werden können.
Timos Tipp ist nicht nur so dahergeschrieben.
Lies ihn durch und befolge ihn.
Dann kannst Du hier die Fehlermeldung oder das was bei Dir Ausgegeben wird hier hinkrizeln.
Gruß Phil
moin,
Naja - streng genommen kann man das schon mit Jeopardy vergleichen - stelle eine Antwort in Frageform.
Und nein wenn man sich selber mit echo off die chance nimmt den Bock zu finden - dann verlangt man indirekt - copy&paste das - fügs in eine txt Datei - bau die Ordnerstruktur drumrum auf und lass es ohne €echo off laufen und schreib mir - wos hängt.
Und die zwei \\ war ein Schnellschuss, den ich auf den ersten halben Blick gesehen hab und dank deiner @echo off Nummer (widerwilligerweise wiederholt) hatte ich keinen Bock auf den zweiten Blick.
Also - nimm diesen verlinkten Beitrag schau nach der/den Zeilen wo was vonwegen batch>output oder sinngemäß drin steht und dann siehst du was Ambach ist.
Oder bau dir ein
Hybsch / blind machen kann man ne Batch später immer noch - aber doch nicht während der Bauphase...
Ich versteh so einen Ansatz einfach nicht - ok Bastla batcheld blind - aber bis da ein normalsterblicher auch nur Ansatzweise drankommt das dauert.
@ Bastla - da (\\) hab ich schon die dollsten Sachen gesehen
Gruß
Gruß
Zitat von @mooowe:
@timobeil.. ist das hier ein Forum in dem man Gegenfragen zu gestellten Fragen stellt anstatt Antworten zu geben?
@timobeil.. ist das hier ein Forum in dem man Gegenfragen zu gestellten Fragen stellt anstatt Antworten zu geben?
Naja - streng genommen kann man das schon mit Jeopardy vergleichen - stelle eine Antwort in Frageform.
Und nein wenn man sich selber mit echo off die chance nimmt den Bock zu finden - dann verlangt man indirekt - copy&paste das - fügs in eine txt Datei - bau die Ordnerstruktur drumrum auf und lass es ohne €echo off laufen und schreib mir - wos hängt.
Und die zwei \\ war ein Schnellschuss, den ich auf den ersten halben Blick gesehen hab und dank deiner @echo off Nummer (widerwilligerweise wiederholt) hatte ich keinen Bock auf den zweiten Blick.
Also - nimm diesen verlinkten Beitrag schau nach der/den Zeilen wo was vonwegen batch>output oder sinngemäß drin steht und dann siehst du was Ambach ist.
Oder bau dir ein
if exist %variable%\. echo Pfad %variable% gefunden in das Ding
Sei kreativ und nimm auch das >nul nach dem xcopy weg....Hybsch / blind machen kann man ne Batch später immer noch - aber doch nicht während der Bauphase...
Ich versteh so einen Ansatz einfach nicht - ok Bastla batcheld blind - aber bis da ein normalsterblicher auch nur Ansatzweise drankommt das dauert.
@ Bastla - da (\\) hab ich schon die dollsten Sachen gesehen
Gruß
Gruß