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, 9476 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 ..
Ähnliche Inhalte
Windows 10
PC zeigt bei Dateien und Bilder falsches Datum an (4)

Frage von vServer zum Thema Windows 10 ...

Batch & Shell
Nach Muster von Dateien, diese hochzählen (3)

Frage von Erik72 zum Thema Batch & Shell ...

Batch & Shell
gelöst Auslesen und Vergleichen Zweiter CSV Dateien Powershell (7)

Frage von Hainoon zum Thema Batch & Shell ...

Neue Wissensbeiträge
Sicherheits-Tools

Sicherheitstest von Passwörtern für ganze DB-Tabellen

Tipp von gdconsult zum Thema Sicherheits-Tools ...

Peripheriegeräte

Was beachten bei der Wahl einer USV Anlage im Serverschrank

(6)

Tipp von zetboxit zum Thema Peripheriegeräte ...

Windows 10

Das Windows 10 Creators Update ist auf dem Weg

(5)

Anleitung von BassFishFox zum Thema Windows 10 ...

Administrator.de Feedback

Tipp: Ungelöste Fragen ohne Antwort in Tickeransicht farblich hinterlegen

Tipp von pattern zum Thema Administrator.de Feedback ...

Heiß diskutierte Inhalte
Windows Server
gelöst Update BackupExec 2015 auf 2016 führt zu SQL-Server Problem (16)

Frage von montylein1981 zum Thema Windows Server ...

Batch & Shell
gelöst Batch um Benutzer aus Sitzung abzumelden (15)

Frage von zeroblue2005 zum Thema Batch & Shell ...

LAN, WAN, Wireless
IP Sec Client legt Netzwerkkarte lahm (12)

Frage von mario87 zum Thema LAN, WAN, Wireless ...