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

Batch-Datei die Nach Datums-Kriterium Kopiert, zu einem RAR-Archiv hinzufügt und die nicht archivierten dateien löscht!

Frage Entwicklung Batch & Shell

Mitglied: Sloddi

Sloddi (Level 1) - Jetzt verbinden

09.03.2009, aktualisiert 12:00 Uhr, 6986 Aufrufe, 24 Kommentare

Hallo zusammen,

ich hab folgendes Problem...

Ich möchte Monatlich eine kleine Datensicherung auf eine externe USB-Platte machen. Dazu muss ich jedes mal einzeln in die verzeichnisse und die dateien suchen, verzippen und kopieren! Echt nervig! Dann habe ich mir gedacht ich könnte das ganze doch automatisieren und ich hab mich an eine batch gewagt! Naja bin ein absoluter leihe auf diesem Gebiet!
Ich habe mir jetzt schon ein Grundgerüst aufgebaut und mein kleines Programm kopiert dateien von a nach b, verzippt sie und löscht die nicht archivierten Dateien danach wieder! Jetzt fehlt mir noch die Filterung der dateien! in dem Ordner aus dem ich kopieren sind dateien des ganzen jahres vorhanden! ich möchte aber nur den letzten Monat sichern! Wie stelle ich das an? Wie mache ich so eine bedingung!?

Komme echt nicht weiter!

Hier mal mein Code bis jetzt!

@ECHO OFF
CLS

REM ------------------------------------------------------------

REM Name: copy_rar_del.bat

REM Autor: csl

REM Datum: 06.03.09

REM ------------------------------------------------------------

:: Kopieren der Dateien von a nach b

ECHO Die Datensicherung wird gestartet ..

ECHO.

pause

XCOPY C:\all\*.* C:\Dokume~1\csl\Desktop\test\*.* /V

Echo.

Echo Die Daten wurden gesichert!

:: pause

:: Die Dateien zu einem neuen Winrar-Archiv hinzufügen!

ECHO Die Daten werden zu Archiv hinzugefuegt

pause

ECHO.

cd \

cd C:\Dokume~1\csl\Desktop\test\

C:\Programme\WinRAR\WinRAR.exe a test.rar

echo.

echo Daten wurden Archiviert

:: pause

:: Aufruf der Loeschen.bat zum loeschen der nicht archivierten Dateien

call C:\Dokume~1\csl\Desktop\loeschen.bat


REM -------------------------- E O F ---------------------------


wäre über jede hilfe sehr dankebar!!

greets Sloddi
Mitglied: bastla
09.03.2009 um 12:29 Uhr
Hallo Sloddi und willkommen im Forum!

Die im Vormonat geänderten oder erstellten Dateien kannst Du etwa so kopieren:
01.
@echo off & setlocal 
02.
set "Quelle=C:\all\*.*" 
03.
set "Ziel=C:\Dokume~1\csl\Desktop\test\" 
04.
 
05.
::Jahr aus aktuellem Datum ermitteln (Voraussetzung: die Jahreszahl wird mit "echo %date%" vierstellig angezeigt) 
06.
set J=%date:~-4% 
07.
::Vormonat + 100 berechnen (damit die führende Null erhalten bleibt) 
08.
set /a VM=1%date:~-7,2%-1 
09.
::die beiden letzten Stellen ergeben die Monatszahl 
10.
set "VM=%VM:~-2%" 
11.
::Monatszahl "00" bedeutet "Vormonat war Dezember", daher: Monat auf 12 setzen und Jahr reduzieren 
12.
if "%VM%"=="00" ( 
13.
    set "VM=12" 
14.
    set /a J-=1 
15.
16.
::Alle Dateien der "Quelle" einzeln durchgehen, und bei Vorhandensein von ".Monat.Jahr" im Dateidatum kopieren 
17.
for %%i in ("%Quelle%") do echo %%~ti|findstr "\.%VM%\.%J%">nul && echo copy "%%i" "%Ziel%"
Das "echo" vor dem "copy" soll (zum Testen) die Kopierbefehle nur anzeigen; wenn Du es weglässt wird tatsächlich kopiert (dann könntest Du am Ende der Zeile noch ">nul" hinzufügen, damit nicht für jede Datei "1 Datei kopiert." angezeigt wird).

Grüße
bastla
Bitte warten ..
Mitglied: Sloddi
09.03.2009 um 14:58 Uhr
Wow Danke für die schnelle antwort! Ich hab jetzt mal den Quelltext seperat in eine batch-datei eingefügt und probiert ob sich da was tut^^ naja kommt immer ein syntax-fehler das Problem ist dabei, du hast es toll erklärt und beschrieben, aber ich blick da nicht durch! o.0

Kann es vllt sein dass ich von tt-mm-jjjj auf jjjj-mm-tt drehen muss?


::Vormonat + 100 berechnen (damit die führende Null erhalten bleibt)
set /a VM=1%date:~-7,2%-1

das hab ich auch nicht verstanden! kannst du vllt nochmal versuchen mir diese zeile näher zu erläutern!

vielen dank

gruss sloddi
Bitte warten ..
Mitglied: Sloddi
09.03.2009 um 16:13 Uhr
also ich hab hier und da noch einwenig rumgebastelt und bin jetzt so weit, dass das programm bis zur for-schleife kommt! Und sogar mit den richtigen werten

Aber hier streikt dann das programm er kopiert nichts und zeigt auch nichts an das er koipieren möchte! er hält kurz an arbeitet und dann ist ende!

hier nochmal der code:

::Alle Dateien der "Quelle" einzeln durchgehen, und bei Vorhandensein von ".Monat.Jahr" im Dateidatum kopieren
for %%i in ("%Quelle%") do echo %%~ti|findstr "\.%VM%\.%J%">nul && echo copy "%%i" "%Ziel%"

weist du vllt woran es liegt bastla?

greets Sloddi
Bitte warten ..
Mitglied: bastla
09.03.2009 um 16:31 Uhr
Hallo Sloddi!

Nimm zum Testen ersatzweise die folgende Zeile:
for %%i in ("%Quelle%") do echo %%~ti_%%i
Das Ergebnis sollte sein, dass für alle Dateien des Quell-Ordners das Dateidatum (in der Form TT.MM.JJJJ hh:mm) und der Dateiname ausgegeben werden.

Grüße
bastla
Bitte warten ..
Mitglied: Sloddi
09.03.2009 um 18:32 Uhr
ja das klappt einwandfrei!

aber was ist dann ab dem |findstring und dem rest?

gruss
Bitte warten ..
Mitglied: bastla
09.03.2009 um 18:45 Uhr
Hallo Sloddi!

Na gut - dann weiter:
for %%i in ("%Quelle%") do echo %%~ti|findstr "\.%VM%\.%J%"
müsste, richtige Inhalte von %VM% und %J% (also "02" und "2009") vorausgesetzt, eine Liste von Dateidatumswerten (ohne Dateinamen) aus dem Feber 2009 ausgeben (geprüft wird auf das Vorhandensein von ".02.2009").

Grüße
bastla
Bitte warten ..
Mitglied: Sloddi
11.03.2009 um 09:07 Uhr
Hi,

sorry für die verspätung! Hatte einen Tag Schule!

also ich hab den Code eingefügt und einwenig rum probiert, aber es passiert nichst! Hab in den test ordner aber extra dateien von Februar rein gestellt! Wenn ich es richtig verstanden habe, sollte nach ausfühung alle dateien von Februar 2009 angezeigt werden! Richtig?
Aber es kommt kein ergebnis! man sieht wieder das er arbeitet aber dach kommt nichts!
Bitte warten ..
Mitglied: Biber
11.03.2009 um 09:51 Uhr
Moin Sloddi,

eins der angenehmen Features bei Batch-Befehlen ist, dass sich durchaus einzelne (Teil-)Zeilen am CMD-Prompt testen lassen.

Also bitte taste Dich wie folgt heran:
Grenze den Fehler am CMD-Prompt ein:
Statt des Batch-Befehls for %%i in ("%Quelle%") do echo %%~ti|findstr "\.%VM%\.%J%" erstmal bröckchenweise
01.
for %i in ("C:\bla\Test\*.*") do echo %~ti 
02.
--- wenn Daten kommen...-- 
03.
for %i in ("C:\bla\Test\*.*") do @echo %~ti|findstr "\.06\.08"
Wenn in beiden Fällen mit festen Werten für %Quelle%, %VM%, %J% Daten angezeigt werden,
----> dann überprüfen ob diese drei Variablen richtig gesetzt sind.

Grüße
Biber
Bitte warten ..
Mitglied: Sloddi
11.03.2009 um 12:45 Uhr
Mahlzeit!

Also bin jetzt soweit, dass das script mir Dateien von a nach b kopiert! echt klasse!
Habe bei der Variablen %J% =Jahr noch 2 Stellen abschneiden müssen weil er 2009 ausgelesen hat in den datei atributen aber nur 09 rauskommt!
Danke für die Hilfe!

Jetzt hab ich nur noch ein Problem! Und zwar kopiert er mir die gefragten dateien die ordner im verzeichniss ebenfalla, aber ich möchte auch noch den inhalt der ordner von februar 09 mit unterverzeichnissen kopieren! Wie stelle ich das an?
laut sämtlichen tipps im i-net soll der option e alles mitkopieren! Macht er leider nicht! Habe dann mal getestet ob er es macht wenn ich den befehl von a nach b kopieren mit verzeichnissstruktur manuel eingebe in die cmd funktioniert es einwandfrei! Kann es vllt. sein, dass die bediengungen irgendwie da rein funken?


hab noch keine Lösung gefunden!

Hier mal mein aktuelles Script:


@echo off & setlocal

set "Quelle=C:\all\*.*"
set "Ziel=C:\Dokume~1\csl\Desktop\test\"

::Jahr aus aktuellem Datum ermitteln (Voraussetzung: die Jahreszahl wird mit "echo %date%" vierstellig angezeigt)
set J=%date:~-4%

::echo %date:~-4%

::Vormonat + 100 berechnen (damit die führende Null erhalten bleibt)
set /a VM=1%date:~-7,2%-1

::echo %VM%

::die beiden letzten Stellen ergeben die Monatszahl
set "VM=%VM:~-2%"

::echo %VM% vm2

::Monatszahl "00" bedeutet "Vormonat war Dezember", daher: Monat auf 12 setzen und Jahr reduzieren

if "%VM%"=="00" (
set "VM=12"
set /a J-=1 )

::Alle Dateien der "Quelle" einzeln durchgehen, und bei Vorhandensein von ".Monat.Jahr" im Dateidatum kopieren

set "J=%J:~-3%"

for %%i in ("%Quelle%") do echo %%~ti|findstr "\.%VM%\.%J%">nul && xcopy /E /Y "%%i" "%Ziel%"

pause




Mit freundlichen Grüßen Sloddi
Bitte warten ..
Mitglied: bastla
11.03.2009 um 17:07 Uhr
Hallo Sloddi!

Es sollte eigentlich genügen, eine weitere Schleife für die Unterordner des Quellordners hinzuzufügen - ungetestet sähe das dann so aus:
01.
@echo off & setlocal 
02.
 
03.
set "Quelle=C:\all\*.*" 
04.
set "Ziel=C:\Dokume~1\csl\Desktop\test\" 
05.
 
06.
::Jahr zweistellig aus aktuellem Datum ermitteln 
07.
set J=%date:~-2% 
08.
 
09.
::Vormonat + 100 berechnen (damit die führende Null erhalten bleibt) 
10.
set /a VM=1%date:~-7,2%-1 
11.
 
12.
::die beiden letzten Stellen ergeben die Monatszahl 
13.
set "VM=%VM:~-2%" 
14.
 
15.
::Monatszahl "00" bedeutet "Vormonat war Dezember", daher: Monat auf 12 setzen und Jahr reduzieren 
16.
if "%VM%"=="00" ( 
17.
    set "VM=12" 
18.
    set /a J-=1 ) 
19.
 
20.
::Alle Dateien der "Quelle" einzeln durchgehen, und bei Vorhandensein von ".Monat.Jahr" im Dateidatum kopieren 
21.
for %%i in ("%Quelle%") do echo %%~ti|findstr "\.%VM%\.%J%">nul && xcopy /Y "%%i" "%Ziel%" 
22.
::Alle Unterordner der "Quelle" einzeln durchgehen, und bei Vorhandensein von ".Monat.Jahr" im Ordnerdatum gesamte Ordnerstruktur kopieren 
23.
for /d %%i in ("%Quelle%") do echo %%~ti|findstr "\.%VM%\.%J%">nul && xcopy /E /Y "%%i" "%Ziel%"
Grüße
bastla

P.S.: Da ich es bisher sträflicher Weise verabsäumt habe, erst jetzt der Hinweis auf die Möglichkeit der Code-Formatierung ...
Bitte warten ..
Mitglied: Sloddi
13.03.2009 um 08:45 Uhr
Moin,

also Bastla der weg funkitoniert! Naja zumindest kopiert er den inhalt der einzelnen ornder im verzeichniss aber nicht die ordner selbst! Spricht die verzeichniss struktur bleibt nicht erhalten! Die ornber werden nicht mitkopiert! Was sehr schade ist weil die dateienn dann einfach überall verstreut liegen!

Weis vllt jemand wie man die struktur beibehält!?

Mit freundlichen Grüßen Sloddi
Bitte warten ..
Mitglied: bastla
13.03.2009 um 15:15 Uhr
Hallo Sloddi!

Ändere die letzte Zeile auf
for /d %%i in ("%Quelle%") do echo %%~ti|findstr "\.%VM%\.%J%">nul && xcopy /E /Y "%%i" "%Ziel%\%%~nxi\"
Grüße
bastla
Bitte warten ..
Mitglied: Sloddi
13.03.2009 um 16:30 Uhr
Hallo,

man bastla du bist echt ein genie! es funktioniert! Aber kannst du mir vllt kurz erklären was %~nxi\ ausmacht? oder bewirkt? und warum du es genommen hast!?

Ich möchte nun nach dem kopieren die kopierten dateien in einer RAR-Datei kompremieren und archivieren! Habe hierzu schon eine einbindung von WinRAR vorgenommen! Nur nun kommt wieder das selbe problem, er archiviert mir die ordner und dessen inhalte nicht nur die dateien ohne ordner werden archviert!

Quellcode bis jetzt:

01.
 
02.
@echo off & setlocal  
03.
 
04.
del C:\Dokume~1\csl\Desktop\test\test.log 
05.
 
06.
echo Die Daten vom vorherigen Monat werden Gesichert! 
07.
 
08.
pause 
09.
 
10.
set "Quelle=C:\all\*.*"  
11.
set "Ziel=C:\Dokume~1\csl\Desktop\test\"  
12.
 
13.
::Jahr aus aktuellem Datum ermitteln (Voraussetzung: die Jahreszahl wird mit "echo %date%" vierstellig angezeigt)  
14.
set J=%date:~-4%  
15.
 
16.
::echo %date:~-4% 
17.
 
18.
::Vormonat + 100 berechnen (damit die führende Null erhalten bleibt)  
19.
set /a VM=1%date:~-7,2%-1 
20.
 
21.
::echo %VM% 
22.
 
23.
::die beiden letzten Stellen ergeben die Monatszahl  
24.
set "VM=%VM:~-2%"  
25.
 
26.
::echo %VM% vm2 
27.
 
28.
::Monatszahl "00" bedeutet "Vormonat war Dezember", daher: Monat auf 12 setzen und Jahr reduzieren  
29.
  
30.
if "%VM%"=="00" (   
31.
   set "VM=12"  
32.
   set /a J-=1 ) 
33.
 
34.
::Alle Dateien der "Quelle" einzeln durchgehen, und bei Vorhandensein von ".Monat.Jahr" im Dateidatum kopieren  
35.
 
36.
set "J=%J:~-3%" 
37.
 
38.
for %%i in ("%Quelle%") do echo %%~ti|findstr "\.%VM%\.%J%">nul && xcopy /Y "%%i" "%Ziel%" >> C:\Dokume~1\csl\Desktop\test\test.log 
39.
 
40.
::Alle Unterordner der "Quelle" einzeln durchgehen, und bei Vorhandensein von ".Monat.Jahr" im Ordnerdatum gesamte Ordnerstruktur kopieren  
41.
 
42.
for /d %%i in ("%Quelle%") do echo %%~ti|findstr "\.%VM%\.%J%">nul && xcopy /E /Y "%%i" "%Ziel%\%%~nxi\" >> C:\Dokume~1\csl\Desktop\test\test.log 
43.
 
44.
echo Die Daten wurden kopiert! 
45.
 
46.
ECHO Die Daten werden zu Archiv hinzugefuegt 
47.
 
48.
pause 
49.
 
50.
ECHO. 
51.
 
52.
cd \ 
53.
 
54.
::cd C:\Dokume~1\csl\Desktop\test\ 
55.
 
56.
cd %Ziel% 
57.
 
58.
C:\Programme\WinRAR\WinRAR.exe a test.rar 
59.
 
60.
echo. 
61.
 
62.
echo Daten wurden Archiviert 
63.
 

ps: ist das so richtig mit dem Format?!

Mit freundlichen Grüßen Sloddi
Bitte warten ..
Mitglied: Sloddi
13.03.2009 um 16:58 Uhr
Ahhhhhhhhhh! Ich idiot! hab mal wieder zu voreilig gepostet!

Ich habs rausgefunden! man muss einfach nur mit dem parameter -r welcher rekursiv bedeutet das verzeichnis durchsuchen! Sprich:

01.
C:\Programme\WinRAR\WinRAR.exe a -r  test.rar 
dann Funktioniert es!

Jetzt gibt es nur noch ein einziges problem zu lösen!

ich habe nun alle dateien die ich kopiert habe + logfile + RAR-datei in einem Ordner, nun möchte ich alles aus diesem ordner löschen bis auf die rar-datei oder spätermal RAR-Dateien!

Wie kann ich also bedingt löschen?! Wie man löscht wenns nur gleiche dateien sind und die rar-datei weis ich aber was ist wenn es dann verschiedene sind und ordner dazu?!

hier noch mein löschvorgang bis jetzt:

01.
@echo off  
02.
 
03.
cls 
04.
 
05.
echo Die nicht Archvierten Dateien werden nun geloescht! 
06.
 
07.
pause 
08.
 
09.
del /S /Q C:\Dokume~1\csl\Desktop\test\*.tif 
10.
for /d %%i in (C:\Dokume~1\csl\Desktop\test\*.*) do rd /s /q "%%i" 
11.
 
12.
Echo Die Daten wurden geloescht! 
13.
 
14.
pause
löscht alle Ordner und tif-dateien!


über lösung vorschläge wäre ich wie immer sehr Happy!


Mit freundlichen Grüßen Sloddi
Bitte warten ..
Mitglied: bastla
13.03.2009 um 20:14 Uhr
Hallo Sloddi!

Zum Löschen aller Dateien außer jener eines bestimmten Typs (.rar, im Beispiel als Variable festgelegt) gäbe es mehrere Möglichkeiten - der Einfachheit halber wird jeweils vorausgesetzt, dass es um die Dateien des aktuellen Ordners geht, was sich vorweg so erreichen lässt:
01.
@echo off & setlocal 
02.
::in den Ordner wechseln 
03.
cd /d "C:\Dokume~1\csl\Desktop\test" 
04.
::Typ der nicht zu löschenden Dateien festlegen 
05.
set "Excl=.rar"
Funktionieren sollten alle folgenden Varianten:
  • in einer Schleife alle Dateien auf den Typ hin untersuchen und .rar-Dateien nicht löschen:
01.
for /f "delims=" %%i in ('dir *.* /b /a-d') do if /i "%%~xi" neq "%Excl%" del "%%i"
  • per "findstr" die nicht zu löschenden Dateien ausfiltern:
01.
for /f "delims=" %%i in ('dir *.* /b /a-d^|findstr /i /e /v "%Excl%"') do del "%%i"
  • die nicht zu löschenden Dateien verstecken, die "sichtbaren" löschen und die versteckten Dateien wieder sichtbar machen:
01.
attrib +h *%Excl% 
02.
del /q *.* 
03.
attrib -h *%Excl%
Noch als Nachtrag zu oben:
Aber kannst du mir vllt kurz erklären was %~nxi\ ausmacht? oder bewirkt? und warum du es genommen hast!?
Eigentlich sind es ja zwei Teile "%%~nxi" und "\" ...

Das %%i in der Schleife entspricht jeweils einem Unterordner mit vollständiger Pfadangabe.

Für einen solchen Pfad gibt es eine Zerlegungsmöglichkeit in seine Einzelteile
Laufwerk (%%~di für drive),
Pfad (%%~pi),
(Datei-)Name (%%~ni) und
Typ (%%~xi für extension)
- siehe dazu "for /?" gegen Ende.

Diese Teile lassen sich auch kombiniert angeben, wodurch also "%%~nxi" Name und Typ liefert (Typ ist dabei, damit Ordnernamen, die einen oder mehrere Punkte enthalten, vollständig erfasst werden, da ansonsten der Teil nach dem letzten Punkt verloren ginge).

Damit wird also "xcopy" beauftragt, im Zielordner den Unterordner anzulegen. Da dieser vermutlich noch nicht existiert, muss "xcopy" auch mitgeteilt werden, dass es sich beim Ziel um einen Ordner und keine Datei handelt - ansonsten käme die Frage:
Ist das Ziel DeinOrdnername ein Dateiname 
oder ein Verzeichnisname 
(D = Datei, V = Verzeichnis)?
Mit dem "\" am Ende des Kopierzieles wird festgelegt, dass das Ziel ein Ordner ist.

Grüße
bastla
Bitte warten ..
Mitglied: Sloddi
16.03.2009 um 10:56 Uhr
Hallo,

als erstmal vielen Dank Bastla für die tolle Erläuterung langsam machts klick bei mir!^^

Ich das mit dem Löschen jetzt erstmal anders gelöst! Nachdem ich nämlich die Konsolen-Hilfe von WinRAR durchforstet habe, hab ich rausgefunden, das es einen Befehl (m) gibt der Verschiebt stats nur zu kopieren, d.h. Löschen brauch ich nichts mehr!

Eigentlich wäre damit mein Thema soweit durch! Aber bevor ich dieses Thema als gelöst makiere würde ich noch gerne warten, da ich jetzt erst die datei auf die große Leinwand bringe
Sprich zur richtigen datensicherung gehe! und ich hab auch schon ein problem! Und zwar sind in dem ordner den ich sichern will ca 50.000 Dateien! Kann es sein, dass da die Batch-Datei überfordert ist wenn sie da nur vom Vormonat dateien rauskopieren soll?

Die verarbeitung läuft nämlich nicht einmal an!?

Wenn ich nur etwas kopieren will, ohne Vormonatbedingung aus einem Ordner mit ca 20.000 Dateien, Funktioniert das ohne Probleme!

Hier mal mein Sozusagen Final-Code:

01.
@echo off & setlocal  
02.
 
03.
del C:\Dokume~1\csl\Desktop\test\test.log 
04.
 
05.
echo Die Daten vom vorherigen Monat werden Gesichert! 
06.
 
07.
::pause 
08.
 
09.
set "Quelle=C:\all\*.*"  
10.
set "Ziel=C:\Dokume~1\csl\Desktop\test\"  
11.
 
12.
::Jahr aus aktuellem Datum ermitteln (Voraussetzung: die Jahreszahl wird mit "echo %date%" vierstellig angezeigt)  
13.
set J=%date:~-4%  
14.
 
15.
::Vormonat + 100 berechnen (damit die führende Null erhalten bleibt)  
16.
set /a VM=1%date:~-7,2%-1 
17.
 
18.
::die beiden letzten Stellen ergeben die Monatszahl  
19.
set "VM=%VM:~-2%"  
20.
 
21.
::Monatszahl "00" bedeutet "Vormonat war Dezember", daher: Monat auf 12 setzen und Jahr reduzieren  
22.
  
23.
if "%VM%"=="00" (   
24.
   set "VM=12"  
25.
   set /a J-=1 ) 
26.
 
27.
::Alle Dateien der "Quelle" einzeln durchgehen, und bei Vorhandensein von ".Monat.Jahr" im Dateidatum kopieren  
28.
 
29.
set "J=%J:~-3%" 
30.
 
31.
for %%i in ("%Quelle%") do echo %%~ti|findstr "\.%VM%\.%J%">nul && xcopy /Y "%%i" "%Ziel%" >> C:\Dokume~1\csl\Desktop\test\test.log 
32.
 
33.
::Alle Unterordner der "Quelle" einzeln durchgehen, und bei Vorhandensein von ".Monat.Jahr" im Ordnerdatum gesamte Ordnerstruktur kopieren  
34.
 
35.
for /d %%i in ("%Quelle%") do echo %%~ti|findstr "\.%VM%\.%J%">nul && xcopy /E /Y "%%i" "%Ziel%\%%~nxi\" >> C:\Dokume~1\csl\Desktop\test\test.log 
36.
 
37.
echo Die Daten wurden kopiert! 
38.
 
39.
ECHO Die Daten werden zu Archiv hinzugefuegt 
40.
 
41.
::pause 
42.
 
43.
ECHO. 
44.
 
45.
cd \ 
46.
 
47.
cd %Ziel% 
48.
 
49.
C:\Programme\WinRAR\WinRAR.exe m -r test.rar 
50.
 
51.
echo. 
52.
 
53.
echo Daten wurden Archiviert 
54.
 

Über Anregungen wäre ich dankbar!

grüße Sloddi
Bitte warten ..
Mitglied: bastla
16.03.2009 um 11:53 Uhr
Hallo Sloddi!

Die Zeile 29
set "J=%J:~-3%"
ergibt für mich keinen Sinn - wenn Du das Jahr zweistellig benötigst, dann anstelle von "3" eben "2" verwenden ...

Grüße
bastla
Bitte warten ..
Mitglied: Sloddi
16.03.2009 um 12:58 Uhr
Hi,

so hab ich mir das auch am anfang gedacht, doch wenn ich nur die 2 angebe kommt nur 9 raus statt 09!

Deshalb habe ich es danach mit der 3 probiert und es hat funktioniert!

zum testen hab ichs danach einfach mit echo augeben lassen und es hat gestimmt! deswegen habe ich es auch so gelassen!

Habe es gerade nocheinmal getestet und es funktioniert noch! mit der 3!

grüsse sloddi
Bitte warten ..
Mitglied: bastla
16.03.2009 um 13:01 Uhr
Hallo Sloddi!

Ja, hab's jetzt auch gesehen: Schuld ist die Zeile 13 - dort steht am Ende noch ein Leerzeichen - lässt sich leicht so vermeiden:
set "J=%date:~-4%"
Grüße
bastla
Bitte warten ..
Mitglied: Sloddi
16.03.2009 um 15:36 Uhr
Klasse Bastla,

du hast wie immer recht^^

hab den fehler behoben! hätte nicht gedacht, dass er das Leerzeichen hinter der variabeln noch mit rein nimmt!

hast du vllt. eine Ahnung warum die Batch nicht loslegt? Ist sie vllt überfordert mit andie 50.000 Dateien? Zuviel zu durchsuchen vllt.? Die batch muss ca. 3.000 Dateien und ordner aus 50.000 filtern! ist das zuviel?

wenn ch das mit der hand machen muss ist es echt ne quälerei! -.-

gruss Sloddi
Bitte warten ..
Mitglied: Biber
16.03.2009 um 16:33 Uhr
Moin Sloddi,


[Eröffnungspost:] Ich möchte Monatlich eine kleine Datensicherung auf eine externe USB-Platte machen.
.....
[eine Woche später] ....vllt überfordert mit andie 50.000 Dateien? Zuviel zu durchsuchen vllt.? Die batch muss ca. 3.000 Dateien und ordner aus 50.000 filtern!...

Ich will da ja nicht reinreden, aber...
Der Zeitpunkt des Umsteigens auf ein professionelles Backuptool (= eines, das Features wie Datenkompression, logging, inkrementelle Sicherungen durchdeklinieren und nicht nur simulieren kann) hängt sicherlich vor allem von 3 Störgrößen maßgeblich ab:

  • dem Datenvolumen resp der Zeit eines Sicherungslauf und der Zeitdauer der eingeschränkten Verfügbarkeit/Produktivsystemausfalls durch den Sicherungslauf
  • der Wichtigkeit ("Unersetzbarkeit") der Daten
  • dem ohne Gewaltanwendung freikeilbaren Budget des Auftraggebers

Soll heißen:
  • wenn der Kunde kein Geld für vernünftiges Werkzeug ausgeben will und die Daten ersetzbar sind und ein eingeschränkter Zugriff während eines Sicherungslaufs kein Thema ist--> dann bleib bei einem Batchkonstrukt
  • wenn es aber soooo lange dauert, dass ihr evtl erst nach Stunden erfahrt, ob es denn überhaupt funktioniert hat oder ob die Batch nie wiederkehren wird ---> nehmt Geld in die Hand und steigt um auf Profi- statt Baumarkt-Tools

In Deinem Beispiel-Fall würde ich behaupten, hier sollte der Kunde auf die Notwendigkeit einer Profi-Lösung hingewiesen (oder zumindest vorbereitet) werden.

Grüße
Biber
Bitte warten ..
Mitglied: Sloddi
17.03.2009 um 10:51 Uhr
Moin,

also hier nocheinmal mein Standpunkt!
Ich bin in einer Firma in der EDV-Abteilung und mache dort jeden Monat eine Datensicherung! Nix großes etwa 30 GB insgesamt! Und diese Sicherung habe ich bis jetzt immer mit der Hand gemacht! Sprich alles immer selst rauskopiert und wenn nötig verzippt! und auf diese Arbeit habe ich keine Lust mehr, da eine Batch diese Sache auch automatisieren könnte!
Eine Verarbeitung nach der anderen sollte die Batch eigtl. können. oder täusche ich mich da?

Zu der Geldfrage: Nein ich möchte kein Geld in die Hand nehmen! Den es geht ja auch, zur Not, mit der Hand! nur dazu habe ich keine Lust mehr!

Und da die Batch weitestgehends ziemlich fertig ist möchte ich sie nun auch einsetzten!

Nur ist halt noch ein Problem offen, die Verarbeiten rollt nicht an! Normales kopieren mit ca. 20.000 Dateien und Ordner mit anschlißernder Archivierung mit WinRAR funktioniert einwandfrei!
Nur wenn ich mit der Bedingung mit dem Vormonat eine Batch starte rollt sie nicht an!

Hat jemand vllt eine Idee warum? Oder wie man das Problem löst?

Mit freundlichen Grüßen Sloddi
Bitte warten ..
Mitglied: Sloddi
23.03.2009 um 08:21 Uhr
Morgen,

kann mir hier echt keiner mehr weiterhelfen?

Jemad ne ahnung warum die batch nicht wieterläuft und einfach abbricht nach ca 2min warten?!
und vorallem wie man das hier lösen kann!

Mit freundlichen Grüßen Sloddi
Bitte warten ..
Mitglied: bastla
23.03.2009 um 15:45 Uhr
Hallo Sloddi!

Eigentlich sieht das eher danach aus, als würde der Batch durchlaufen und nur eben keine Dateien zum Kopieren finden ...

Versuch es so: Lass durch die neue Zeile 30 mit
echo #%VM%#%J%# & goto :eof
Vormonat und Jahr ausgeben und danach den Batch beenden (die Zeile brauchst Du danach nicht mehr).

Falls die Ausgabe so aussieht (ohne irgendwelche Leerzeichen zwischendrin):
#02#2009#
versuch als Nächstes direkt an der Kommandozeile den Befehl:
for %%i in ("C:\all\*.*") do echo %%~ti#%%i|findstr "\.02\.2009"
Damit sollte für alle passenden Dateien des Ordners Dateidatum und Dateiname ausgegeben werden.

Soferne das funktioniert, kannst Du obige Zeile ersatzweise als Zeile 31 und ein "goto :eof" als Zeile 32 (vorübergehend) einbauen - es sollte dann die selbe Ausgabe erzielt werden.

Danach sehen wir weiter ...

Grüße
bastla
Bitte warten ..
Neuester Wissensbeitrag
Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (27)

Frage von patz223 zum Thema Windows Userverwaltung ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (20)

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

Windows Netzwerk
Windows 10 RDP geht nicht (18)

Frage von Fiasko zum Thema Windows Netzwerk ...