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

Per Batch automatisch Dateien vom Vormonat mit rar komprimieren

Frage Entwicklung Batch & Shell

Mitglied: chappy

chappy (Level 1) - Jetzt verbinden

19.05.2010, aktualisiert 18.10.2012, 13994 Aufrufe, 72 Kommentare

Hallo,

ich habe gestern vergebens versucht, eine *.bat zu Erstellen, mit der ich aus einem Ordner Dateien vom Vormonat ermitteln konnte, diese mit rar komprimieren konnte und anschliessend verschieben, wobei die komprimierten dateien gelöscht werden. Das ganze soll jeden Monat gemacht werden, z.B. am 07. des fFolgemonats.

Bei meiner verzweifelten Suche bin ich auf dieses forum gestossen, aber leider nichts passendes gefunden. Ich schreibe eigentlich zum ersten mal eine bat. Ich bin soweit gekommen, dass ich einen Ordner komprimieren konnte und auch sagen wo dieser abgelegt werden soll. Aber ich denke mal, wenn ich eine Datei von Rechner 1 auf Rechner 2 ablegen möchte, dann ist es empfehlenswert, die rar-Datei erst auf Rechner1 zu erstellen und erst nach Fertigstellung auf Rechner 2 verschieben, oder?

Achja, ist es möglich, dass die erstellte Rar den Namen: Jahr-Monat.rar bekommt? Dann wäre das super.

Wäre euch dankbar für eure Hilfe

Gruss
chappy
72 Antworten
Mitglied: bastla
19.05.2010, aktualisiert 18.10.2012
Hallo chappy und willkommen im Forum!

Vielleicht hilft Dir dieser Beitrag ...

Grüße
bastla
Bitte warten ..
Mitglied: chappy
19.05.2010 um 11:00 Uhr
Hallo bastla,

ich habe mir diesen Beitrag angeschaut und auch ausprobiert, aber leider komme ich nicht zum gewünschten Ziel. In meinem Ordner befinden sich Dateien aus verschiedenen Monaten. DIese sollen nun jeweils pro Monat in eine rar zusammen gepackt werden, z.B. 2009-10.rar für Oktober.2009 und dann auf einen anderen Rechner verschoben werden. Und die fertige rar muss dann auf einen zweiten rechner geschoben werden. nicht zu vergessen, das die nun in rar befindlichen Dateien auch dann gelöscht werden müssen, wenn diese gepackt wurden. Mit dem Teil klappt das nicht

@echo off & setlocal
set "Quelle=D:\Komprimier-Test\*.*"
set "Ziel=D:\Komprimier-Test\"

::Jahr zweistellig aus aktuellem Datum ermitteln
set J=%date:~-2%

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

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

::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
for %%i in ("%Quelle%") do echo %%~ti|findstr "\.%VM%\.%J%">nul && xcopy /Y "%%i" "%Ziel%" >> D:\Komprimier-Test\test.log

::Alle Unterordner der "Quelle" einzeln durchgehen, und bei Vorhandensein von ".Monat.Jahr" im Ordnerdatum gesamte Ordnerstruktur kopieren
for /d %%i in ("%Quelle%") do echo %%~ti|findstr "\.%VM%\.%J%">nul && xcopy /E /Y "%%i" "%Ziel%\%%~nxi\"

echo Die Daten wurden kopiert!

Echo.

cd \
cd %Ziel%
C:\Programme\WinRAR\WinRAR.exe a test.rar

echo.

echo daten wurden Archiviert

hier wird alles in test.rar geschrieben, was ja nicht sein sollte.

Ich hoffe du kannst mir da weiterhelfen.

Danke schon mal für deine Antwort
Bitte warten ..
Mitglied: chappy
19.05.2010, aktualisiert 18.10.2012
kann denn niemand helfen?

Ich habe es mir folgendermaßen überlegt::

Schritt1: Komprimiere alle Daten aus dem Vormonat mm zur jjjj-mm.rar
Schritt2: Prüfung: komprimierung erfolgreich?
- - - - -> JA: gehe zu Schritt3 weiter
- - - - -> NEIN: gehe zu Schritt2 zurück
Schritt3: Kopiere erstellte jjjj-mm.rar von Rechner1 zu Rechner2
Schritt4: Prüfung: Kopiervorgang erfolgreich?
- - - - -> JA: gehe zu Schritt5 weiter
- - - - -> NEIN: gehe zu Schritt3 zurück
Schritt5: Lösche auf Rechner1 alle Daten aus dem Vormonat mm und die erstellte jjjj-mm.rar

geht das? Wäre auch schön, wenn man das automatisch jeden Monat ausführen lassen könnte, aber ich glaube das geht nicht mit batch, richtig?

Ähnliches hierzu habe ich unter folgenden Link gefunden:
http://www.administrator.de/forum/batch-datei-winrar-30961.html

Ich hoffe, dass mir hier jemand weiterhelfen kann

Gruss eure
chappy
Bitte warten ..
Mitglied: bastla
19.05.2010 um 16:02 Uhr
Hallo chappy!

Etwas zum Testen für Zwischendurch:
01.
@echo off & setlocal 
02.
set "Quelle=U:\Daten_Lahoucine\Datenpool\Komprimier_Test\Test_Daten\*.*" 
03.
set "Ziel=U:\Daten_Lahoucine\Datenpool\Komprimier_Test\Monate" 
04.
set "Log=U:\Daten_Lahoucine\Datenpool\Komprimier_Test\test.log" 
05.
 
06.
del "%Log%" 2>nul 
07.
for %%i in ("%Quelle%") do for /f "tokens=1-3 delims=. " %%a in ("%%~ti") do xcopy "%%i" "%Ziel%\%%c-%%b\">>"%Log%" 
08.
echo Die Daten wurden kopiert! 
09.
 
10.
echo. 
11.
pushd "%Ziel%" 
12.
for /d %%i in (*.*) do C:\Programme\WinRAR\WinRAR.exe a "%%i.rar" "%%i\*.*" 
13.
popd  
14.
echo. 
15.
echo daten wurden archiviert
"WinRar" kennt übrigens auch ein "m"-Kommando - wie verlässlich das funktioniert, kann ich allerdings nicht abschätzen ...

Grüße
bastla

[Edit] Fehlenden "\" nach "%%b" sowie Leerzeichen als zusätzlichen Delimiter ergänzt [/Edit]
Bitte warten ..
Mitglied: chappy
19.05.2010 um 17:19 Uhr
Hallo bastla,

erst einmal Herzlichen Dank für deine Unterstützung.

Ich habe das ganze ausprobiert, doch leider passiert da nichts. in der log-Datei wurde lediglich reingeschrieben, dass 0 Dateien kopiert wurden. Wärend das dos-Fenster aufblinkt, konnte ich kurz lesen, dass das Verzeichnis nicht gefunden werden konnte. Ist es möglich, im nachhinein zu sehen, was in dem Dos-Fenster stand? Es geht einfach viel zu schnell zu und ich kann nicht erkennen, was da stand.

Es wird nur ein Ordner Monat erstellt, aber sonst keine rar erstellt. Ich habe erwartet, dass mit dem batch die Dateien je nach ihren Erstellungs-Monaten zu einer JJJJ-MM.rar komprimiert werden.

schade hat nicht geklappt hast du eine Idee, warum?

Danke dir und lieben Gruss eure
chappy
Bitte warten ..
Mitglied: bastla
19.05.2010 um 17:30 Uhr
Hallo chappy!

Zum Testen von Batches grundsätzlich per "Start / Ausführen... / cmd" ein CMD-Fenster öffnen und von dort den Batch starten (die Batchdatei kannst Du dazu auch aus dem Explorer in das CMD-Fenster ziehen) - so siehst Du schon einmal Fehlermeldungen ...

Wenn das noch nicht genügt, dann aus dem "echo off" ein "echo on" machen - so wird jeder Befehl vor der Ausführung angezeigt, und Du kannst genauer nachvollziehen, wo es klemmt. Wenn Du noch im CMD-Fenster links in der Titelleiste per Rechtsklick das Systemmenü öffnest und dort "Eigenschaften / Layout" wählst, kannst Du die "Fensterpuffergröße" bis auf 9999 Zeilen hochschrauben, um entsprechend weit nach oben scrollen zu können. Schließlich noch der Hinweis auf den Befehl "cls", mit dem Du den Inhalt des Fenster (vor dem nächsten Testlauf) löschen kannst ...

Grüße
bastla

P.S.:
Es wird nur ein Ordner Monat erstellt, aber sonst keine rar erstellt. Ich habe erwartet, dass mit dem batch die Dateien je nach ihren Erstellungs-Monaten zu einer JJJJ-MM.rar komprimiert werden.
Bei 0 kopierten Dateien sollte das Ergebnis nicht sooo überraschend sein ...
Bitte warten ..
Mitglied: chappy
19.05.2010 um 19:07 Uhr
Hallo Bastla,

erst eimal danke für deine Tipps, die haben mir schon mal weitergeholfen. Also ich habe es noch einmal getestet und in cmd steht folgendes:
C:\Dokumente und Einstellungen\Administrator>for /F "tokens=1-3 delims=." %a in ("02.05.2010 17:42") do xcopy /Y "D:\Komprimier-Test\308.txt" "D:\Komprimier-Test\Monate\%c-%b\" 1>>"D:\Komprimier-Test\test.log"

C:\Dokumente und Einstellungen\Administrator>xcopy /Y "D:\Komprimier-Test\308.txt" "D:\Komprimier-Test\Monate\2010 17:42-05\" 1>>"D:\Komprimier-Test\test.log"
Fehler beim Erstellen der Datei - Der Verzeichnisname ist ungültig.

Verzeichnis kann nicht erstellt werden - D:\Komprimier-Test\Monate\2010 17:42-05

C:\Dokumente und Einstellungen\Administrator>for /F "tokens=1-3 delims=." %a in ("23.04.2010 19:13") do xcopy /Y "D:\Komprimier-Test\auto fiesta.txt" "D:\Komprimier-Test\Monate\%c-%b\" 1>>"D:\Komprimier-Test\test.log"

C:\Dokumente und Einstellungen\Administrator>xcopy /Y "D:\Komprimier-Test\auto fiesta.txt" "D:\Komprimier-Test\Monate\2010 19:13-04\" 1>>"D:\Komprimier-Test\test.log"
Fehler beim Erstellen der Datei - Der Verzeichnisname ist ungültig.

Verzeichnis kann nicht erstellt werden - D:\Komprimier-Test\Monate\2010 19:13-04

vielleicht habe ich das miss verstanden, aber ich habe das Gefühl, das hier erst ein Ordner 2010 erstellt wird oder?

Der Code:
@echo on & setlocal
set "Quelle=D:\Komprimier-Test\*.*"
set "Ziel=D:\Komprimier-Test\Monate"
set "Log=D:\Komprimier-Test\test.log"
del "%Log%" 2>nul
for %%i in ("%Quelle%") do for /f "tokens=1-3 delims=." %%a in ("%%~ti") do xcopy /Y "%%i" "%Ziel%\%%c-%%b\">>"%Log%"
echo Die Daten wurden kopiert!
echo.
pushd "%Ziel%"
for /d %%i in (*.*) do C:\Programme\WinRAR\WinRAR.exe a "%%i.rar" "%%i\*.*"
popd
echo.
echo daten wurden archiviert

entnehme ich, das du einen Ordner Monat erstellst, dann noch einen Ordner mit Jahr!?!? Da sollte genau die 2010-04.rar hin, dass hatte ich gedacht oder wie soll ich den code verstehen? Habe bislang noch nie ein script geschrieben und kann es daher auch schwer lesen.

Dank dir
Bitte warten ..
Mitglied: chappy
19.05.2010 um 19:15 Uhr
nochmals ich, habe da noch ein paar Fragen:

1. ist es möglich, zu prüfen, ob das packen erfolgreich abgeschlossen wurde?
1a. wenn ja, ist es auch möglich, bei nicht erfolgreich abgeschlossenen pscken in rar, dass packen zu wiederholen?

2. kann auch geprüft werden, ob eine Datei erfolgreich auf einen anderen Rechner übertragen wurde?
2a. wenn ja, kann bei fehlschlag die rar-Datei nochmals kopiert/übertragen werden?

3. ist es eigentlich begrenzt, wie gross die Rar-Datei sein darf? Oder kann man da so viel reinpacken, wie man nur möchte?

Ich bedanke mich vorab für deine Mühe und Geduld. Leider brauch ich diese Antworten für morgen. Wäre prima, wenn ich bis morgen 15Uhr auch was lauffähiges hätte.

Gruss die verzweifelte
chappy
Bitte warten ..
Mitglied: chappy
19.05.2010 um 19:17 Uhr
und warum hat er nichts kopiert? wenn du schon so lachst, dann war das von dir wohl gewollt, oder?
Bitte warten ..
Mitglied: bastla
19.05.2010 um 19:24 Uhr
Hallo chappy!

Leider fehlt noch ein Leerzeichen bei der Angabe des Trennzeichens - daher sollte die Zeile 7 so aussehen (das eigentlich überflüssige "/Y" habe ich auch gleich entfernt und beides auch oben nachgebessert):
for %%i in ("%Quelle%") do for /f "tokens=1-3 delims=. " %%a in ("%%~ti") do xcopy "%%i" "%Ziel%\%%c-%%b\">>"%Log%"
Den Ordner "Monate" habe ich nur verwendet, damit die Dateien nicht unterhalb des Quellpfades abgelegt und so vielleicht mehrmals verarbeit werden (daher wäre auch "D:\Monate" besser) - Du kannst aber jeden beliebigen Namen dafür nehmen ...

Interhalb dieses Ordners sollten dann die einzelnen "Monatsordner" (wie eben "2010-04") entstehen, deren Inhalte letztlich zu einem ".rar"-File zusammengefasst werden.

Noch ein Nachtrag: Das erstellte Log wird mit der folgenden Version der oben angeführten Zeile etwas aussagekräftiger:
for %%i in ("%Quelle%") do for /f "tokens=1-3 delims=. " %%a in ("%%~ti") do xcopy /f "%%i" "%Ziel%\%%c-%%b\"|findstr /v /c:"Datei(en) kopiert">>"%Log%"
Zum Prüfen der gepackten Datei: Sicher könntest Du nur sein, wenn Du für die zu packenden Dateien Prüfsummen (zB als MD5 - eines von vielen dafür verwendbaren (Kommandozeilen-)Programmen findest Du mit fciv auch bei MS, ansonsten etwa md5deep) erstellst, die ".rar"-Datei an einem anderen Ort wieder entpackst und die Prüfsummen der entpackten Dateien mit jenen der Originaldateien vergleichst - ansonsten musst Du Dich darauf verlassen, abzufragen, ob "rar.exe" mit einem Errorlevel <> 0 (=Fehler) beendet wurde - eine solche Abfrage könnte etwa so realisiert werden:
C:\Programme\WinRAR\WinRAR.exe a "%%i.rar" "%%i\*.*" && echo Bei "%%i" alles OK! || (echo Fehler beim Packen von "%%i" aufgetreten! & goto :Fehlerbehandlung)
Hinsichtlich des Übertragens der ".rar"-Datei gilt die selbe Überlegung wie für deren Inhalt: Der Vergleich von Checksummen für Original und Kopie kann Dir Sicherheit geben, alternativ dazu (für einzelne Dateien) auch ein "fc /b" ...

Grüße
bastla
Bitte warten ..
Mitglied: bastla
19.05.2010 um 19:33 Uhr
Hallo chappy!
wenn du schon so lachst, ...
Ich werde Dir jetzt nicht die Bedeutung von Smilies erklären (aber gerne darauf hinweisen, dass ich nicht gelacht habe) ...
... dann war das von dir wohl gewollt, oder?
Was Dich zu dieser Mutmaßung veranlasst, kann ich mir zwar nicht vorstellen, aber wenn Du oben einen Pfad "U:\Daten_Lahoucine\Datenpool\Komprimier_Test\Test_Daten\*.*" für die Quelldaten angibst und kurz darauf mit "D:\Komprimier-Test\*.*" testest, könnte ich mir schon vorstellen, warum keine Daten gefunden wurden.

Meine Anmerkung hatte sich jedenfalls schlicht und einfach auf "Ich habe erwartet, dass mit dem batch die Dateien je nach ihren Erstellungs-Monaten zu einer JJJJ-MM.rar komprimiert werden." bezogen - eine Erwartung, die für genau 0 Dateien (von Dir unmittelbar vorher genannt) tatsächlich nicht leicht erfüllt werden konnte ...

Grüße
bastla
Bitte warten ..
Mitglied: chappy
19.05.2010 um 20:16 Uhr
Da mit dem Pfad, habe ich schon extra gemacht. Ich habe nun einen anderen Pfad, da ich nun von meinem Laptop aus probiere. In dem Pfad: liegen auch mehrere Dateien mit verschiedenen Monaten und habe darauf gehoft, dass ich diese in die entsprechende Rar bekomme. Aber leider wurde hier nur der Ordner angelegt und das wars. nichts weiteres ist passiert. versuche jetzt mal deine Korrektur aus.

Für die Prüfung: soll ich da diese Zeilen:

C:\Programme\WinRAR\WinRAR.exe a "%%i.rar" "%%i\*.*" && echo Bei "%%i" alles OK! || (echo Fehler beim Packen von "%%i" aufgetreten! & goto :Fehlerbehandlung)

zur batch unten dranhängen?

Dank dir und Grüsse

chappy,

PS. habe vor lauter Verzweifelung deinen Smily falsch gedeutet. Lag an meinen Augen. Sorry :-P
Bitte warten ..
Mitglied: bastla
19.05.2010 um 20:20 Uhr
Hallo chappy!
Für die Prüfung: soll ich da diese Zeilen:

C:\Programme\WinRAR\WinRAR.exe a "%%i.rar" "%%i\*.*" && echo Bei "%%i" alles OK! || (echo Fehler beim Packen von "%%i" aufgetreten! & goto :Fehlerbehandlung)

zur batch unten dranhängen?
Nein - wenn Du das so machen wolltest (war eher als Demo gedacht), wäre die Zeile 12 auf
for /d %%i in (*.*) do C:\Programme\WinRAR\WinRAR.exe a "%%i.rar" "%%i\*.*" && echo Bei "%%i" alles OK! || (echo Fehler beim Packen von "%%i" aufgetreten! & goto :Fehlerbehandlung)
abzuändern - zusätzlich müsste noch ein Programmteil ":Fehlerbehandlung" geschrieben werden ...

Noch besser (weil dadurch im Archiv kein Unterordner erzeugt wird) wäre übrigens die Schreibweise
for /d %%i in (*.*) do C:\Programme\WinRAR\WinRAR.exe a -ep "%%i.rar" "%%i\*.*" && echo Bei "%%i" alles OK! || (echo Fehler beim Packen von "%%i" aufgetreten! & goto :Fehlerbehandlung)
Grüße
bastla
Bitte warten ..
Mitglied: chappy
19.05.2010 um 20:27 Uhr
wow es funktioniert. Ich bin baffffff!!! Herzlichen Dank!!

aber es gibt noch ein kleines Problem. Ich möchte nicht, dass die Daten vom aktuellen Monat gepackt werden, denn das soll erst im nächsten Monat passieren. Sonst überschreibe ich ja die rar beim nachfolgenden kopieren. Du verstehst?

Ausserdem, möchte ich die gepackten rar-Dateien in Ordner D:\Komprimier-Test\Archiv\Archiv kopieren und die kopierten Dateien, sowohl Ordner Monat, als auch die die schon behandelten Dateien im Ordner D:\Komprimier-Test\*.* löschen. Ich denke es macht Sinn, direkt, nach dem die Dateien in den Monat\Unterordner kopiert wurden zu löschen, oder was meinst du?

Habe nur Angst, dass wenn die rar-Datei erstellt wird, diese fehlschlägt und die Daten dann verloren gehen. Also dürfen nur die Ordner unter Monat gelöscht werden, die auch eine zugehörige rar haben.

Verstehst du, was ich meine?

Gruss und einen Mega Dank
chappy
Bitte warten ..
Mitglied: chappy
19.05.2010 um 20:39 Uhr
Hallo bastla,

das sieht wirklich wunderbar aus, das die direkt ohne Unterordner in die Rar geschrieben werden ist genau was ich mir vorgestelllt habe.

Bis jetzt funktioniert es mal super.

Zum Thema Fehlerbehandlung: wie kann ich da reinschreiben, dass bei nicht erstellen einer rar-Datei, die fehlgeschlagene rar zu wiederholen?
oder kann man nicht angeben, welche rar wiederholt werden soll?

meiner Meinung nach, ist es besser, erst alle rar zu Archiv zu verschieben und zu jeder rar den passenden Ordner löschen. Der Ordner, der nicht gelöscht wurde, bedeutet, das hier die Rar nicht erstellt wurde oder ein fehler aufgetreten ist und muss wiederholt werden, bis der Ordner Monat leer ist. geht das überhaupt?

Lieben dank an dich
chappy

PS. leider weiss ich nicht genau, was man alles mit der batch machen kann und vorallem wie formulieren - -sorry - echt schade
Bitte warten ..
Mitglied: bastla
19.05.2010 um 20:52 Uhr
Hallo chappy!
Ausserdem, möchte ich die gepackten rar-Dateien in Ordner D:\Komprimier-Test\Archiv\Archiv kopieren und die kopierten Dateien, sowohl Ordner Monat, als auch die die schon behandelten Dateien im Ordner D:\Komprimier-Test\*.* löschen. Ich denke es macht Sinn, direkt, nach dem die Dateien in den Monat\Unterordner kopiert wurden zu löschen, oder was meinst du?
Eigentlich wäre die Strategie dann: die Originaldateien in den passenden "Monatsordner" nicht kopieren, sondern verschieben und zum Packen das Kommando "m" verwenden (wodurch die erfolgreich gepackten Dateien von "WinRar" selbst gelöscht werden sollten - zur Zuverlässigkeit dieses Vorgangs kann ich allerdings nichts wirklich Fundiertes sagen) ...

Eine dementsprechend adaptierte (aber nicht getestete) Version würde dann etwa so aussehen:
01.
@echo off & setlocal 
02.
set "Quelle=D:\Komprimier-Test\*.*" 
03.
set "Ziel=D:\Monate" 
04.
set "Log=D:\test.log" 
05.
 
06.
for /f "tokens=1-3 delims=. " %%a in ("%date%") do set "MonatAktuell=%%c-%%b" 
07.
del "%Log%" 2>nul 
08.
for %%i in ("%Quelle%") do for /f "tokens=1-3 delims=. " %%a in ("%%~ti") do if "%%c-%%b" neq "%MonatAktuell%" ( 
09.
    md "%Ziel%\%%c-%%b\" 2>nul 
10.
    move "%%i" "%Ziel%\%%c-%%b\" && >>"%Log%" echo "%%i" nach "%Ziel%\%%c-%%b" verschoben 
11.
12.
echo Die Daten wurden verschoben! 
13.
 
14.
echo. 
15.
pushd "%Ziel%" 
16.
for /d %%i in (*.*) do C:\Programme\WinRAR\WinRAR.exe m -ep "%%i.rar" "%%i\*.*" && echo Bei "%%i" alles OK! || echo Fehler beim Packen von "%%i" aufgetreten! 
17.
popd 
18.
echo. 
19.
echo Daten wurden archiviert!
Es bleiben zwar (noch) die leeren Monatsordner bestehen, aber diese ließen sich beim nächsten Start des Batches mit (einzufügen nach Zeile 5)
for /d %%i in ("%Ziel%\*.*") do rd "%%i"
eliminieren (wobei nur tatsächlich leere Ordner gelöscht würden).

Grüße
bastla
Bitte warten ..
Mitglied: chappy
19.05.2010 um 22:25 Uhr
es sieht wirklich immer besser aus, ich danke dir vom ganzen Herzen Bastla.

ich habe aber auch eine Frage:

1. ist es nicht möglich, die leeren Ordner nach Erstellung der zugehörigen rar zu löschen?
2. soweit ich das gesehen habe, werden die rar-Dateien nicht ausgegeben, sobald ein Fehler auftritt, aber werde es jetzt noch einmal Testen.

bis gleich

LG
chappy
Bitte warten ..
Mitglied: bastla
19.05.2010 um 22:30 Uhr
Hallo chappy!

1. sollte sich so machen lassen:
for /d %%i in (*.*) do C:\Programme\WinRAR\WinRAR.exe m -ep "%%i.rar" "%%i\*.*" && (echo Bei "%%i" alles OK! & rd "%%i") || echo Fehler beim Packen von "%%i" aufgetreten!
Grüße
bastla
Bitte warten ..
Mitglied: chappy
19.05.2010 um 22:56 Uhr
Hallo,

hallo Bastla,

kann man das so einstellen, dass nach jedem Monat erst die Rar erstellt wird, der Ordner gelöscht /geleer wird und dann den nächsten Monat abarbeiten? Dann ist man nämlich sicher, dass auf jeden Fall für den Fehlerfreien Ordner eine rar erstellt wird, oder was meinst du zu meiner Überlegung?

Eine weitere Frage ist, was soll mit der fehlerhaften rar passieren? das solange versucht wird zu komprimieren, bis nur leere Ordner vorhanden sind, dh. es wird immer auf volle Ordner geprüft (daran erkennt man ja welcher Monat fehlgeschlagen ist) und dann nochmals versuch eine rar zu erstellen. kann man eigentlich auch eine eMail an den Admin senden, wenn ein fehler auftritt??

Gruss
chappy
Bitte warten ..
Mitglied: bastla
19.05.2010 um 23:00 Uhr
Hallo chappy!
kann man das so einstellen, dass nach jedem Monat erst die Rar erstellt wird, der Ordner gelöscht /geleer wird und dann den nächsten Monat abarbeiten?
Sollte eigentlich genau so bereits laufen (die "for /d"-Schleife geht alle Ordner = Monate durch, per "WinRar m" wird der Ordner geleert und mit "rd" entfernt) ...
kann man eigentlich auch eine eMail an den Admin senden, wenn ein fehler auftritt??
Dazu findest Du unter dem Stichwort "blat" hier eine Menge Beispiele ...

Grüße
bastla
Bitte warten ..
Mitglied: chappy
19.05.2010 um 23:05 Uhr
hmmmm,

nach dem ich das versucht habe, kommt folgende Meldung:

Bei "2009-01" alles OK!
Das System kann die angegebene Datei nicht finden.
Fehler beim Packen von "2009-01" aufgetreten!
Bei "2009-02" alles OK!
Das System kann die angegebene Datei nicht finden.
Fehler beim Packen von "2009-02" aufgetreten!
Bei "2009-04" alles OK!
Das System kann die angegebene Datei nicht finden.
Fehler beim Packen von "2009-04" aufgetreten!
Bei "2010-04" alles OK!
Das System kann die angegebene Datei nicht finden.
Fehler beim Packen von "2010-04" aufgetreten!

Aber es passiert das gleiche, es werden rar erstellt und auch richtig, aber die Ordner werden nicht gelöscht, sondern bleiben leer. Weshalb nun diese Fehlermeldung kommt, habe ich nicht verstanden. Du etwa??

Dank dir
LG
chappy
Bitte warten ..
Mitglied: chappy
19.05.2010 um 23:08 Uhr
Zitat von bastla:

> kann man das so einstellen, dass nach jedem Monat erst die Rar erstellt wird, der Ordner gelöscht /geleer wird und dann
den nächsten Monat abarbeiten?
Sollte eigentlich genau so bereits laufen (die "for /d"-Schleife geht alle Ordner = Monate durch, per "WinRar
m
" wird der Ordner geleert und mit "rd" entfernt) ...

hmm leider ist das nicht der Fall. Ich sende dir nochmals den code, wie er momentan ausschaut:
@echo off & setlocal
set "Quelle=D:\Komprimier-Test\Test-Daten\*.*"
set "Ziel=D:\Komprimier-Test\Monate"
set "Log=D:\Komprimier-Test\test.log"

::for /d %%i in ("%Ziel%\*.*") do rd "%%i"

for /f "tokens=1-3 delims=. " %%a in ("%date%") do set "MonatAktuell=%%c-%%b"
del "%Log%" 2>nul
for %%i in ("%Quelle%") do for /f "tokens=1-3 delims=. " %%a in ("%%~ti") do if "%%c-%%b" neq "%MonatAktuell%" (
md "%Ziel%\%%c-%%b\" 2>nul
move "%%i" "%Ziel%\%%c-%%b\" && >>"%Log%" echo "%%i" nach "%Ziel%\%%c-%%b" verschoben
)

echo Die Daten wurden verschoben!
echo.

pushd "%Ziel%"
for /d %%i in (*.*) do C:\Programme\WinRAR\WinRAR.exe m -ep "%%i.rar" "%%i\*.*" && (echo Bei "%%i" alles OK! & rd "%%i") || echo Fehler beim Packen von "%%i" aufgetreten!
popd
echo.

echo Daten wurden archiviert!


danke

PS. musst du nicht schlafen gehen? Ist doch spät!!! Wenn wir das heut net schaffen sollten, darf ich morgen mit dir rechnen? Ich will morgen an grosse Datenmengen ran, um zu wissen, wann die rar abbricht. Hier habe ich momentan nur paar Daten an denen ich das ausprobiere.

Du bist echt klasse kann dir nicht oft genug für deine Unterstützung danken

LG
chappy
Bitte warten ..
Mitglied: chappy
19.05.2010 um 23:16 Uhr
ich blödian habe eine ( vergessen, daher die Fehlermeldung!! Sorry mein Fehler!!!

Läuft bisher wie es soll. Morgen muss ich das mit dem Fehler probieren und sehen, wie zu verfahren ist.

kann ich bei Fehler diee batch so steuern, dass ein erneueter Versuch zum packen gestartet wird? und nach dem 3ten versuch eine Mail an xxx@gmx.de gesendet wird??? gehtdas mit batch

Dank und lieben Dank
chappy

PS. muss erst morgen Fehler provozieren, dann kann ich mehr sagen, aber ich bräuchte definitiv so eine onstellation. Schlaf gut du Genie
Bitte warten ..
Mitglied: bastla
19.05.2010 um 23:17 Uhr
Hallo chappy!

Da fehlte eine Klammer - richtig müsste die Zeile so aussehen:
for /d %%i in (*.*) do C:\Programme\WinRAR\WinRAR.exe m -ep "%%i.rar" "%%i\*.*" && (echo Bei "%%i" alles OK! & rd "%%i") || echo Fehler beim Packen von "%%i" aufgetreten!
Wenn Du Code postest, bitte zwischen "<code>" und "</code>"-Tags stellen - dann kann zB auch leichter auf Zeilennummern Bezug genommen werden ...
darf ich morgen mit dir rechnen?
Tagsüber werde ich leider nicht viel Zeit haben ...

kann ich bei Fehler diee batch so steuern, dass ein erneueter Versuch zum packen gestartet wird? und nach dem 3ten versuch eine Mail an xxx@gmx.de gesendet wird??? gehtdas mit batch
Es geht einiges mit Batch - die Frage ist hier aber vor allem, wann "WinRar" die Dateien löscht (ich hoffe doch erst, wenn das komplette Archiv fehlerfrei erstellt wurde).

Grüße
bastla
Bitte warten ..
Mitglied: chappy
19.05.2010 um 23:21 Uhr
sehe obigen Beitrag

schade, aber vielleicht brauch ich auch die Zeit
Bitte warten ..
Mitglied: chappy
19.05.2010 um 23:23 Uhr
genau das möchte ich morgen in Erfahrung bringen. Sinn macht es ja alle mal, daher hatte ich am Anfang gedacht erst einmal kopieren und wenn rar trotz Fehler löscht, dann hat man noch die alten Daten.
Bitte warten ..
Mitglied: bastla
19.05.2010 um 23:26 Uhr
Hallo chappy!

Na dann schaun mer mal ...

Gute Nacht für heute.

P.S.: Ich zweifle etwas daran, dass Genialität anhand ziemlicher dummer Fehler / Ungenauigkeiten zu erkennen wäre ...
Bitte warten ..
Mitglied: chappy
19.05.2010 um 23:30 Uhr
meiner Meinung nach - definitiv ja!

Gute Nacht
Bitte warten ..
Mitglied: chappy
20.05.2010 um 13:11 Uhr
Moin moin bastla

habe herausgefunden, dass rar keine bestimmte Grössen-Begrenzung hat, daher haben wir freie Bahn.

zum anderen habe ich vergebens versucht einen Fehler nachzubilden, aber das ging leider nicht. Habe nur lesen, dass der m-Befehl, NUR erfolgreich gepackte Dateien löscht, sonst nicht. Damit muss ich jetzt nun leben.

Nun fehlen mir noch zwei Schritte:

1. Wenn eine Datei nicht verschoben werden konnte, soll eine Error-Log erstellt werden, die per eMail an admin@email.de geht und der Prozess abgebrochen werden.

2. das gleiche, wenn eine rar-Datei nicht erstellt werden konnte, dann soll das ignoriert werden, bis alle Ordner fertig sind und am Ende eine Error-Log erstellt werden, die an admin@email.de gehen soll mit der entsprechenden Fehlermeldung.

Jetzt ist die grosse Frage: Geht das mit batch? Wenn ja, wie geht das, ich werde es mal ausprobieren und heraussuchen, wie man überhaupt emails per batch versenden kann und dann noch einen Anhang dazu. Werde meine kläglichen Versuch dann posten ;) Für Tipps bin ich natürlich dankbar

Gruss
chappy
Bitte warten ..
Mitglied: chappy
20.05.2010 um 14:16 Uhr
Hallo Bastla,

ich habe den Code um die Fehlermeldung erweitert, aber irgenntwie wird keine Error.log erstellt. Ist der Code fehlerhaft? Ich weiss es nicht.

01.
@echo off & setlocal  
02.
 
03.
set "Quelle=U:\Daten_L\Datenpool\Komprimier_Test\Daten\*.*"  
04.
set "Ziel=U:\Daten_L\Datenpool\Komprimier_Test\Monate"  
05.
set "Log=U:\Daten_L\Datenpool\Komprimier_Test\Daten\test.log"  
06.
 
07.
::for /d %%i in ("%Ziel%\*.*") do rd "%%i" 
08.
 
09.
for /f "tokens=1-3 delims=. " %%a in ("%date%") do set "MonatAktuell=%%c-%%b"  
10.
del "%Log%" 2>nul  
11.
for %%i in ("%Quelle%") do for /f "tokens=1-3 delims=. " %%a in ("%%~ti") do if "%%c-%%b" neq "%MonatAktuell%" (  
12.
md "%Ziel%\%%c-%%b\" 2>nul  
13.
move "%%i" "%Ziel%\%%c-%%b\" && >>"%Log%" echo "%%i" nach "%Ziel%\%%c-%%b" verschoben || echo Fehler beim Verschieben von "%%i" aufgetreten! 
14.
)  
15.
 
16.
echo Die Daten wurden verschoben!  
17.
echo.  
18.
 
19.
pushd "%Ziel%"  
20.
for /d %%i in (*.*) do C:\Programme\WinRAR\WinRAR.exe m -ep -ilog%Ziel%\Error.log "%%i.rar" "%%i\*.*" && (echo Bei "%%i" alles OK! & rd "%%i") || echo Fehler beim Packen von "%%i" aufgetreten! 
21.
popd  
22.
echo.  
23.
 
24.
 
25.
echo Daten wurden archiviert! 
26.
 
was meinst du? Siehe Zeile 13 und 18 ist da was falsch?

Bezweckt war, dass ein Fehler ausgegeben wird, wenn (13) eine Datei nicht verschoben werden kann (18) beim packen ein Fehler entsteht
(13) kommt die Meldung: Der Prozess kann nicht auf die Datei zugreifen, da sie von einem anderen Prozess verwendet wird., aber der Prozess geht weiter ausser die betroffene Datei wird liegen gelassen. Beim nächsten Durchlauf wird diese zum bestehenden archiv hinzugefügt, was auch nicht schlecht ist.

Wenn aber alle Dateien, die verschoben werden müssten nicht verschoben werden können, da diese bearbeitet werden, bekomme ich dennoch die Meldung: Daten wurden verschoben, obwohl das nicht stimmt. Anschliessend wird versucht zu packen, das schlägt auch fehl, weil der erstellte Ordner leer ist. Dann kommt die Meldung "packen fehlgeschlagen", aber keine error.log was mit Zeile (18) beabsichtigt war.

Bzgl. EMAIL:

habe mich umgelesen wegen eMail und blat.exe. Ich habe das hier auf den Rechner nicht gefunden. Bei uns werden die eMails per Outlook versendet. kann ich dann diese per batch versendete eMail auch über outlook versenden, ohne etwas zu installieren? Wäre nämlich nicht erlaubt etwas fremdes zu installieren. Was habe ich da für Möglichkeiten? Habe gehört, dass es mit batch gar nicht geht?! Bin noch auf das gestossen, aber sagt mir nicht viel.

01.
@echo off & setlocal 
02.
 
03.
:: set the temp file location 
04.
set tempmail=%temp%\tempmail.%random%.txt 
05.
 
06.
:: echo the basic headers to the temp file 
07.
echo To: "Scripting Test" ^<test@paulsadowski.com^> > %tempmail% 
08.
echo From: "Me" ^<me@my.com^> >> %tempmail% 
09.
echo Subject: Test2 >> %tempmail% 
10.
 
11.
:: echo the blank line that separates the header from the body text 
12.
echo.>>%tempmail% 
13.
 
14.
:: echo the body text to the temp file 
15.
echo First line of body text.>> %tempmail% 
16.
echo Second line of body text.>> %tempmail% 
17.
 
18.
:: move the temp file to the mail pickup directory 
19.
:: adjust this location for your system 
20.
move %tempmail% c:\inetpub\mailroot\pickup 
21.
set tempmail= 
22.
endlocal 
Gruss
chappy

Fragen über Fragen, mein Gott alles sooo kompliziert
Bitte warten ..
Mitglied: bastla
20.05.2010 um 17:39 Uhr
Hallo chappy!

Versuch es mal so:
01.
@echo off & setlocal  
02.
 
03.
set "Quelle=U:\Daten_L\Datenpool\Komprimier_Test\Daten\*.*"  
04.
set "Ziel=U:\Daten_L\Datenpool\Komprimier_Test\Monate"  
05.
set "Log=U:\Daten_L\Datenpool\Komprimier_Test\test.log"  
06.
set "Err=U:\Daten_L\Datenpool\Komprimier_Test\Fehler.log" 
07.
 
08.
::for /d %%i in ("%Ziel%\*.*") do rd "%%i" 
09.
 
10.
for /f "tokens=1-3 delims=. " %%a in ("%date%") do set "MonatAktuell=%%c-%%b"  
11.
del "%Log%" 2>nul  
12.
del "%Err%" 2>nul 
13.
for %%i in ("%Quelle%") do for /f "tokens=1-3 delims=. " %%a in ("%%~ti") do if "%%c-%%b" neq "%MonatAktuell%" (  
14.
    md "%Ziel%\%%c-%%b\" 2>nul  
15.
    move "%%i" "%Ziel%\%%c-%%b\" && ( 
16.
        >>"%Log%" echo "%%i" nach "%Ziel%\%%c-%%b" verschoben 
17.
    ) || ( 
18.
        >>"%Log%" echo Fehler beim Verschieben von "%%i" aufgetreten! 
19.
        >>"%Err%" echo Fehler beim Verschieben von "%%i" aufgetreten! 
20.
    )  
21.
22.
echo Die Daten wurden verschoben!  
23.
echo.  
24.
 
25.
pushd "%Ziel%"  
26.
for /d %%i in (*.*) do C:\Programme\WinRAR\WinRAR.exe m -ep -ilog%Ziel%\Error.log "%%i.rar" "%%i\*.*" && ( 
27.
    >>"%Log%" echo Bei "%%i" alles OK! 
28.
    rd "%%i" 
29.
) || ( 
30.
    >>"%Log%" echo Fehler beim Packen von "%%i" aufgetreten! 
31.
    >>"%Err%" echo Fehler beim Packen von "%%i" aufgetreten! 
32.
33.
popd 
34.
 
35.
echo.  
36.
echo Daten wurden archiviert! 
37.
 
38.
if exist "%Err%" ( 
39.
    REM Mail senden 
40.
)
Die Idee ist, für Fehler eine zusätzliche Logdatei ("%Err%") zu erstellen (das "Standard"-Log "%Log%" würde ich übrigens weiterhin nicht zu den Daten legen, sondern, so wie "%Err%", zumindest eine Ordnerebene höher platzieren) und am Ende des Batches zu überprüfen, ob diese Datei existiert - wenn ja, wäre der Inhalt in den Body einer Mail aufzunehmen und diese (auf welche Art und Weise auch immer) zu versenden ...

Grüße
bastla

[Edit] Schließende Klammer in Zeile 21 nachgetragen [/Edit]
Bitte warten ..
Mitglied: chappy
21.05.2010 um 10:32 Uhr
Hallo Bastla,

sorry, bin erst heute zum testen gekommen und leider sieht es schlecht aus. Ich weiss auch nicht wieso. Habe mal echo on gesetzt, um zu sehen, wo das skript sich aufhängt und es kommt bis Zeile 13. Da hört es auf und es passiert nichts, wieso auch immer. ich poste noch mal den code. Könntest du bitte nochmals die Zeile 26 dir anschauen? wollte da die Fehlermeldung von Rar mit abfangen und in die Error.log mit reinschreiben. Stimmt das so?:

01.
@echo on & setlocal   
02.
  
03.
set "Quelle=U:\Daten_L\Datenpool\Komprimier_Test\Daten\*.*"   
04.
set "Ziel=U:\Daten_L\Datenpool\Komprimier_Test\Monate"   
05.
set "Log=U:\Daten_L\Datenpool\Komprimier_Test\Verlauf.log"   
06.
set "Err=U:\Daten_L\Datenpool\Komprimier_Test\Fehler.log"  
07.
  
08.
::for /d %%i in ("%Ziel%\*.*") do rd "%%i"  
09.
  
10.
for /f "tokens=1-3 delims=. " %%a in ("%date%") do set "MonatAktuell=%%c-%%b"   
11.
del "%Log%" 2>nul   
12.
del "%Err%" 2>nul  
13.
for %%i in ("%Quelle%") do for /f "tokens=1-3 delims=. " %%a in ("%%~ti") do if "%%c-%%b" neq "%MonatAktuell%" (   
14.
md "%Ziel%\%%c-%%b\" 2>nul   
15.
move "%%i" "%Ziel%\%%c-%%b\" && (  
16.
    >>"%Log%" echo "%%i" nach "%Ziel%\%%c-%%b" verschoben  
17.
) || (  
18.
    >>"%Log%" echo Fehler beim Verschieben von "%%i" aufgetreten!  
19.
    >>"%Err%" echo Fehler beim Verschieben von "%%i" aufgetreten!  
20.
)   
21.
  
22.
echo Die Daten wurden verschoben!   
23.
echo.   
24.
  
25.
pushd "%Ziel%"   
26.
for /d %%i in (*.*) do C:\Programme\WinRAR\WinRAR.exe m -ep -ilog%Err% "%%i.rar" "%%i\*.*" && (  
27.
    >>"%Log%" echo Bei "%%i" alles OK!  
28.
    rd "%%i"  
29.
) || (  
30.
    >>"%Log%" echo Fehler beim Packen von "%%i" aufgetreten!  
31.
    >>"%Err%" echo Fehler beim Packen von "%%i" aufgetreten!  
32.
)  
33.
popd  
34.
  
35.
echo.   
36.
echo Daten wurden archiviert!  
37.
  
38.
if exist "%Err%" (  
39.
    REM Mail senden  
40.
)
hmmm, keine Ahnung

Gruss
chappy
Bitte warten ..
Mitglied: bastla
21.05.2010 um 11:01 Uhr
Hallo chappy!

Die schließende Klammer in Zeile 21 ist leider auf der Strecke geblieben (ich korrigiere das oben auch noch) ...
Ob Du die Fehlermeldung von "WinRar" (in Zeile 26) und / oder per "echo" in Zeile 31 erzeugen lässt, ist eigentlich für den Programmablauf egal (soferne "WinRar" tatsächlich nur im Fehlerfall in die Datei "%Err%" schreibt) ...

Grüße
bastla
Bitte warten ..
Mitglied: chappy
21.05.2010 um 11:25 Uhr
Hallo Bastla,

das stimmt, habe es nicht gesehen. es funktioniert jetzt auch. Schlage mich gerade mit der eMail rum.

Gibt es eine Möglichkeit, eine email aus batch zu senden, ohne etwas zusätzliches zu installieren? mir steht outlook zur Verfügung, aber es funktioniert nicht. Habe nach MAPISend gesucht, habe ich nicht hier nur MAPISRVR

Habe das versucht:

01.
@echo off & setlocal   
02.
 
03.
MAPISRVR -u "EXCHGCL3.genag.de" -r ext.l.l@email.com -s "Test Beispiel Betreff?" -m "Testbeispiel für Inhalt"
weisst du woran es liegen könnte?
Bitte warten ..
Mitglied: bastla
21.05.2010 um 11:33 Uhr
Hallo chappy!
weisst du woran es liegen könnte?
Leider nein - es sollte Dir aber doch eigentlich ein Admin sagen können, auf welche Art Du ihm eine Nachricht (per Script) senden kannst ...

Grüße
bastla
Bitte warten ..
Mitglied: chappy
21.05.2010 um 11:41 Uhr
leider gibt es niemand der was sagen kann und aus der Outlook-Hilfe werde ich nicht schlau.

irgenntwie soll es auch für outlook diese Befehle /m /a /c und so weiter geben, aber ich finde die Bedeutung nicht und bekomme Sie auch nicht angesteuert

Versuche erst einmal mir selber eine Mail zu zu senden, aber das klappt leider auch nicht. hast du noch ne Idee, was man da machen könnte oder welche Alternative man da hätte?

Beispiel mit hilfe von http://www.outlook-tips.net/howto/commandlines.htm:

01.
@echo off & setlocal   
02.
set "Quelle=C:\Programme\Microsoft Office\Office11"   
03.
 
04.
"%Quelle%\Outlook.exe" /c ipm.note /m "person@email.com" 
Aber der erkennt den Pfad nicht, weil wohl "Microsoft Office" im Pfad auseinander geschrieben ist. bekomme die Meldung:

Der Befehl ""C:\Programme\Microsoft Office\Office11\Outlook.exe"" ist entweder falsch geschrieben oder
konnte nicht gefunden werden.

Warum?

Dank und Gruß
chappy
Bitte warten ..
Mitglied: chappy
21.05.2010 um 12:04 Uhr
Sorry, pfad war falsch von mir, anstelle 11 muss 12 hin!!

wenn ich das ausführe, dann wird das outlock-Email_fenster gestartet, wobei die angegeben eMail_Adresse im "An"_Feld steht, die Fehler.log im Anhang abgelegt wird. so jetzt noch einen Standardtext!!!!!

vielleicht kommen wir der lösung näher auch wenn ich keine Ahnung vom skripten habe.

Hast du einen Vorschlag

Grüsse
chappy
Bitte warten ..
Mitglied: bastla
21.05.2010 um 12:41 Uhr
Hallo chappy!

Sorry - Outlook ist nicht so meine Baustelle ...

Wenn der Rest soweit funktioniert, würde es sich eigentlich anbieten, diesen Thread hier zu schließen und einen neuen für das Thema "Mailversand" zu eröffnen ...

Grüße
bastla
Bitte warten ..
Mitglied: chappy
21.05.2010 um 13:15 Uhr
Ja, ich denke mal, das dem so ist.

Ich bedanke mich ganz herzlich für deine Geduld, Mühe und vorallem Zeit die du investiert hast.

Mal schauen, wie das mit der Mail zu behandeln ist.

Herzlichen Dank und liebe Grüsse
chappy
Bitte warten ..
Mitglied: Biber
21.05.2010 um 13:20 Uhr
Moin chappy,

so wirst du kein brauchbares Ergebnis bekommen, denn

1) über den Weg "Outlook mit Parametern aufrufen" bekommst du zwar Outlook mit einer leeren Mail gestartet, auch den Empfänger virgeblendet mit Parameter /c und mit /a auch die Datei angehängt.... aber bekommst keinen Text in den Body der mail und automatisch versenden geht auch nicht. Und schon gar nicht unsichtbar im Hintergrund.

2) über den Weg "mailto://" aufrufen bekommst du zwar Recipient, Subject und Body hin und das Versenden ...aber ums Verrecken keinen Anhang

3 & 4) bleiben als nächstkomplexere Varianten der Weg über MAPI-Schnttstelle oder über ActiveX...

--------> Spätestens wenn du das als Info weitergibst, dann wird dir Blat.exe oder ein ahnliches Tool erlaubt werden.
Denn das wäre vollkommen unangemessen, da jetzt mit Hochsprachen und API-Aufrufen für diesen Dödelkrams anzufangen.

Grüße
Biber
Bitte warten ..
Mitglied: chappy
21.05.2010 um 13:37 Uhr
soweit war ich fast, habe aber noch immer an meinen Kenntnissen und Fähigkeiten gezweifelt.
Es stellt sich die Frage, ob ich den inhalt aus der Log_datei als body verschieben kann oder halt den Link zur Fehler.log, dann könnten wir zu Lösung 2 greifen, oder?
Bitte warten ..
Mitglied: chappy
21.05.2010 um 14:49 Uhr
Hey, dann stellt sich die Frage:

mit vbs kann man die mail versenden, oder? sehe:

01.
VBScript'========================================================================== 
02.
03.
' NAME: MailUsingOutlook.vbs 
04.
05.
' COMMENT: This script generates an e-mail using the Outlook client. 
06.
07.
'========================================================================== 
08.
 
09.
'Create an Outlook object 
10.
Dim Outlook 'As New Outlook.Application 
11.
Set Outlook = CreateObject("Outlook.Application") 
12.
   
13.
'Create e new message 
14.
Dim Message 'As Outlook.MailItem 
15.
Set Message = Outlook.CreateItem(olMailItem) 
16.
With Message 
17.
	.Subject = "Important message from a script!" 
18.
	.Body = "This message was generated from a script using the Outlook client." 
19.
 
20.
	'Set destination email address 
21.
	.Recipients.Add ("k.myer@fabrikam.com") 
22.
 
23.
	'Set sender address. 
24.
	Const olOriginator = 0 
25.
	.Recipients.Add("sysadmin@fabrikam.com").Type = olOriginator 
26.
	.Recipients.ResolveAll 
27.
 
28.
	'Send the Message 
29.
	.Send 
30.
End With 
31.
 
wie kann ich das mit dem obigen code vereinen, so dass der error-File und Log-File mitgenommen wird? oder auch als Link versendet wird? Ist das überhaupt machbar?

grüsse eure verzweifelte
chappy
Bitte warten ..
Mitglied: bastla
21.05.2010 um 15:22 Uhr
Hallo chappy!

Unter der Voraussestzung, dass das VBScript macht, was es soll, könnten die Logs so in den Body eingefügt werden:
01.
VBScript'========================================================================== 
02.
03.
' NAME: MailUsingOutlook.vbs 
04.
05.
' COMMENT: This script generates an e-mail using the Outlook client. 
06.
07.
'========================================================================== 
08.
Verlauf = "U:\Daten_L\Datenpool\Komprimier_Test\Verlauf.log" 
09.
Fehler = "U:\Daten_L\Datenpool\Komprimier_Test\Fehler.log" 
10.
 
11.
Set fso = CreateObject("Scripting.FileSystemObject" 
12.
BodyText = "Verlauf:" & vbCrLf & fso.OpenTextFile(Verlauf).ReadAll 
13.
BodyText = BodyText & vbCrLf & "==========================================================================" & vbCrLf 
14.
If fso.FileExists(Fehler) Then BodyText = "Fehler: " & BodyText & fso.OpenTextFile(Fehler).ReadAll 
15.
 
16.
'Create an Outlook object 
17.
Dim Outlook 'As New Outlook.Application 
18.
Set Outlook = CreateObject("Outlook.Application") 
19.
   
20.
'Create e new message 
21.
Dim Message 'As Outlook.MailItem 
22.
Set Message = Outlook.CreateItem(olMailItem) 
23.
With Message 
24.
	.Subject = "Important message from a script!" 
25.
	.Body = BodyText 
26.
 
27.
	'Set destination email address 
28.
	.Recipients.Add ("k.myer@fabrikam.com") 
29.
 
30.
	'Set sender address. 
31.
	Const olOriginator = 0 
32.
	.Recipients.Add("sysadmin@fabrikam.com").Type = olOriginator 
33.
	.Recipients.ResolveAll 
34.
 
35.
	'Send the Message 
36.
	.Send 
37.
End With
Grüße
bastla
Bitte warten ..
Mitglied: chappy
21.05.2010 um 15:36 Uhr
Hallo bastla,

super süss deine Mühe, leider hat dieser blöde script nicht gemacht, was ich wollte. Aber dafür habe ich was anderes jetzt. Schau mal:

01.
Const olByValue = 1 
02.
Const olMailItem = 0 
03.
     
04.
Dim oOApp  
05.
Dim oOMail 
06.
 
07.
Set oOApp = CreateObject("Outlook.Application") 
08.
Set oOMail = oOApp.CreateItem(olMailItem) 
09.
 
10.
With oOMail 
11.
    .To = "ext.d.wiggins@rheinenergie.com" 
12.
    .Subject = "Dies ist der Betreff" 
13.
    .Body = "Bei der Archivierung der Daten ist ein Fehler aufgetreten." 
14.
    .Attachments.Add "U:\Daten_L\Datenpool\Komprimier_Test\Fehler.log", olByValue, 1 
15.
    .Send 
16.
End With
ein kleine Frage noch, ist es möglich, mir die Variable aus dem batsch zu ziehen? sehe Zeile (15), da wollte ich jetzt net an mehreren Stellen was ändern wollen, daher die Frage: kann ich beide in eine datei legen? oder müssen die getrennt liegen und kann ich die Variable für den Pfad an die VBS weitergeben?

Gruss
chappy
Bitte warten ..
Mitglied: bastla
21.05.2010 um 15:45 Uhr
Hallo chappy!

Du kannst das Script aus dem Batch mit
cscript //nologo D:\Mailscript.vbs "U:\Daten_L\Datenpool\Komprimier_Test\Fehler.log"
aufrufen und im Script mit
Attach = WScript.Arguments(0)
den Pfad in die Variable "Attach" übernehmen und dann per
.Attachments.Add Attach
hinzufügen.

Grüße
bastla
Bitte warten ..
Mitglied: chappy
21.05.2010 um 16:08 Uhr
Hallo bastla,

leider bekomme ich dann keine Mail, weder versendet noch kommt was an .

Meldung:
U:\Daten_L\Datenpool\Komprimier_Test\MailService.vbs(9, 1) Laufzeitfehler in Microsoft VBScript: Objekt erforderlich: '[string: "U:\Daten_L\Datenpool"]'

der aktuelle code sieht so aus:

MailService:

01.
Const olByValue = 1 
02.
Const olMailItem = 0 
03.
     
04.
Dim oOApp  
05.
Dim oOMail 
06.
 
07.
Set oOApp = CreateObject("Outlook.Application") 
08.
Set oOMail = oOApp.CreateItem(olMailItem) 
09.
Set Attach = WScript.Arguments(0) 
10.
 
11.
With oOMail 
12.
    .To = "email@email.com" 
13.
    .Subject = "Fehlermeldung - Bitte prüfen!" 
14.
    .Body = "Bei der Archivierung der Daten ist ein Fehler aufgetreten." 
15.
    '.Attachments.Add "U:\Daten_L\Datenpool\Komprimier_Test\Fehler.log", olByValue, 1 
16.
	.Attachments.Add Attach 
17.
    .Send 
18.
End With
Archivier.bat:
01.
@echo off & setlocal   
02.
  
03.
set "Quelle=U:\Daten_L\Datenpool\Komprimier_Test\Daten\*.*"   
04.
set "Ziel=U:\Daten_L\Datenpool\Komprimier_Test\Monate"   
05.
set "Log=U:\Daten_L\Datenpool\Komprimier_Test\Verlauf.log"   
06.
set "Err=U:\Daten_L\Datenpool\Komprimier_Test\Fehler.log"  
07.
set "Msg=U:\Daten_L\Datenpool\Komprimier_Test\MailService.vbs" 
08.
  
09.
::for /d %%i in ("%Ziel%\*.*") do rd "%%i"  
10.
  
11.
for /f "tokens=1-3 delims=. " %%a in ("%date%") do set "MonatAktuell=%%c-%%b"   
12.
del "%Log%" 2>nul   
13.
del "%Err%" 2>nul  
14.
for %%i in ("%Quelle%") do for /f "tokens=1-3 delims=. " %%a in ("%%~ti") do if "%%c-%%b" neq "%MonatAktuell%" (   
15.
md "%Ziel%\%%c-%%b\" 2>nul   
16.
move "%%i" "%Ziel%\%%c-%%b\" && (  
17.
    >>"%Log%" echo "%%i" nach "%Ziel%\%%c-%%b" verschoben  
18.
echo. 
19.
echo Daten wurden verschoben!  
20.
) || (  
21.
    >>"%Log%" echo Fehler beim Verschieben von "%%i" aufgetreten!  
22.
    >>"%Err%" echo Fehler beim Verschieben von "%%i" aufgetreten!  
23.
echo. 
24.
echo Datei "%%i" konnten nicht verschoben werden!  
25.
	)   
26.
27.
  
28.
pushd "%Ziel%"   
29.
for /d %%i in (*.*) do C:\Programme\WinRAR\WinRAR.exe m -ep -ilog%Err% "%%i.rar" "%%i\*.*" && (  
30.
    >>"%Log%" echo "%%i" wurde erfolgreich komprimiert!  
31.
    rd "%%i"  
32.
echo. 
33.
echo Daten wurden archiviert!  
34.
) || (  
35.
    >>"%Log%" echo Fehler beim Packen von "%%i" aufgetreten!  
36.
    >>"%Err%" echo Fehler beim Packen von "%%i" aufgetreten!  
37.
echo. 
38.
echo Datei "%%i" konnten nicht archiviert werden!  
39.
)  
40.
popd  
41.
 
42.
if exist "%Err%" (  
43.
   ::U:\Daten_L\Datenpool\Komprimier_Test\MailService.vbs 
44.
   cscript //nologo %Msg% "%Err%" 
45.
)
wo liegt das Problem schon wieder?? Liegt wohl in Zeile 9 vom vbs

grüsse
chappy
Bitte warten ..
Mitglied: bastla
21.05.2010 um 16:16 Uhr
Hallo chappy!

War leider gerade abgelenkt und habe den Rest der Zeile 16 im Script unterschlagen - die ganze Zeile sollte
.Attachments.Add Attach, olByValue, 1
lauten ...

Grüße
bastla
Bitte warten ..
Mitglied: chappy
21.05.2010 um 16:23 Uhr
Hatte ich bereits ausprobiert, aber das ist es nicht

ich sehe aber auch nicht, wo wir das Objekt weitergeben?! Oder den String ?!
Ist immer noch die gleiche Meldung
Bitte warten ..
Mitglied: bastla
21.05.2010 um 16:37 Uhr
Hallo chappy!

Übergeben wird der Pfad (ein String) als Aufrufparameter des Scripts in der Batch-Zeile
cscript //nologo %Msg% "%Err%"
Mit der Zeile 9 hattest Du übrigens recht - Du hast da ein für einen String (in VBS) unnötiges "Set" dazuerfunden ...

Grüße
bastla
Bitte warten ..
Mitglied: chappy
21.05.2010 um 16:52 Uhr
Oh je, ich dachte, das wäre erforderlich gewesen, um die Variable Attach zu setzen

Sorry sorry, jetzt geht es auch!

SUPPPPPERR ihr Lieben

ein Herzliches Danke schön und ein schönes Wochenende wünsche ich euch.

Eure
chappy

PS. wenn ich anstelle des aktuellen Monats die letzten 3 Monate noch nicht archivieren möchte, wie schreib ich das?
%aktuelleMonat% - 3
etwa so?
Bitte warten ..
Mitglied: bastla
21.05.2010 um 18:38 Uhr
Hallo chappy!
PS. wenn ich anstelle des aktuellen Monats die letzten 3 Monate noch nicht archivieren möchte, wie schreib ich das?
In diesem Fall ändert sich die Logik des Vergleichs (und es wird eine Berechnung erforderlich) - wieder einmal ungetestet etwa so:
01.
@echo off & setlocal   
02.
  
03.
set "Quelle=U:\Daten_L\Datenpool\Komprimier_Test\Daten\*.*"   
04.
set "Ziel=U:\Daten_L\Datenpool\Komprimier_Test\Monate"   
05.
set "Log=U:\Daten_L\Datenpool\Komprimier_Test\Verlauf.log"   
06.
set "Err=U:\Daten_L\Datenpool\Komprimier_Test\Fehler.log"  
07.
set "Msg=U:\Daten_L\Datenpool\Komprimier_Test\MailService.vbs" 
08.
set /a Vormonate=3 
09.
  
10.
for /f "tokens=1-3 delims=. " %%a in ("%date%") do set "Monat=1%%b" & set "Jahr=%%c" 
11.
set /a Monat-=%Vormonate% 
12.
if %Monat% leq 101 ( 
13.
    set /a Monat+=12 
14.
    set /a Jahr-=1 
15.
16.
set "MonatAktuell=%Jahr%-%Monat:~-2%" 
17.
  
18.
del "%Log%" 2>nul   
19.
del "%Err%" 2>nul  
20.
for %%i in ("%Quelle%") do for /f "tokens=1-3 delims=. " %%a in ("%%~ti") do if "%%c-%%b" leq "%MonatAktuell%" ( 
21.
    md "%Ziel%\%%c-%%b\" 2>nul   
22.
    move "%%i" "%Ziel%\%%c-%%b\" && (  
23.
        >>"%Log%" echo "%%i" nach "%Ziel%\%%c-%%b" verschoben  
24.
        echo. 
25.
        echo Daten wurden verschoben!  
26.
    ) || (  
27.
        >>"%Log%" echo Fehler beim Verschieben von "%%i" aufgetreten!  
28.
        >>"%Err%" echo Fehler beim Verschieben von "%%i" aufgetreten!  
29.
        echo. 
30.
        echo Datei "%%i" konnten nicht verschoben werden!  
31.
    )   
32.
33.
  
34.
pushd "%Ziel%"   
35.
for /d %%i in (*.*) do C:\Programme\WinRAR\WinRAR.exe m -ep -ilog%Err% "%%i.rar" "%%i\*.*" && (  
36.
    >>"%Log%" echo "%%i" wurde erfolgreich komprimiert!  
37.
    rd "%%i"  
38.
    echo. 
39.
    echo Daten wurden archiviert!  
40.
) || (  
41.
    >>"%Log%" echo Fehler beim Packen von "%%i" aufgetreten!  
42.
    >>"%Err%" echo Fehler beim Packen von "%%i" aufgetreten!  
43.
    echo. 
44.
    echo Datei "%%i" konnten nicht archiviert werden!  
45.
)  
46.
popd  
47.
 
48.
if exist "%Err%" (  
49.
   cscript //nologo %Msg% "%Err%" 
50.
)
Kurze Anmerkung hinsichtlich der "Trickserei" mit 100+Monatszahl (bzw "1%%b"): Da in Batch eine mit 0 beginnende Zahl als Oktalzahl interpretiert wird, kann mit "08" und "09" nicht gerechnet werden (da Oktalzahlen nur die Ziffern 0 bis 7 verwenden). Als Workaround wird zunächst der Monatszahl eine 1 vorangestellt, was zu Werten zwischen 101 und 112 führt, und damit gerechnet (zB -3). Um dann wieder zu einer Zahl mit einer führenden Null zu kommen (wie sie das Dateidatum enthält), werden nur die letzten beiden Stellen verwendet (der "Hunderter" wird damit praktisch wieder abgezogen)

Grüße
bastla
Bitte warten ..
Mitglied: chappy
25.05.2010 um 10:30 Uhr
Hallo,

habe mal angefangen, dass Progrämmchen etwas mehr zu testen und dabei habe ich die folgende Meldung bekommen:

Die folgende Verwendung des Pfadoperators zur Ersetzung eines Batchparameters
ist ungültig: %~ti") do if "%%c-%%b" neq "%MonatAktuell%" (


Geben Sie CALL /? oder FOR /? ein, um herauszufinden, welche Formate gültig
sind.
Syntaxfehler.

Was heisst das. Ich habe die von mir zuletzt gepostete Version. @bastla Deinen Code habe ich noch nicht ausgetestet. Kannst du mir hierzu was sagen?

Vielleicht mehr zum Ablauf: In dem Quell-Ordner waren alle möglichen Daten drin. Es wurden alle verschoben ausser die von diesem Monat. Dann kam diese Fehlermeldung und es wurde nicht gepackt.

Gruss
chappy

PS: kann ich eigentlich mehrere Quell- und Zielverzeichnisse eingeben? Oder wie mache ich das? muss ich etwa für jedes Verzeichnis eine eigene bat ablegen?
Bitte warten ..
Mitglied: bastla
25.05.2010 um 11:20 Uhr
Hallo chappy!

Fangen wir am Ende an:
kann ich eigentlich mehrere Quell- und Zielverzeichnisse eingeben? Oder wie mache ich das?
Du kannst den Batch mit Parametern aufrufen - dazu wären dann die Zeilen 3 und 4 zB auf
01.
set "Quelle=%~1" 
02.
set "Ziel=%~2"
zu ändern und der Batch etwa so zu starten (vorzugsweise aus einem weiteren Batch):
D:\Batches\Komprimieren.cmd "U:\Daten_L\Datenpool\Komprimier_Test\Daten\*.*" "U:\Daten_L\Datenpool\Komprimier_Test\Monate"
Auf diese Art brauchst Du für jeden Vorgang nur eine zusätzliche Zeile. Soferne auch die Logfiles etc jeweils unterschiedlich sein sollen, stehen noch die Parameter %3 bis %9 zur Verfügung.
@Bastla Deinen Code habe ich noch nicht ausgetestet. Kannst du mir hierzu was sagen?
Wenn Du nicht nur den aktuellen Monat ausschließen willst, musst Du eine Berechnung durchführen, und da sich bei einem Abstand von 3 Monaten auch ein Jahreswechsel ergeben kann (im März wären erst die Daten des Dezembers aus dem Vorjahr zu verarbeiten) braucht es ein wenig mehr Code - Du kannst aber einfach in die Zeile 17
echo %MonatAktuell% & goto :eof
(und in Zeile 1 "echo on") schreiben und den Batch von der Kommandozeile starten - sollte dann eigentlich nachvollziehbar sein.
Noch ein Unterschied zur vorigen Version: In Zeile 20 wird mit "leq" auf "kleiner-gleich" geprüft, während bisher auf "ungleich" (bezogen auf den derzeitigen Monat) abgefragt wurde.
Zur Fehlermeldung: Diese entsteht ja beim Auslesen des Dateidatums - insofern wäre es interessant, für welche Datei der Fehler aufgetreten ist. Bisher war ich davon ausgegangen, dass es keine Unterordner im Quellordner gibt - war das in diesem Fall anders?

Grüße
bastla
Bitte warten ..
Mitglied: chappy
25.05.2010 um 11:33 Uhr
Zitat von bastla:
Zur Fehlermeldung: Diese entsteht ja beim Auslesen des Dateidatums - insofern wäre es interessant, für welche Datei der
Fehler aufgetreten ist. Bisher war ich davon ausgegangen, dass es keine Unterordner im Quellordner gibt - war das in diesem Fall
anders?

eins nach dem anderen. Also einen Unterordner gab es in diesem Fall nicht und von der Verzeichnisstruktur eigentlich auch wie gehabt. Deswegen habe ich es auch nicht verstanden. In diesen Fällen wurden die Dateien nicht kopiert und nach dem ich überprüft habe, habe ich festgestellt, das diese alle von diesem Monat sind. ;ehr konnte ich nicht feststellen.

Habe dann die Dateien des Aktuellen Ordner heraus gelöscht und nochmals die bat angestossen, damit cie Dateien komprimiert werden.
Habe allerdings gesehen, das sehr oft die Fehlermeldung kam, dass die Datei nicht verschoben werden konnte, da diese von einem anderen prozess benutzt wird, aber das kann gar nicht sein!

Gruss
chappy

PS: Bisher habe ich die Pfade immer so hineingelegt und konnte aber aus der Log Datei nicht finden, welche Daten nicht verschoben wurden. Weiss auch nicht, ob diese jedes mal überschrieben wird, gleichers für die Error.log. Muss ich für jeden Pfad eine Eigene anlegen?

So sieht es bisher aus, ich habe immer auskomentiert und die batch im euen cmd-fenster angestossen (deswegen wahrscheinlich gegenseitiges Überschreiben)

01.
@echo off & setlocal   
02.
  
03.
::set "Quelle=U:\Daten_L\Datenpool\Komprimier_Test\Daten\*.*"   
04.
::set "Ziel=U:\Daten_L\Datenpool\Komprimier_Test\Monate"   
05.
 
06.
set "Quelle=W:\hPFC-Tool\Out\EHS\Archiv\*.*"   
07.
set "Ziel=W:\hPFC-Tool\Out\EHS\Monate"   
08.
 
09.
::set "Quelle=W:\hPFC-Tool\Out\IPM\done\*.*"   
10.
::set "Ziel=W:\hPFC-Tool\Out\IPM\Monate"   
11.
 
12.
::set "Quelle=W:\hPFC-Tool\Out\RETweb\Kurzfristprognose\Archiv\*.*"   
13.
::set "Ziel=W:\hPFC-Tool\Out\RETweb\Kurzfristprognose\Monate"   
14.
 
15.
::set "Quelle=W:\hPFC-Tool\Out\RETweb\Prognose\*.*"   
16.
::set "Ziel=W:\hPFC-Tool\Out\RETweb\Prognose\Monate"   
17.
 
18.
::set "Quelle=W:\hPFC-Tool\Out\RETweb\IntradayAfterday\Archiv\*.*"   
19.
::set "Ziel=W:\hPFC-Tool\Out\RETweb\IntradayAfterday\Monate"  
20.
 
21.
::set "Quelle=W:\hPFC-Tool\Out\DM\Archiv\*.*"   
22.
::set "Ziel=W:\hPFC-Tool\Out\DM\Monate"   
23.
 
24.
::set "Quelle=W:\hPFC-Tool\Out\RETweb\Back2Back\Old\*.*"   
25.
::set "Ziel=W:\hPFC-Tool\Out\RETweb\Back2Back\Monate"  
26.
 
27.
set "Log=U:\Daten_L\Datenpool\Komprimier_Test\Verlauf.log"   
28.
set "Err=U:\Daten_L\Datenpool\Komprimier_Test\Fehler.log"  
29.
set "Msg=U:\Daten_L\Datenpool\Komprimier_Test\MailService.vbs" 
30.
  
31.
::for /d %%i in ("%Ziel%\*.*") do rd "%%i"  
32.
  
33.
for /f "tokens=1-3 delims=. " %%a in ("%date%") do set "MonatAktuell=%%c-%%b"   
34.
del "%Log%" 2>nul   
35.
del "%Err%" 2>nul  
36.
for %%i in ("%Quelle%") do for /f "tokens=1-3 delims=. " %%a in ("%%~ti") do if "%%c-%%b" neq "%MonatAktuell%" (   
37.
md "%Ziel%\%%c-%%b\" 2>nul   
38.
move "%%i" "%Ziel%\%%c-%%b\" && (  
39.
    >>"%Log%" echo "%%i" nach "%Ziel%\%%c-%%b" verschoben  
40.
echo. 
41.
echo Daten wurden verschoben!  
42.
) || (  
43.
    >>"%Log%" echo Fehler beim Verschieben von "%%i" aufgetreten!  
44.
    >>"%Err%" echo Fehler beim Verschieben von "%%i" aufgetreten!  
45.
echo. 
46.
echo Datei "%%i" konnten nicht verschoben werden!  
47.
	)   
48.
49.
  
50.
pushd "%Ziel%"   
51.
for /d %%i in (*.*) do C:\Programme\WinRAR\WinRAR.exe m -ep -ilog%Err% "%%i.rar" "%%i\*.*" && (  
52.
    >>"%Log%" echo "%%i" wurde erfolgreich komprimiert!  
53.
    rd "%%i"  
54.
echo. 
55.
echo Daten wurden archiviert!  
56.
) || (  
57.
    >>"%Log%" echo Fehler beim Packen von "%%i" aufgetreten!  
58.
    >>"%Err%" echo Fehler beim Packen von "%%i" aufgetreten!  
59.
echo. 
60.
echo Datei "%%i" konnten nicht archiviert werden!  
61.
)  
62.
popd  
63.
 
64.
if exist "%Err%" (  
65.
   ::U:\Daten_L\Datenpool\Komprimier_Test\MailService.vbs 
66.
   cscript //nologo %Msg% "%Err%" 
67.
)
Bitte warten ..
Mitglied: bastla
25.05.2010 um 11:46 Uhr
Hallo chappy!

Die Logs werden bei jedem Start gelöscht (siehe Zeilen 34 und 35) - wenn also mehrere Durchläufe zusammengefasst werden sollen, darf das Löschen nur vor dem ersten erfolgen - auch das Versenden der Mail (ab Zeile 64) sollte dann nur einmal durchgeführt werden - bei meinem Vorschlag mit einem zweiten Batch sehr leicht zu realisieren, indem die angesprochenen Zeilen an Beginn bzw Ende dieses (zweiten) Batches verschoben werden.
In diesen Fällen wurden die Dateien nicht kopiert und nach dem ich überprüft habe, habe ich festgestellt, das diese alle von diesem Monat sind. ;ehr konnte ich nicht feststellen.
Das fiele ja eigentlich unter "works as designed" (wie Biber das zu formulieren pflegt) - es sollten ja die Dateien dieses Monats ausgespart werden ...

Grüße
bastla
Bitte warten ..
Mitglied: chappy
25.05.2010 um 12:29 Uhr
Zitat von bastla:

Das fiele ja eigentlich unter "works as designed" (wie
Biber das zu formulieren pflegt) - es sollten ja die Dateien
dieses Monats ausgespart werden ...

Das ist mir ja schon klar, nur dass dann eine Fehlermeldung ausgegeben wird, wo kein Fehler ist,, das war nicht gewollt! Verstehst du?

LG
chappy
Bitte warten ..
Mitglied: chappy
04.06.2010 um 16:02 Uhr
Hallo bastla,

kannst du mir nochmals sagen, wie ich das machen kann, wenn ich in verschiedenen Verzeichnissen archivieren möchte?

Oben im Code in der Zeile 3 bis 25 habe ich jeweils die Verzeichnisse, wo die Daten liegen und wohin das ganze gepackt werden soll. Ich habe diese bislang immer auskommentiert, bis ich alle durchlaufen lassen habe. Jetzt wollte ich nicht für jedes verzeichnis eine eigene Datei hinterlegen, daher meine Frage, wie soll ich das machen?

Wie ich dich verstanden habe, muss ich die Zeilen 3 bis 25 in eine eigene Verzeichnis.bat-Datei schreiben, oder? Wie sieht dann die Zeile 27 und 29 aus? die werden wohl auch in andere Verzeichnisse geschrieben, oder? Bekommt das Zeile 66 dann auch mit, in welchem verzeichnis der Fehler liegt? Könnest du mir bitte nochmals weiterhelfen?

Liebe Grüsse
chappy
Bitte warten ..
Mitglied: bastla
04.06.2010 um 18:50 Uhr
Hallo chappy!

Für das Übergeben von Quelle und Ziel bietet sich eine Konfigurationsdatei (siehe Variable %Pfade%) mit folgendem Aufbau an:
01.
U:\Daten_L\Datenpool\Komprimier_Test\Daten\*.*§U:\Daten_L\Datenpool\Komprimier_Test\Monate 
02.
W:\hPFC-Tool\Out\EHS\Archiv\*.*§W:\hPFC-Tool\Out\EHS\Monate 
03.
...§... 
04.
Letzte Quellenangabe§Letzter Zielpfad
Das Trennzeichen (im Batch die Variable %Delim%) "§" kannst Du selbst so wählen, dass es in keinem der Pfade vorkommt ("|" solltest Du zB dabei aber besser vermeiden).

Wenn gewährleistet wäre, dass der Ordner "Monate" immer "neben" dem Quellordner liegt, ließe sich das Ermitteln des Zielpfades zwar ebenfalls im Batch durchführen, aber mit der expliziten Angabe bleibst Du etwas flexibler ...

Ab Zeile 27 sähe der Batch dann (völlig ungetestet) so aus:
01.
set "Delim=§" 
02.
set "Pfade=U:\Daten_L\Datenpool\Komprimier_Test\Pfade.txt" 
03.
set "Log=U:\Daten_L\Datenpool\Komprimier_Test\Verlauf.log"   
04.
set "Err=U:\Daten_L\Datenpool\Komprimier_Test\Fehler.log"  
05.
set "Msg=U:\Daten_L\Datenpool\Komprimier_Test\MailService.vbs" 
06.
 
07.
for /f "tokens=1-3 delims=. " %%a in ("%date%") do set "MonatAktuell=%%c-%%b" 
08.
del "%Log%" 2>nul 
09.
del "%Err%" 2>nul 
10.
 
11.
:: Zusaetzliche Schleife über alle Zeilen der "Pfade"-Datei 
12.
:: %Quelle% wird dabei durch %%q\*.* und %Ziel% durch %%r ersetzt 
13.
for /f "usebackq tokens=1-2 delims=%Delim%" %%q in ("%Pfade%") do ( 
14.
    REM Nur bearbeiten, wenn auch ein Zielpfad vorhanden ist 
15.
    if "%%r" neq "" ( 
16.
        for %%i in ("%%q\*.*") do for /f "tokens=1-3 delims=. " %%a in ("%%~ti") do if "%%c-%%b" neq "%MonatAktuell%" ( 
17.
            md "%%r\%%c-%%b\" 2>nul 
18.
            move "%%i" "%%r\%%c-%%b\" && ( 
19.
                >>"%Log%" echo "%%i" nach "%%r\%%c-%%b" verschoben 
20.
                echo. 
21.
                echo Daten wurden verschoben! 
22.
            ) || ( 
23.
                >>"%Log%" echo Fehler beim Verschieben von "%%~fi" aufgetreten! 
24.
                >>"%Err%" echo Fehler beim Verschieben von "%%~fi" aufgetreten! 
25.
                echo. 
26.
                echo Datei "%%~fi" konnten nicht verschoben werden! 
27.
28.
29.
 
30.
        pushd "%%r" 
31.
        for /d %%i in (*.*) do C:\Programme\WinRAR\WinRAR.exe m -ep -ilog%Err% "%%i.rar" "%%i\*.*" && ( 
32.
            >>"%Log%" echo "%%~fi" wurde erfolgreich komprimiert! 
33.
            rd "%%i" 
34.
            echo. 
35.
            echo Daten wurden archiviert! 
36.
        ) || ( 
37.
            >>"%Log%" echo Fehler beim Packen von "%%~fi" aufgetreten! 
38.
            >>"%Err%" echo Fehler beim Packen von "%%~fi" aufgetreten! 
39.
            echo. 
40.
            echo Dateien in "%%~fi" konnten nicht archiviert werden! 
41.
42.
        popd 
43.
44.
45.
 
46.
if exist "%Err%" (  
47.
   ::U:\Daten_L\Datenpool\Komprimier_Test\MailService.vbs 
48.
   cscript //nologo %Msg% "%Err%" 
49.
)
Zu Zeile 15: Falls aus einer Zeile der "Pfade"-Datei nur ein einziger Pfad gelesen werden konnte (und daher die Variable %%r keinen Inhalt hat), wird die Verarbeitung übersprungen.
Bekommt das Zeile 66 dann auch mit, in welchem verzeichnis der Fehler liegt?
Zeile 66 gibt ja nur mehr aus, was in Zeile 44 bzw 57 in die Fehlerdatei geschrieben wurde - daher ist in diesen Zeilen anzusetzen, indem der komplette Pfad mit "%%~fi" erzeugt wird (alternativ wäre auch "%%r\%%i" möglich).

Grüße
bastla
Bitte warten ..
Mitglied: chappy
09.06.2010 um 12:22 Uhr
Hallo bastla,

sorry, dass ich mich später melde. ich habe mal das ganze nochmals angepasst und es sieht wie folgt aus:

Pfade.txt
01.
W:\DM\Out\Bestellbestaetigung\Gas\*.*§W:\DM\Out\Bestellbestaetigung\Gas\Archiv 
02.
 
03.
W:\DM\Out\Bestellbestaetigung\Strom\*.*§W:\DM\Out\Bestellbestaetigung\Strom\Archiv 
04.
 
05.
W:\DM\Out\EHS\Ablage\done\*.*§W:\DM\Out\EHS\Ablage\done\Archiv 
06.
 
07.
W:\DM\Out\iOPT\Original\Done\*.*§W:\DM\Out\iOPT\Original\Done\Archiv 
08.
 
09.
W:\hPFC-Tool\Out\DM\*.*§W:\hPFC-Tool\Out\DM\Archiv
MonatsarchivierungVariabel.bat
01.
@echo off & setlocal    
02.
 
03.
set "Delim=§"  
04.
set "Pfade=U:\Daten_L\Datenpool\Komprimier_Test\Pfade.txt"  
05.
set "Log=U:\Daten_L\Datenpool\Komprimier_Test\Verlauf.log"    
06.
set "Err=U:\Daten_L\Datenpool\Komprimier_Test\Fehler.log"   
07.
set "Msg=U:\Daten_L\Datenpool\Komprimier_Test\MailService.vbs"  
08.
 
09.
set /a Vormonate=1  
10.
  
11.
for /f "tokens=1-3 delims=. " %%a in ("%date%") do set "Monat=1%%b" & set "Jahr=%%c"  
12.
set /a Monat-=%Vormonate%  
13.
if %Monat% leq 101 (  
14.
    set /a Monat+=12  
15.
    set /a Jahr-=1  
16.
)  
17.
set "MonatAktuell=%Jahr%-%Monat:~-2%"  
18.
 
19.
del "%Log%" 2>nul  
20.
del "%Err%" 2>nul  
21.
  
22.
:: Zusaetzliche Schleife über alle Zeilen der "Pfade"-Datei  
23.
:: %Quelle% wird dabei durch %%q\*.* und %Ziel% durch %%r ersetzt  
24.
for /f "usebackq tokens=1-2 delims=%Delim%" %%q in ("%Pfade%") do (  
25.
    REM Nur bearbeiten, wenn auch ein Zielpfad vorhanden ist  
26.
    if "%%r" neq "" (  
27.
        for %%i in ("%%q\*.*") do for /f "tokens=1-3 delims=. " %%a in ("%%~ti") do if "%%c-%%b" neq "%MonatAktuell%" (  
28.
            md "%%r\%%c-%%b\" 2>nul  
29.
            move "%%i" "%%r\%%c-%%b\" && (  
30.
                >>"%Log%" echo "%%i" nach "%%r\%%c-%%b" verschoben  
31.
                echo.  
32.
                echo Daten wurden verschoben!  
33.
            ) || (  
34.
                >>"%Log%" echo Fehler beim Verschieben von "%%~fi" aufgetreten!  
35.
                >>"%Err%" echo Fehler beim Verschieben von "%%~fi" aufgetreten!  
36.
                echo.  
37.
                echo Datei "%%~fi" konnten nicht verschoben werden!  
38.
            )  
39.
        )  
40.
  
41.
        pushd "%%r"  
42.
        for /d %%i in (*.*) do C:\Programme\WinRAR\WinRAR.exe m -ep -ilog%Err% "%%i.rar" "%%i\*.*" && (  
43.
            >>"%Log%" echo "%%~fi" wurde erfolgreich komprimiert!  
44.
            rd "%%i"  
45.
            echo.  
46.
            echo Daten wurden archiviert!  
47.
        ) || (  
48.
            >>"%Log%" echo Fehler beim Packen von "%%~fi" aufgetreten!  
49.
            >>"%Err%" echo Fehler beim Packen von "%%~fi" aufgetreten!  
50.
            echo.  
51.
            echo Dateien in "%%~fi" konnten nicht archiviert werden!  
52.
        )  
53.
        popd  
54.
    )  
55.
)  
56.
  
57.
if exist "%Err%" (   
58.
   cscript //nologo %Msg% "%Err%"  
59.
)
wenn ich dann die bat starte, bekomme ich die Meldung:

U:\>U:\Daten_L\Datenpool\Komprimier_Test\MonatsarchivierungVariabel.bat
Das System kann den angegebenen Pfad nicht finden.

Dateien in "U:\Daten_L" konnten nicht archiviert werden!
Das System kann den angegebenen Pfad nicht finden.

Dateien in "U:\Daten_L" konnten nicht archiviert werden!

obwohl ich den Pfad U\Daten_L gar nicht archivieren möchte. Warum bekomme ich dann diese Meldung??

eine Weitere Frage zum Verständnis bzgl. Zeile 9:
"Vormonat=1" -> heisst es etwa, dass alle Daten archiviert werden, bis auf die vom Vormonat (jetzt Mai)? Und wenn Vormonat=3 heisst es dann, alle Daten bis März? Der April nicht mehr?

Bedanke mich vorab für deine Antwort und Mühe.

Gruss
chappy
Bitte warten ..
Mitglied: bastla
09.06.2010 um 13:09 Uhr
Hallo chappy!

Wenn es den angegebenen Pfad nicht gibt, wurde der aktuelle Pfad als Quelle verwendet - eine Ersetzung der Zeilen 41 bis 53 durch
01.
        if exist "%%r" ( 
02.
            pushd "%%r" 
03.
            for /d %%i in (*.*) do C:\Programme\WinRAR\WinRAR.exe m -ep -ilog%Err% "%%i.rar" "%%i\*.*" && (  
04.
                >>"%Log%" echo "%%~fi" wurde erfolgreich komprimiert!  
05.
                rd "%%i"  
06.
                echo.  
07.
                echo Daten wurden archiviert!  
08.
            ) || (  
09.
                >>"%Log%" echo Fehler beim Packen von "%%~fi" aufgetreten!  
10.
                >>"%Err%" echo Fehler beim Packen von "%%~fi" aufgetreten!  
11.
                echo.  
12.
                echo Dateien in "%%~fi" konnten nicht archiviert werden!  
13.
            )  
14.
            popd 
15.
        )
sollte das verhindern ...
"Vormonat=1" -> heisst es etwa, dass alle Daten archiviert werden, bis auf die vom Vormonat (jetzt Mai)?
Ja.
Und wenn Vormonat=3 heisst es dann, alle Daten bis März? Der April nicht mehr?
Auch der März nicht mehr (die 3 Vormonate Mai, April, März werden ausgelassen) ...

Grüße
bastla
Bitte warten ..
Mitglied: chappy
09.06.2010 um 14:28 Uhr
Hallo bastla,

danke für deine Antworten, aber scheint immer noch ein Wurm drin zu sein, denn bei der Ausführung passiert nichts, obwohl in einem Ordner noch Daten zum archivieren liegen.
So sieht der Code momentan aus. Habe ich noch irgentwo Klammern vergessen?

01.
@echo off & setlocal    
02.
 
03.
set "Delim=§"  
04.
set "Pfade=U:\Daten_L\Datenpool\Komprimier_Test\Pfade.txt"  
05.
set "Log=U:\Daten_L\Datenpool\Komprimier_Test\Verlauf.log"    
06.
set "Err=U:\Daten_L\Datenpool\Komprimier_Test\Fehler.log"   
07.
set "Msg=U:\Daten_L\Datenpool\Komprimier_Test\MailService.vbs"  
08.
 
09.
set /a Vormonate=1  
10.
  
11.
for /f "tokens=1-3 delims=. " %%a in ("%date%") do set "Monat=1%%b" & set "Jahr=%%c"  
12.
set /a Monat-=%Vormonate%  
13.
if %Monat% leq 101 (  
14.
    set /a Monat+=12  
15.
    set /a Jahr-=1  
16.
)  
17.
set "MonatAktuell=%Jahr%-%Monat:~-2%"  
18.
 
19.
del "%Log%" 2>nul  
20.
del "%Err%" 2>nul  
21.
  
22.
:: Zusaetzliche Schleife über alle Zeilen der "Pfade"-Datei  
23.
:: %Quelle% wird dabei durch %%q\*.* und %Ziel% durch %%r ersetzt  
24.
for /f "usebackq tokens=1-2 delims=%Delim%" %%q in ("%Pfade%") do (  
25.
    REM Nur bearbeiten, wenn auch ein Zielpfad vorhanden ist  
26.
    if "%%r" neq "" (  
27.
        for %%i in ("%%q\*.*") do for /f "tokens=1-3 delims=. " %%a in ("%%~ti") do if "%%c-%%b" neq "%MonatAktuell%" (  
28.
            md "%%r\%%c-%%b\" 2>nul  
29.
            move "%%i" "%%r\%%c-%%b\" && (  
30.
                >>"%Log%" echo "%%i" nach "%%r\%%c-%%b" verschoben  
31.
                echo.  
32.
                echo Daten wurden verschoben!  
33.
            ) || (  
34.
                >>"%Log%" echo Fehler beim Verschieben von "%%~fi" aufgetreten!  
35.
                >>"%Err%" echo Fehler beim Verschieben von "%%~fi" aufgetreten!  
36.
                echo.  
37.
                echo Datei "%%~fi" konnten nicht verschoben werden!  
38.
            )  
39.
        )  
40.
  
41.
if exist "%%r" (  
42.
            pushd "%%r"  
43.
            for /d %%i in (*.*) do C:\Programme\WinRAR\WinRAR.exe m -ep -ilog%Err% "%%i.rar" "%%i\*.*" && (   
44.
                >>"%Log%" echo "%%~fi" wurde erfolgreich komprimiert!   
45.
                rd "%%i"   
46.
                echo.   
47.
                echo Daten wurden archiviert!   
48.
            ) || (   
49.
                >>"%Log%" echo Fehler beim Packen von "%%~fi" aufgetreten!   
50.
                >>"%Err%" echo Fehler beim Packen von "%%~fi" aufgetreten!   
51.
                echo.   
52.
                echo Dateien in "%%~fi" konnten nicht archiviert werden!   
53.
            )   
54.
            popd  
55.
56.
     
57.
 
58.
  
59.
if exist "%Err%" (   
60.
   cscript //nologo %Msg% "%Err%"  
61.
)
Danke
Bitte warten ..
Mitglied: bastla
09.06.2010 um 15:31 Uhr
Hallo chappy!

Die schließenden Klammern der Zeilen 54 und 55 werden weiterhin benötigt.

Grüße
bastla
Bitte warten ..
Mitglied: chappy
09.06.2010 um 15:45 Uhr
Zeile 41 bis 55 sehen nun so aus, aber klappt immer noch net:

01.
if exist "%%r" (  
02.
            pushd "%%r"  
03.
            for /d %%i in (*.*) do C:\Programme\WinRAR\WinRAR.exe m -ep -ilog%Err% "%%i.rar" "%%i\*.*" && (   
04.
                >>"%Log%" echo "%%~fi" wurde erfolgreich komprimiert!   
05.
                rd "%%i"   
06.
                echo.   
07.
                echo Daten wurden archiviert!   
08.
            ) || (   
09.
                >>"%Log%" echo Fehler beim Packen von "%%~fi" aufgetreten!   
10.
                >>"%Err%" echo Fehler beim Packen von "%%~fi" aufgetreten!   
11.
                echo.   
12.
                echo Dateien in "%%~fi" konnten nicht archiviert werden!   
13.
            )   
14.
	popd ) 
15.
))
Bitte warten ..
Mitglied: bastla
09.06.2010 um 15:59 Uhr
Hallo chappy!

Neuer Versuch (diesmal gleich der gesamte Block ab Zeile 24):
01.
for /f "usebackq tokens=1-2 delims=%Delim%" %%q in ("%Pfade%") do ( 
02.
    REM Nur bearbeiten, wenn auch ein Zielpfad vorhanden ist 
03.
    if "%%r" neq "" if exist "%%r" ( 
04.
        for %%i in ("%%q\*.*") do for /f "tokens=1-3 delims=. " %%a in ("%%~ti") do if "%%c-%%b" neq "%MonatAktuell%" ( 
05.
            md "%%r\%%c-%%b\" 2>nul 
06.
            move "%%i" "%%r\%%c-%%b\" && ( 
07.
                >>"%Log%" echo "%%i" nach "%%r\%%c-%%b" verschoben 
08.
                echo. 
09.
                echo Daten wurden verschoben! 
10.
            ) || ( 
11.
                >>"%Log%" echo Fehler beim Verschieben von "%%~fi" aufgetreten! 
12.
                >>"%Err%" echo Fehler beim Verschieben von "%%~fi" aufgetreten! 
13.
                echo. 
14.
                echo Datei "%%~fi" konnten nicht verschoben werden! 
15.
16.
17.
 
18.
        pushd "%%r" 
19.
        for /d %%i in (*.*) do C:\Programme\WinRAR\WinRAR.exe m -ep -ilog%Err% "%%i.rar" "%%i\*.*" && ( 
20.
            >>"%Log%" echo "%%~fi" wurde erfolgreich komprimiert! 
21.
            rd "%%i" 
22.
            echo. 
23.
            echo Daten wurden archiviert! 
24.
        ) || ( 
25.
            >>"%Log%" echo Fehler beim Packen von "%%~fi" aufgetreten! 
26.
            >>"%Err%" echo Fehler beim Packen von "%%~fi" aufgetreten! 
27.
            echo. 
28.
            echo Dateien in "%%~fi" konnten nicht archiviert werden! 
29.
        )  
30.
        popd 
31.
32.
33.
  
34.
if exist "%Err%" (   
35.
   cscript //nologo %Msg% "%Err%"  
36.
)
Grüße
bastla
Bitte warten ..
Mitglied: chappy
09.06.2010 um 16:22 Uhr
in der pfade.txt steht:
01.
W:\DM\Out\Bestellbestaetigung\Gas\*.*§W:\DM\Out\Bestellbestaetigung\Gas\Archiv 
02.
 
03.
U:\Daten_L\Datenpool\Komprimier_Test\Daten\*.*§U:\Daten_L\Datenpool\Komprimier_Test\Archiv 
04.
 
05.
W:\DM\Out\Bestellbestaetigung\Strom\*.*§W:\DM\Out\Bestellbestaetigung\Strom\Archiv 
06.
 
07.
W:\DM\Out\EHS\Ablage\done\*.*§W:\DM\Out\EHS\Ablage\done\Archiv
und in zweiten Pfad befinden sich Daten, die archiviert werden müssten, aber da passiert nichts, wieso?

Gruss
chappy

AHHHH, habs gefunden: die *.* waren noch zu viel, da kann der Pfad nicht gefunden werden!!!! Aber da scheint ein Fehler noch zu sein. Es werden zwar die Daten vom Vormonat ausgelassen, aber die von diesem Monat werden archiviert, was nicht sein darf!!! in welcher Zeile ist das? Vormonat <=1
Bitte warten ..
Mitglied: bastla
09.06.2010 um 16:45 Uhr
Hallo chappy!

Zuerst: Sorry wegen der bösen Falle mit "*.*" ...
In Zeile 27 ist "neq" durch "lss" zu ersetzen.

Grüße
bastla
Bitte warten ..
Mitglied: chappy
09.06.2010 um 17:02 Uhr
Hey bastla,

ach gar kein Thema, haben wir ja dank dem echo gefunden Ja soweit sieht es mal super aus!

Ein super herzlöiches Dankeschön. Ich muss den Code nochmals studieren, um mit bat arbeiten zu können. Aber ich denke ich werde bestimmt irgenntwann wieder deine Hilfe brauchen. Echt supper support, weiter so!

Knuddel
chappy
Bitte warten ..
Mitglied: chappy
14.06.2010 um 11:29 Uhr
Hallo bastla,

habe noch eine Frage:

wenn ich das echo on mal einschalte, dann sehe ich in der cmd, das auch versucht wird, die dateien aus dem Mai zu verschieben, was dann fehlschlägt, ist das normal? packt die batch jede einzelne Datei an und prüft, ob die im jeweiligen Gültigkeitsbereich (Datum) liegt? ist es deswegen, warum es dann lange dauert? wenn ich nämlich echo off mache, dann sieht man gar nichts und man hat den Eindruck, dass gar nicht gearbeitet wird.

gruss
chappy
Bitte warten ..
Mitglied: bastla
14.06.2010 um 11:42 Uhr
Hallo chappy!
packt die batch jede einzelne Datei an und prüft, ob die im jeweiligen Gültigkeitsbereich (Datum) liegt?
Ja - geht leider nicht anders ...
wenn ich nämlich echo off mache, dann sieht man gar nichts und man hat den Eindruck, dass gar nicht gearbeitet wird.
Du könntest der Zeile
for %%i in ("%%q\*.*") do for /f "tokens=1-3 delims=. " %%a in ("%%~ti") do if "%%c-%%b" neq "%MonatAktuell%" (
noch einen "else"-Zweig (in meinem letzten Codeschnipsel müsstest Du dazu die Zeile 16 etwa durch
01.
) else ( 
02.
echo Nicht bearbeitet: %%c-%%b-%%a_%%i 
03.
)
ersetzen) spendieren - schneller wird's damit aber sicher nicht ...

Grüße
bastla
Bitte warten ..
Mitglied: chappy
14.06.2010 um 12:19 Uhr
ja super, jetzt weiss man wenigstens, dass sich das Prog nicht irgenntwo aufgehängt hat. Dank dir.

chappy

PS. das es nicht schneller sein wird, das war mir schon klar, nur man weiss ja nie, wer davor sitzt und was Mann/Frau sich dann denkt, wenn nichts passiert

liebe Grüsse
chappy
Bitte warten ..
Mitglied: chappy
25.06.2010 um 11:20 Uhr
Hallo bastla,

wie sieht es eigentlich aus, wenn ich eine Datei von vom heutigen Tag im Ordner A ermitteln möchte und in den Ordner B kopieren möchte?
Hab bei dir abgeschaut aber bekomme folgenden Fehler:
C:\Temp\Heute.vbs(1, 1) Laufzeitfehler in Microsoft VBScript: Falsche Anzahl an Argumenten oder ungültige Eigenschaftszuweisung: 'dateAdd'

01.
::---CopyVonHeute.bat  
02.
@echo off & setlocal  
03.
set "Quelle=\\server1\rechner1\*.csv"   
04.
set "Ziel=\\server2\rechner2\test"   
05.
 
06.
echo wscript.echo dateAdd("d", date())>%temp%\Heute.vbs  
07.
For /f %%i in ('cscript //nologo %temp%\Heute.vbs') do set "Heute=%%i"  
08.
del %temp%\Heute.vbs  
09.
@for /f "tokens=4,*" %%i in ('dir /A:-d "%Quelle%" ^|find "%Heute%"') do copy "%Quelle%\%%i" "%Ziel%"  
10.
::----CopyVonHeute.vbs
Gruss
Bitte warten ..
Mitglied: bastla
25.06.2010 um 12:26 Uhr
Hallo chappy!

Das VBScript heiße zwar "Heute", ist aber dafür gedacht, ein Datum für eine bestimmte Anzahl von Tagen vor oder nach dem aktuellen Datum zu ermitteln (und bräuchte dafür einen zusätzlichen Parameter) - daher genügt:
01.
::---CopyVonHeute.bat  
02.
@echo off & setlocal  
03.
set "Quelle=\\server1\rechner1\*.csv"   
04.
set "Ziel=\\server2\rechner2\test"   
05.
set "Heute=%date%" 
06.
 
07.
for /f "tokens=3,*" %%i in ('dir /a-d "%Quelle%" ^|find "%Heute%"') do copy "%Quelle%\%%j" "%Ziel%"  
08.
::----CopyVonHeute.bat
Wie Dir vielleicht aufgefallen ist, habe ich die Aufteilung der "dir"-Zeile so angepasst, dass auch Dateinamen mit Leerzeichen richtig verarbeitet werden ...

Grüße
bastla
Bitte warten ..
Neuester Wissensbeitrag
Heiß diskutierte Inhalte
LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (18)

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

Windows Netzwerk
Windows 10 RDP geht nicht (18)

Frage von Fiasko zum Thema Windows Netzwerk ...

Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...