Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Dateien nach Datum sortieren

Frage Entwicklung Batch & Shell

Mitglied: rejael

rejael (Level 1) - Jetzt verbinden

30.01.2007, aktualisiert 01.02.2007, 9322 Aufrufe, 14 Kommentare

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é
Mitglied: miniversum
30.01.2007 um 16:13 Uhr
@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
Bitte warten ..
Mitglied: Biber
30.01.2007 um 18:01 Uhr
...oder, wenn Du es ohne Delayedexpansion machen willst:
01.
:: -----------snipp ProcessLast.bat [Parameter1: Anzahl] 
02.
@echo off & setlocal 
03.
REM Kein Parameter angegeben? Dann "1" als Anzahl annehmen 
04.
If [%1]==[] %0 1 
05.
if not exist "H:\My Databases\test_xcopy\%date%" mkdir "H:\My Databases\test_xcopy\%date%" 
06.
For /L %%i in (1,1,%1) do call :doSomething 
07.
goto :eof 
08.
 
09.
:doSomething 
10.
for /f %i in ('dir /b /o:d error*.txt') do @Set "ThisErrorFile=%%i" 
11.
REM Die neueste Errorxxxxx.txt steht in der Variablen %ThisErrorfile% 
12.
REM und nun COPY, MOVE, RENAME oder 7z oder Rar mir diese Datei... Beispiel MOVE: 
13.
Move "%ThisErrorFile%  "H:\My Databases\test_xcopy\%date%\*.*" 
14.
goto :eof
[ungetestete Skizze]

Zum Thema Packen, Zippen, Raren findest Du ein paar Beispiel-Beiträge im Bereich Batch & Shell.

HTH
Biber
Bitte warten ..
Mitglied: rejael
31.01.2007 um 21:10 Uhr
Super Danke für die schnelle Antwort, nur leider bin ich nicht der Experte in Sachen Programmierung!
Wo müsste denn dann dein Code eingesetzt werden?

@echo off
:: -------erstelle ordner
mkdir "H:\My Databases\test_xcopy\%date%"
xcopy H:\testxcopy\robot.txt "H:\My Databases\test_xcopy\%date%" /D /Y

setlocal enabledelayedexpansion
set Anzahl=2

set zahl=2
FOR /F "delims=" %%i in ('dir /b /O-D') do (
if !zahl! leq %anzahl% ECHO copy "%%i"
set /a zahl=!zahl!+1
)

xcopy H:\testxcopy\Kensingtonerr*.txt "H:\My Databases\test_xcopy\%date%" /D /Y

close

So wird der Ordner erstellt und die robot.txt kopiert, aber die
Oder muss dann der ganze Code anders geschrieben werden???

Danke euch
Bitte warten ..
Mitglied: miniversum
31.01.2007 um 21:24 Uhr
@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
Bitte warten ..
Mitglied: rejael
31.01.2007 um 21:41 Uhr
Also wenn ich es so anpasse, dann wird die robot.txt und die ganzen Kingstonerrorxxx.txt kopiert, aber ich will ja nur die 2 aktuellsten Kingstonerrorxxx.txt dateien kopiert haben?

@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=1

set zahl=1
FOR /F "delims=" %%i in ('dir /b /O-D') do (
if !zahl! leq %anzahl% copy "%%i" "H:\My Databases\test_xcopy\%date%"
set /a zahl=!zahl!+1
)

::---setlocal disabledelayedexpansion

:: ------- kopiere Datei
xcopy H:\testxcopy\robot.txt "H:\My Databases\test_xcopy\%date%" /D /Y

:: ------- kopiere Datei Kensingtonerr*.txt (davon die letzten 2???)
xcopy H:\testxcopy\Kensingtonerr*.txt "H:\My Databases\test_xcopy\%date%" /D /Y

close

Danke rejael
Bitte warten ..
Mitglied: rejael
31.01.2007 um 21:41 Uhr
Also wenn ich es so anpasse, dann wird die robot.txt und die ganzen Kingstonerrorxxx.txt kopiert, aber ich will ja nur die 2 aktuellsten Kingstonerrorxxx.txt dateien kopiert haben?

@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=1

set zahl=1
FOR /F "delims=" %%i in ('dir /b /O-D') do (
if !zahl! leq %anzahl% copy "%%i" "H:\My Databases\test_xcopy\%date%"
set /a zahl=!zahl!+1
)

::---setlocal disabledelayedexpansion

:: ------- kopiere Datei
xcopy H:\testxcopy\robot.txt "H:\My Databases\test_xcopy\%date%" /D /Y

:: ------- kopiere Datei Kensingtonerr*.txt (davon die letzten 2???)
xcopy H:\testxcopy\Kensingtonerr*.txt "H:\My Databases\test_xcopy\%date%" /D /Y

close

Danke rejael
Bitte warten ..
Mitglied: Biber
31.01.2007 um 22:23 Uhr
Moin rejael,

hier auch noch mal meine [ungetestete] Variante im Stück:

01.
:.------snipp CopyLast.bat  
02.
@echo off & setlocal 
03.
:: Was variabel bleiben sollte, ist die Anzahl --->Parameter 1; Default 1 
04.
IF [%1]==[] %0 1 
05.
:: ------- hier soll eine Sortierung im aktuellem Ordner erfolgen und dann die letzten 2 Dateien kopiert werden 
06.
::Hmmm, die Vorgabe "aktueller Ordner" ist gefährlich.. geh lieber von "immer ein bestimmter Ordner aus. 
07.
Set "QuellOrdner=H:\testxcopy" 
08.
:: und den ZielOrdner unterstellen wir auch mal als fest 
09.
Set "ZielOrdner=H:\My Databases\test_xcopy" 
10.
If not exist "%QuellOrdner%" ( 
11.
    echo QuellOrdner nicht vorhanden 
12.
    Pause 
13.
    Goto :eof 
14.
)     
15.
PushD "%QuellOrdner%" 
16.
For /L %%i in (1,1,%1) do call :doSomething 
17.
If exist "%Zielordner%\%date%" copy "%QuellOrdner%\robot.txt"  "%ZielOrdner\%date%\*.*"  
18.
PopD 
19.
goto :eof 
20.
 
21.
:doSomething 
22.
for /f %%i in ('dir /b /o:d Kensingtonerr*.txt') do @Set "ThisErrorFile=%%i" 
23.
REM Die neueste KensingtonErrorxxxxx.txt steht in der Variablen %ThisErrorfile% 
24.
REM und nun COPY, MOVE, RENAME oder 7z oder Rar mir diese Datei... Beispiel COPY: 
25.
::erst jetzt das...%date%-Verzeichnis anlegen 
26.
If not exist "%Zielordner\%date%" md "%Zielordner\%date%" 
27.
Copy "%ThisErrorFile%  "%Zielordner\%date%\*.*" 
28.
goto :eof
Gruß
Biber
Bitte warten ..
Mitglied: rejael
31.01.2007 um 22:34 Uhr
ok klappt leider nicht, es wird kein ordner angelegt und auch nichts kopiert???
Hast du noch idee?

Danke im voraus
Bitte warten ..
Mitglied: Biber
31.01.2007 um 22:48 Uhr
Probier jetzt noch mal..

Habe im Source ein "for /f %i in.." durch "for /f %%i in.." ersetzt.

[Aber immer noch nicht getestet.. unterhalte mich grad in einem anderen Thread mit darkbrain85, sorry]

Gruß
Biber
Bitte warten ..
Mitglied: rejael
31.01.2007 um 22:58 Uhr
Na ja geht immer noch nicht, vielleicht kannst du es ja einmal in einer ruhigen Minute testen?
Bis später mal
Bitte warten ..
Mitglied: bastla
01.02.2007 um 15:01 Uhr
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:
01.
::------snipp CopyLast.bat  
02.
@echo off & setlocal 
03.
:: Was variabel bleiben sollte, ist die Anzahl --->Parameter 1; Default 1 
04.
IF [%1]==[] %0 1 
05.
:: ------- hier soll eine Sortierung im aktuellem Ordner erfolgen und dann die letzten 2 Dateien kopiert werden 
06.
::Hmmm, die Vorgabe "aktueller Ordner" ist gefährlich.. geh lieber von "immer ein bestimmter Ordner aus. 
07.
Set "QuellOrdner=Z:\testxcopy" 
08.
:: und den ZielOrdner unterstellen wir auch mal als fest 
09.
Set "ZielOrdner=Z:\My Databases\test_xcopy" 
10.
If not exist "%QuellOrdner%" ( 
11.
    echo QuellOrdner nicht vorhanden 
12.
    Pause 
13.
    Goto :eof 
14.
)     
15.
PushD "%QuellOrdner%" 
16.
For /L %%i in (1,1,%1) do call :doSomething %%i 
17.
If exist "%Zielordner%\%date%" copy /y "%QuellOrdner%\robot.txt" "%ZielOrdner%\%date%\*.*" >nul 
18.
PopD 
19.
goto :eof 
20.
 
21.
:doSomething 
22.
set /a Nr=%1 - 1 
23.
set ThisErrorFile= 
24.
if %Nr%==0 ( 
25.
	for /f "delims=" %%i in ('dir /b /o:-d Kensingtonerr*.txt') do if not defined ThisErrorFile @Set "ThisErrorFile=%%i" 
26.
	) else ( 
27.
	for /f "skip=%Nr% delims=" %%i in ('dir /b /o:-d Kensingtonerr*.txt') do if not defined ThisErrorFile @Set "ThisErrorFile=%%i" 
28.
)	 
29.
REM Die %%L. neueste KensingtonErrorxxxxx.txt steht in der Variablen %ThisErrorfile% 
30.
REM und nun COPY, RENAME oder 7z oder Rar mir diese Datei... Beispiel COPY: 
31.
::erst jetzt das...%date%-Verzeichnis anlegen 
32.
If not exist "%Zielordner%\%date%" md "%Zielordner%\%date%" 
33.
Copy "%ThisErrorFile%"  "%Zielordner%\%date%\*.*" > nul 
34.
goto :eof
Grüße
bastla

[Edit] Zur Sicherheit noch "delims=" eingebaut - falls die "KensingtonErrorxxxxx.txt" eine "KensingtonError x xx.txt" wäre ... [/Edit]
Bitte warten ..
Mitglied: Biber
01.02.2007 um 15:11 Uhr
Thx, bastla,

ist mir grad sehr Recht, dass Du da mal drüberguckst...
Ich kasper' hier grad mit "produktiven Problemen" und vor allem mit unproduktiven Nasen rum..

Hoffentlich kommt bald der Vi$ta-Rollout, damit endlich diese Computerproblem aufhören...

Gruss
Biber
Bitte warten ..
Mitglied: rejael
01.02.2007 um 20:30 Uhr
Hallo Bastla,

es hat geklappt!!!!! Danke
Nur eins funktioniert nicht recht und zwar die Variable setzten für die Anzahl:

::------snipp CopyLast.bat
@echo off & setlocal
:: Was variabel bleiben sollte, ist die Anzahl --->Parameter 2; Default 1
IF [%1]==[] %0 2
:: ------- hier soll eine Sortierung im aktuellem Ordner erfolgen und dann die letzten 2 Dateien

ansonsten super, ich danke dir wie verrückt.
Wegen des zippens der dateien mache ich mich später mla schlau...

rejael
Bitte warten ..
Mitglied: bastla
01.02.2007 um 21:12 Uhr
Hallo rejael!

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
01.
CopyLast 2
(wenn Du unter "CopyLast.bat" gespeichert hast).

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 Zeile
IF [%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):
01.
C:\Utils\7za.exe a -tzip "%Zielordner%\%date:.=-%.zip" "%ThisErrorFile%"
Grüße
bastla

[Edit] Überflüssige Pfaderweiterung entfernt [/Edit]
Bitte warten ..
Neuester Wissensbeitrag
CPU, RAM, Mainboards

Angetestet: PC Engines APU 3a2 im Rack-Gehäuse

(2)

Erfahrungsbericht von ashnod zum Thema CPU, RAM, Mainboards ...

Ähnliche Inhalte
Microsoft Office
Alle CSV-Dateien mit neuem Datum in einem Ordner mit einem VBA Makro einlesen (1)

Frage von parlermo2102 zum Thema Microsoft Office ...

VB for Applications
VBS Script zum versenden mehrerer Verknüpfungen zu Dateien per Lotus Notes

Frage von Sentinel87 zum Thema VB for Applications ...

Windows Server
Server sehr langsam bei vielen kleinen Dateien (5)

Frage von MichiBLNN zum Thema Windows Server ...

Heiß diskutierte Inhalte
Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (15)

Frage von JayyyH zum Thema Switche und Hubs ...

DSL, VDSL
DSL-Signal bewerten (13)

Frage von SarekHL zum Thema DSL, VDSL ...

Backup
Clients als Server missbrauchen? (10)

Frage von 1410640014 zum Thema Backup ...