Dateien nach Datum sortieren
Dateien nach Datum sortieren und dann kopieren
[Edit Biber]: Ist mit vereinten Kräften fast schon eine Musterlösung geworden [/Edit]
Hallo alle zusammen,
ich habe mal eine Bitte an "Batcher" unter euch:
ich möchte aus einem Ordner die letzten 2 dateien in ein anderen Ordner kopieren, wobei dateien alle errorxxxxxx.txt heißen.
Bis jetzt funktioniert es so:
@echo off
:: -------erstelle ordner
mkdir "H:\My Databases\test_xcopy\%date%"
:: ------- hier soll eine Sortierung im aktuellem Ordner erfolgen und dann die letzten 2 Dateien kopiert werden
??????
:: ------- kopiere Datei
xcopy H:\testxcopy\robot.txt "H:\My Databases\test_xcopy\%date%" /D /Y
:: ------- kopiere Datei (davon die letzten 2???)
xcopy H:\testxcopy\Kensingtonerr*.txt "H:\My Databases\test_xcopy\%date%" /D /Y
close
wenn jemand eine Idee hat, dann antwortet bitte.
PS: Können die Dateien auch noch vor dem kopieren gepackt werden??
Ciao René
[Edit Biber]: Ist mit vereinten Kräften fast schon eine Musterlösung geworden [/Edit]
Hallo alle zusammen,
ich habe mal eine Bitte an "Batcher" unter euch:
ich möchte aus einem Ordner die letzten 2 dateien in ein anderen Ordner kopieren, wobei dateien alle errorxxxxxx.txt heißen.
Bis jetzt funktioniert es so:
@echo off
:: -------erstelle ordner
mkdir "H:\My Databases\test_xcopy\%date%"
:: ------- hier soll eine Sortierung im aktuellem Ordner erfolgen und dann die letzten 2 Dateien kopiert werden
??????
:: ------- kopiere Datei
xcopy H:\testxcopy\robot.txt "H:\My Databases\test_xcopy\%date%" /D /Y
:: ------- kopiere Datei (davon die letzten 2???)
xcopy H:\testxcopy\Kensingtonerr*.txt "H:\My Databases\test_xcopy\%date%" /D /Y
close
wenn jemand eine Idee hat, dann antwortet bitte.
PS: Können die Dateien auch noch vor dem kopieren gepackt werden??
Ciao René
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 50240
Url: https://administrator.de/contentid/50240
Ausgedruckt am: 22.11.2024 um 09:11 Uhr
14 Kommentare
Neuester Kommentar
@echo off
setlocal enabledelayedexpansion
set Anzahl=2
set zahl=1
FOR /F "delims=" %%i in ('dir /b /O-D') do (
if !zahl! leq %anzahl% ECHO copy "%%i"
set /a zahl=!zahl!+1
)
Unter Anzahl gibst du eben deine zwei oder wieviele du kopiert haben willst an.
Hier siehst du nur welche Kopiert weren. Wilslt du das es ausgeführt wird must du das ECHO entfernen.
miniversum
setlocal enabledelayedexpansion
set Anzahl=2
set zahl=1
FOR /F "delims=" %%i in ('dir /b /O-D') do (
if !zahl! leq %anzahl% ECHO copy "%%i"
set /a zahl=!zahl!+1
)
Unter Anzahl gibst du eben deine zwei oder wieviele du kopiert haben willst an.
Hier siehst du nur welche Kopiert weren. Wilslt du das es ausgeführt wird must du das ECHO entfernen.
miniversum
...oder, wenn Du es ohne Delayedexpansion machen willst:
[ungetestete Skizze]
Zum Thema Packen, Zippen, Raren findest Du ein paar Beispiel-Beiträge im Bereich Batch & Shell.
HTH
Biber
:: -----------snipp ProcessLast.bat [Parameter1: Anzahl]
@echo off & setlocal
REM Kein Parameter angegeben? Dann "1" als Anzahl annehmen
If [%1]== %0 1
if not exist "H:\My Databases\test_xcopy\%date%" mkdir "H:\My Databases\test_xcopy\%date%"
For /L %%i in (1,1,%1) do call :doSomething
goto :eof
:doSomething
for /f %i in ('dir /b /o:d error*.txt') do @Set "ThisErrorFile=%%i"
REM Die neueste Errorxxxxx.txt steht in der Variablen %ThisErrorfile%
REM und nun COPY, MOVE, RENAME oder 7z oder Rar mir diese Datei... Beispiel MOVE:
Move "%ThisErrorFile% "H:\My Databases\test_xcopy\%date%\*.*"
goto :eof
[ungetestete Skizze]
Zum Thema Packen, Zippen, Raren findest Du ein paar Beispiel-Beiträge im Bereich Batch & Shell.
HTH
Biber
@echo off
:: -------erstelle ordner
mkdir "H:\My Databases\test_xcopy\%date%"
:: ------- hier soll eine Sortierung im aktuellem Ordner erfolgen und dann die letzten 2 Dateien kopiert werden
setlocal enabledelayedexpansion
set Anzahl=2
set zahl=1
FOR /F "delims=" %%i in ('dir /b /O-D') do (
if !zahl! leq %anzahl% ECHO copy "%%i" "Z:\iehl"
set /a zahl=!zahl!+1
)
setlocal disabledelayedexpansion
:: ------- kopiere Datei
xcopy H:\testxcopy\robot.txt "H:\My Databases\test_xcopy\%date%" /D /Y
:: ------- kopiere Datei (davon die letzten 2???)
xcopy H:\testxcopy\Kensingtonerr*.txt "H:\My Databases\test_xcopy\%date%" /D /Y
close
Das dickgedruckte "Z:\iehl" must du halt anpassen WOHIN die Dateien kopiert werden sollen.
Das ECHO mußt du entfernen das die Dateien wirklich kopiert werden und nicht nur angezeigt.
Das setlocal disabledelayedexpansion ist wahlweiße. kansnt du auch weglassen.
miniversum
:: -------erstelle ordner
mkdir "H:\My Databases\test_xcopy\%date%"
:: ------- hier soll eine Sortierung im aktuellem Ordner erfolgen und dann die letzten 2 Dateien kopiert werden
setlocal enabledelayedexpansion
set Anzahl=2
set zahl=1
FOR /F "delims=" %%i in ('dir /b /O-D') do (
if !zahl! leq %anzahl% ECHO copy "%%i" "Z:\iehl"
set /a zahl=!zahl!+1
)
setlocal disabledelayedexpansion
:: ------- kopiere Datei
xcopy H:\testxcopy\robot.txt "H:\My Databases\test_xcopy\%date%" /D /Y
:: ------- kopiere Datei (davon die letzten 2???)
xcopy H:\testxcopy\Kensingtonerr*.txt "H:\My Databases\test_xcopy\%date%" /D /Y
close
Das dickgedruckte "Z:\iehl" must du halt anpassen WOHIN die Dateien kopiert werden sollen.
Das ECHO mußt du entfernen das die Dateien wirklich kopiert werden und nicht nur angezeigt.
Das setlocal disabledelayedexpansion ist wahlweiße. kansnt du auch weglassen.
miniversum
Moin rejael,
hier auch noch mal meine [ungetestete] Variante im Stück:
Gruß
Biber
hier auch noch mal meine [ungetestete] Variante im Stück:
:.------snipp CopyLast.bat
@echo off & setlocal
:: Was variabel bleiben sollte, ist die Anzahl --->Parameter 1; Default 1
IF [%1]== %0 1
:: ------- hier soll eine Sortierung im aktuellem Ordner erfolgen und dann die letzten 2 Dateien kopiert werden
::Hmmm, die Vorgabe "aktueller Ordner" ist gefährlich.. geh lieber von "immer ein bestimmter Ordner aus.
Set "QuellOrdner=H:\testxcopy"
:: und den ZielOrdner unterstellen wir auch mal als fest
Set "ZielOrdner=H:\My Databases\test_xcopy"
If not exist "%QuellOrdner%" (
echo QuellOrdner nicht vorhanden
Pause
Goto :eof
)
PushD "%QuellOrdner%"
For /L %%i in (1,1,%1) do call :doSomething
If exist "%Zielordner%\%date%" copy "%QuellOrdner%\robot.txt" "%ZielOrdner\%date%\*.*"
PopD
goto :eof
:doSomething
for /f %%i in ('dir /b /o:d Kensingtonerr*.txt') do @Set "ThisErrorFile=%%i"
REM Die neueste KensingtonErrorxxxxx.txt steht in der Variablen %ThisErrorfile%
REM und nun COPY, MOVE, RENAME oder 7z oder Rar mir diese Datei... Beispiel COPY:
::erst jetzt das...%date%-Verzeichnis anlegen
If not exist "%Zielordner\%date%" md "%Zielordner\%date%"
Copy "%ThisErrorFile% "%Zielordner\%date%\*.*"
goto :eof
Gruß
Biber
Hallo rejael!
Ich hatte gerade ein paar ruhige Minuten ...
@Biber
Ich hab' noch einige % und ein " hineingeworfen, aber in der obigen Form sollte ein "move" stattfinden (da immer nur die aktuellste Datei gesucht wird).
Mit einigen Fundstücken aus Deiner Trickkiste (ja, die war schon wieder offen ), käme bei mir diese Variante heraus:
Grüße
bastla
[Edit] Zur Sicherheit noch "delims=" eingebaut - falls die "KensingtonErrorxxxxx.txt" eine "KensingtonError x xx.txt" wäre ... [/Edit]
Ich hatte gerade ein paar ruhige Minuten ...
@Biber
Ich hab' noch einige % und ein " hineingeworfen, aber in der obigen Form sollte ein "move" stattfinden (da immer nur die aktuellste Datei gesucht wird).
Mit einigen Fundstücken aus Deiner Trickkiste (ja, die war schon wieder offen ), käme bei mir diese Variante heraus:
::------snipp CopyLast.bat
@echo off & setlocal
:: Was variabel bleiben sollte, ist die Anzahl --->Parameter 1; Default 1
IF [%1]== %0 1
:: ------- hier soll eine Sortierung im aktuellem Ordner erfolgen und dann die letzten 2 Dateien kopiert werden
::Hmmm, die Vorgabe "aktueller Ordner" ist gefährlich.. geh lieber von "immer ein bestimmter Ordner aus.
Set "QuellOrdner=Z:\testxcopy"
:: und den ZielOrdner unterstellen wir auch mal als fest
Set "ZielOrdner=Z:\My Databases\test_xcopy"
If not exist "%QuellOrdner%" (
echo QuellOrdner nicht vorhanden
Pause
Goto :eof
)
PushD "%QuellOrdner%"
For /L %%i in (1,1,%1) do call :doSomething %%i
If exist "%Zielordner%\%date%" copy /y "%QuellOrdner%\robot.txt" "%ZielOrdner%\%date%\*.*" >nul
PopD
goto :eof
:doSomething
set /a Nr=%1 - 1
set ThisErrorFile=
if %Nr%==0 (
for /f "delims=" %%i in ('dir /b /o:-d Kensingtonerr*.txt') do if not defined ThisErrorFile @Set "ThisErrorFile=%%i"
) else (
for /f "skip=%Nr% delims=" %%i in ('dir /b /o:-d Kensingtonerr*.txt') do if not defined ThisErrorFile @Set "ThisErrorFile=%%i"
)
REM Die %%L. neueste KensingtonErrorxxxxx.txt steht in der Variablen %ThisErrorfile%
REM und nun COPY, RENAME oder 7z oder Rar mir diese Datei... Beispiel COPY:
::erst jetzt das...%date%-Verzeichnis anlegen
If not exist "%Zielordner%\%date%" md "%Zielordner%\%date%"
Copy "%ThisErrorFile%" "%Zielordner%\%date%\*.*" > nul
goto :eof
Grüße
bastla
[Edit] Zur Sicherheit noch "delims=" eingebaut - falls die "KensingtonErrorxxxxx.txt" eine "KensingtonError x xx.txt" wäre ... [/Edit]
Hallo rejael!
(wenn Du unter "CopyLast.bat" gespeichert hast).
Zu
Grüße
bastla
[Edit] Überflüssige Pfaderweiterung entfernt [/Edit]
Nur eins funktioniert nicht recht und zwar die Variable setzten für die Anzahl:
:: ------- hier soll eine Sortierung im aktuellem Ordner erfolgen und dann die letzten 2 Dateien
Was genau meinst Du mit "funktioniert nicht recht"? Der Batch ist so angelegt, dass die Anzahl beim Aufruf übergeben wird, so dass Du leicht von 2 auf 4 oder 7 Dateien umstellen kannst, daher starten mit:: ------- hier soll eine Sortierung im aktuellem Ordner erfolgen und dann die letzten 2 Dateien
CopyLast 2
Zu
Anzahl --->Parameter -2 1; Default 1
Parameter 1 meint hier, wie oben gezeigt, dass als erster (und einziger) Parameter beim Aufruf die Anzahl der zu kopierenden Dateien übergeben werden soll - wurde dies nicht gemacht, stellt diese ZeileIF [%1]== %0 2
sicher, dass ein Defaultwert verwendet wird (von Dir jetzt auf 2 geändert). Zur Sicherheit solltest Du aber, wie oben gezeigt, die Anzahl beim Aufruf mitgeben.ansonsten super, ich danke dir wie verrückt.
Freut mich, mein Anteil dabei ist aber vergleichsweise gering gewesen, daher: fwd 2 Biber ...Wegen des zippens der dateien mache ich mich später mla schlau...
Vielleicht als Hinweis: Von 7-zip gibt es eine Kommandozeilenversion, zu finden hier, die Du verwenden könntest. Aus dem "copy"-Befehl würde dann etwas in der Art (genaue Syntax müsstest Du Dir ansehen):C:\Utils\7za.exe a -tzip "%Zielordner%\%date:.=-%.zip" "%ThisErrorFile%"
Grüße
bastla
[Edit] Überflüssige Pfaderweiterung entfernt [/Edit]