101.
Archivierung
Einleitung
Nachtrag 07.08.2012. Die Batch hat nun im Projekt Merlin eine
grafische Oberfläche bekommen und kann nun als veraltet betrachtet
werden. Zudem wird die Bearbeitung der Batch in Merlin in einen extra
Ordner ausgeführt. Der Sternenhimmelstuermer empfiehlt Merlin zu
verwenden - da der Sternenhimmelstuermer aus seinem Web-Tagebuch
generell nichts löscht, bleibt die Abhandlung zum Verständnis für Leser
der Batch bestehen.
Der
Umzug zu Windows 8 steht bald für viele User vor der Tür - Ausnahmen
wie der Sternenhimmelstuermer bestätigen da eher die Regel.
Der Sternenhimmelstuermer schrieb
bereits eine
Batch
wider dem Vergessen, die leider viele Mängel aufwies. Dateien
mit
Leerzeichen im Namen, ü,ä usw. wurden nicht berücksichtigt.
Also
schrieb der Sternenhimmelstuermer zwei neue Batchdateien, die nun bis
zu 98 % aller Dateien nach Jahreszahl in neuen Ordnern/Verzeichnissen
archivieren, die automatisch erstellt werden. Unterverzeichnisse/Ordner
werden dabei wieder selbstverständlich erfasst. Die Selektion erfolgt
nach Dateiendungen (doc,
pdf, Jpg, mp3 - eben
alle, die es gibt und die
Sie eingeben oder durch Setzung einer Wildcard für alle Dateien (*).
Das
Ganze mit Kopien, also weiterhin absolut safe. Adäquate Software kostet
so um die 15 € und ist zwar einfacher zu bedienen, aber nicht viel
genauer...
Erstmal
für den Laien eine kurze Erklärung und für Fortgeschrittene eine
Kurzbeschreibung der Arbeitsschritte. Anfänger dürften wenig mit
Erklärungen anfangen können, also diesmal etwas kürzer.
Inhaltsangabe
Einleitung
Batchdateien und Erklärung für Anfänger
Erklärung für Fortgeschrittene
Fazit
Batchdateien und Erklärung für Anfänger
Superkurze
Erklärung für Leute ohne Zeit und mit Batchgrundkenntnissen: Beide u.
a. blaue Batchtexte in jeweils eine Textdatei kopieren und in einen leeren Ordner legen. Dann in archiv.bat und bereinigung.bat ... umbenennen (der Name von bereinigung.bat ist vorgeschrieben). Danach die archiv.bat
mit Doppelklick starten. Nach erster Abfrage Dateiendung ohne Punkt
eingeben - Enter mit Eingabetaste. Dann Pfad zum Quellordner bei der ersten
Abfrage eingeben (Unterordner werden automatisch erfasst) Enter mit
Eingabetaste.
Vorsicht : Hier muss ein DOS-konformer Eintrag gewählt werden. Daher
ist es nicht dumm die Batch z. B. in einen Unterordner von C:\ mit
Namen Archiv zu legen.
Dann Pfad zu den Batchdateien eingeben - mit Enter bestätigen. Dann höchste Jahr vierstellig
eingeben...dann die Anzahl der gewünschten Jahre. Für Jedes Jahr wird
ein Ordner erstellt mit entsprechenden Dateien aus diesem Jahr. Dauert
bei größeren Umfang. Es werden Kopien erstellt - alte Dateien werden
nicht gelöscht oder verändert...Zu schnell? Wird jetzt nochmal gaaanz
laaangsam erklärt -:)
Vorsicht alle txt und log- Dokumente im neu angelegten Odner, in dem die Batches liegen (im o. a. c:\Archiv), werden gelöscht! Des weiteren nicht archivierte Dateien - also wirklich
einen möglichst leeren Ordner für die Batches auswählen..
Batchdateien-Code:
Dateiname:
Archiv.bat
-Name fakultativ änderbar
Inhalt:
set /p ende=Geben Sie die
Dateiendung ohne Punkt ein!
set /p quelle=Geben Sie den
Quellpfad ein!
set /p standort=Geben Sie
den Pfad zum Standort dieser Batchdatei an!
chcp 28591 > NUL
FOR /R "%quelle%" %%I IN
(.) DO xcopy "%%I\*.%ende%" %standort% /Y /V /I /D
CALL bereinigung.bat %1 A:
chcp 28591 > NUL
for %%f in
("%standort%\*.%ende%") do @echo %%f %%~ntf
>>test.html
set /p zeit=Geben Sie das
höchste Jahr vierstellig ein!
set /p zeitraum=Geben Sie
an, wieviel Jahre archiviert werden sollen!
set /a end=%zeit%-%zeitraum%
chcp 28591 > NUL
FOR
/F "Tokens=1,2,3,4" %%i in (test.html) do vo >%%l_%%j.log
&
>>"%standort%\%%l_%%j.log" Echo chcp 28591 ^> NUL
&
>>"%standort%\%%l_%%j.log" Echo xcopy /i /k /d /y %%i
%standort%\%zeit%
mkdir "%zeit%"
goto erste
:schleife
set /a zeit=%zeit%-1
del *.log
chcp 28591 > NUL
FOR
/F "Tokens=1,2,3,4" %%i in (test.html) do vo >%%l_%%j.log
&
>>"%standort%\%%l_%%j.log" Echo chcp 28591 ^> NUL
&
>>"%standort%\%%l_%%j.log" Echo xcopy /i /k /d /y %%i
%standort%\%zeit%
mkdir "%zeit%"
:erste
chcp 28591 > NUL
if exist
%standort%\**.**.%zeit%.log (xcopy /i /k /d /y
%standort%\**.**.%zeit%.log %standort%\*.txt) else goto weiter
chcp 28591 > NUL
for /f "TOKENS=*" %%a in
('dir **.**.%zeit%.txt /b') do type "%%a" >>
ergebnis_%zeit%.bat
start /wait cmd /c
"ergebnis_%zeit%.bat"
del ergebnis_%zeit%.bat
:weiter
if %zeit% equ %end% goto
ende
goto schleife
:ende
del *.txt
del *.log
del *.%ende%
exit
Die Batch sollte in einem Unterordner von C: mit einfachen Namen wie
Archiv mit der anderen folgenden Batch abgelegt werden - z. B. mit dem
einfachen Namen Archiv. Llieber risikolos...
Zweite
Batch
Dateiname:
bereinigung.bat
-
Name nur nach Änderung des Befehls: CALL bereinigung.bat
%1 A: in der Archiv.bat möglich - einfach das Wort
bereinigung tauschen und ohne Leerstelle .bat einfügen...
Alles andere unverändert lassen...
Inhalt:
@echo off & setlocal
FOR %%i in ( "%standort%\*
*.%ende%") do call :Nameneu "%%~nxi"
goto :eof
:Nameneu
Set "urname=%~1"
Set "neu=%urname: =_%"
Ren "%standort%\%urname%"
"%neu%"
goto :eof
Erklärung:
Als
erstes erstellen Sie mit dem Editor zwei Batchdateien:
Zur
Erstellung einer Batch (*.bat)
brauchen Sie nur bordeigene Mittel
(Texteditor)
1.
Als Vorraussetzung müssen Sie sich bekannte Dateiendungen anzeigen
lassen: beliebigen Ordner öffnen: Organisieren -
Layout
- Menüleiste
auswählen. In der Menüleiste: Extras - Ordneroptionen
- Reiterkarte
Ansicht:
Dort Häkchen entfernen bei: Erweiterungen
bei bekannten
Dateitypen ausblenden.
2. Nun auf dem
Desktop oder
in einem Ordner mit rechter Maustaste auf freie Fläche drücken und neu
- Textdokument auswählen.
3.
Neues Textdokment
öffnen (linker Doppelmausklick) und den o. a. Code durch kopieren über
die Zwischenablage einfügen
4.
Danach schließen. Abfrage mit Speichern mit ja beantworten.
5.
Danach beliebigen Namen für die Archiv.bat
vergeben - nur die Endung .bat
ist
vorgeschrieben - z. B- sortieren.bat, genial.bat...
Denselben
Vorgang für die Datei bereinigung.bat:
Bei
der zweiten Batch ist der Name bereinigung.bat vorgeschrieben
- sollten Sie den Namen anpassen wollen, dann die Haupt-Archiv.bat
ändern:
bereinigung.bat
- Name nur nach Änderung des Befehls: CALL bereinigung.bat
%1 A: in der Archiv.bat
möglich - einfach das Wort bereinigung
tauschen und ohne Leerstelle .bat
einfügen... Alles andere unverändert lassen...
6. Danach müssen die beiden
Batch-Dateien in denselben leeren Zielordner verschoben werden.
Sollten
Textdokumente *.txt
oder Log-Dateien *.log
in diesem Ordner sein so werden sie
unwiederbringlich zerstört!
7. Mit Doppelklick die Archiv.bat starten:
Es
öffnet sich ein Kommandozeilenfenster und bei folgenden Fragen müssen
beantwortet werden:
A) Geben Sie die Dateiendung
ohne Punkt ein!
pdf, doc ( docx
werden automatisch miterfasst), JPG.....Ist so
ziemlich egal, welchen Dateityp Sie eingeben. Für alle Dateien einfach
einen Stern *
eingeben. Vorsicht! Textdokumente (*.txt) und Logdateien
(*.log) werden bei der Variante mit dem Stern für sämtliche
Dateien vernichtet...Warum? wird unter Troubleshooting erklärt...
Jede Eingabe wird durch
Betätigen der Return/Eingabetaster abgeschlossen!
B)
Geben Sie den
Quellpfad ein!
Hier geben Sie den Pfad
aus dem Windowsexplorer in der Regel ein - siehe Troubleshooting!
Bitte
nicht den Bibliothekenpfad, sondern den Originalpfad. Am besten
über Computer
durchhangeln....
C) Geben Sie den Pfad zum
Standort dieser Batchdatei an!
Hier
wird der Pfad zum Ordner mit den beiden Batchdateien eingetragen. Mit
Kopieren des Pfades aus dem Explorer liegen Sie immer richtig.
Ausnahme:
Ganzes Laufwerk ist natürlich auch möglich: Einfach nur c: eingeben,
also nicht c:\
Schrägstriche
werden in der Batch immer automatisch gesetzt. Deshalb ergibt die
Eingabe c:\
für die Batch dann irgendwann c:\\,
was nicht funktioniert.
Nach
diesen Eingaben kommt der erste Arbeitsdurchgang. Sämtliche Dateien mit
einer Dateiendung werden in den Ordner der beiden Batches kopiert. Auch
die Dateien der Unterordner. Das kann je nach Anzahl der Dateien eine
Weile dauern. Beim Laufwerk auch 20 - 30 Minuten...und länger
Bei
Dubletten wird die Datei mit dem neueren Datum kopiert.
Dann findet
erstmal eine Bereinigung statt: Alle Leerzeichen der
Dateinamen werden bereinigt und ein Unterstrich eingefügt. Das ist
ABSOLUT NOTWENDIG; da die Dateien sonst später nicht bearbeitet werden
können - Dieser Vorgang, der durch die bereinigung.bat
automatisch an dieser Stelle durchgeführt wird,
dauert nur einen kurzen Momment. Dann wird noch eine Liste mit
sämtlichen Dateien angelegt. Das kostet nur auch wenige KB Platz...
Sie
haben nun einen Ordner mit sämtlichen Dateien mit Dateinamen ohne
Leerzeichen. Außerdem eine Textdatei mit sämtlichen Angaben der
kopierten Dateien.
Nun noch zwei letzte Eingaben:
D)
set /p zeit=Geben
Sie das höchste Jahr vierstellig ein!
Sie
können auch nur alte Dateien archivieren lassen. Wenn Sie 2012
eingeben, dann erfassen Sie alle Dateien.
E) Geben Sie an, wieviel Jahre
archiviert werden sollen!
Geben
Sie hier z. B. eine 20 ein, dann werden im Ordner der beiden Batches 20
Ordner nach dem Schema 2012, 2011,2010 ....1992 angelegt.
In
diese werden die Dateien nach Jahrgang verschoben. Entscheidend ist das
Erstelldatum
der Datei.
Sie
können die Batch übrigens im selben Ordner beliebig oft ausführen. Neue
Ordner oder Dateien werden ergänzt, die alten Dateien und Ordner
bleiben erhalten. neue Ordner werden nicht angelegt, wenn Sie bereits
existieren. Sie bekommen eine entsprechende Warnung. Ansonsten werden
alte gegen neue Dateien ausgetauscht...
Die Batch
ist schon genial - jahrelange Unordnung innerhalb von ca. einer halben
Stunde Arbeit bereinigt...
Troubleshooting:
1)
Aller Anfang ist schwer: Quell-
und Zielpfad
müssen DOS-kompatibel sein. Das ist in der Regel der Fall.
Nehmen
Sie es einfach hin, dass Quellpfad und Zielpfad in der Grundeingabe
keine Leerzeichen enthalten dürfen. Danach ist das egal! Ist der
Einstieg gelungen, dann können die Unterordner, in dem die zu
sortierenden Dateien liegen, beliebig viele ä,ü und Leerzeichen
enthalten.
2) Haben Sie in ihrem Benutzerkonto einen
Doppelnamen eingetragen, dann ist der Pfad zum Desktop nicht
Dos-kompatibel.
In
diesem Falle gehen Sie in der Ordnerhierarchie eine Ebene höher als der
Ordner mit dem Doppeknamen mit Leerzeichen liegt, rufen
in der cmd dir /x
auf und notieren sich den Dosordnernamen in der Dateiliste... Betrifft
nur eine
Minderheit wie den Autor dieses Artikels, der mit Absicht einen
Doppelnamen vergab, um immer wieder beim Batch-schreiben daran erinnert
zu werden...
Bei der Bereinigung werden Leerzeichen
in Dateinamen von den kopierten Dateien durch einen Unterstrich _
ersetzt.
Keine
Sorge, es wird nur mit Kopien gearbeitet - ihre Originaldateien wurden
nicht verändert. Gleichwohl ist es nur so mit einer Batch möglich
Dateien zu verschieben....
3)
Ä,Ü,Ö.... in Dateinamen spielen hingegen keine Rolle und die Namen
werden auch nicht verändert - eines der kleineren Probleme.
4)
Größere Videodateien sind ein No Go. Platzmangel, Zeitaufwand...
5)
Textdateien und Logdateien werden im Kopierordner zerstört. Im Laufe
der Bearbeitung wurden je nach Anzahl der kopierenden Dateien unzählige
Dokumente angelegt, die dann aus ästhetischen Gründen gelöscht werden
müssen.
Wer etwas tiefer einsteigen will, der lese
sich die
Abhandlung über die Batch
wider des Vergessens oder die folgenden
Erklärungen durch, die in dieser Abhandlung ein wenig kürzer sind.
Erklärung für Fortgeschrittene
Es
geht hier nur um Beschreibungen auf der Metaebene - Anfänger werden
sich wohl kaum auf ein solches Projekt einlassen - daher ein wenig
kürzer:
set
/p ende=Geben Sie die Dateiendung ohne Punkt ein!
set /p quelle=Geben Sie den
Quellpfad ein!
set /p standort=Geben Sie
den Pfad zum Standort dieser Batchdatei an!
Mit
den Eingaben des Users werden Variablen gesetzt.
chcp 28591 > NUL
Ä,Ü,
Ö und ß werden für den folgenden Befehl kompatibel gemacht - lieber
einmal zuviel als zu wenig.
FOR /R "%quelle%" %%I IN
(.) DO xcopy "%%I\*.%ende%" %standort% /Y /V /I /D
Mit
der For-Schleife werden sämtliche Dateien mit einer Dateiendung in
Ordnern und Unterordnern im Quellpfad kopiert. Die Parameter von Xcopy
stehen in der Hilfe cmd xcopy
/?
For /R ist für die Suche in den Unterordnern/Verzeichnissen zuständig.
Es werden nur Kopien gemacht.
Auch von den Unterordnern
CALL bereinigung.bat %1 A:
Die
Batch zur Bereinigung der Leerzeichen wird aufgerufen, die
Variableninhalte der Batch zur Verfügung gestellt...
for %%f in
("%standort%\*.%ende%") do @echo %%f %%~ntf
>>test.html
Die vorherige for- Schleife wäre nicht fähig in Unterverzeichnissen zu
arbeiten - daher die Kopierfunktion vorher. Es wird ein Listendokument
mit Dateipfad und Erstelldatum...erstellt. %~ntf
ist der Hammer und eine Kreation des Sternenhimmelstuermers. In der
nächste For-Schleife gehen wir dann ins Detail!!! Jetzt nur so weit.
Wir brauchen eine Liste mit Namen, Pfad und Zeit, die in ein Dokument
namens test.html geschrieben wird...
set /p zeit=Geben Sie das
höchste Jahr vierstellig ein!
set /p zeitraum=Geben Sie
an, wieviel Jahre archiviert werden sollen!
set /a end=%zeit%-%zeitraum%
Neue
Variablen werden geschaffen. Mit set /a
wird die niedrigste Jahreszahl
berechnet. Bei 2012 und 20 Jahre also 1992 als niedrigste Zahl
berechnet. Wozu? Wird später in einer Schleife abgeabeitet, um in jeden
Ordner mit Jahreszahl (Ordner wird in Schleife erstellt) die
zugehörigen Dateien zu kopieren...
chcp 28591 > NUL
FOR
/F "Tokens=1,2,3,4" %%i in (test.html) do vo >%%l_%%j.log
&
>>"%standort%\%%l_%%j.log" Echo chcp 28591 ^> NUL
&
>>"%standort%\%%l_%%j.log" Echo xcopy /i /k /d /y %%i
%standort%\%zeit%
Nachdem ä, ü, ö
wieder durch chcp
erlaubt wird, wird nun die erstellte html-Seite
ausgewertet:
Anhand
dieser For -
Stapelverarbeitung kann der Sternenhimmelstuermer nun
demonstrieren, warum die Vorschleife mit %%~ntf so
genial ist. Sie haben nun auf diese Daten nämlich mit weiteren For -
Befehlen unbeschränkten Zugriff!
"Tokens=1,2,3,4"steht
auch in der Hilfe, wird hier aber ausgeführt. For hat eine
Unmenge Optionen - eine heißt
tokens. Jede Zeile in (test.html)
wird in tokens
eingeteilt.
In unserem Fall Tokens
1= kompletter Dateipfad Trennung (delims/Trennzeichen
ist automatisch
ein Leerzeichen, es sei denn es wird durch die Option delims ein
anderes bestimmt, aber das ist eine andere Geschichte...) 2=Datum
3=Uhrzeit und 4= Dateiname.
Die
werden jetzt do vo
- Vo ist
eine sinnlose Silbe und Erfindung des
Sternenhimmelstuermers - da hätte auch nothing stehen
können. Es geht
nur darum, in jeder Zeile des Dokumentes (test.html) die
wichtigen
Daten auszulesen und eine Logdatei zu erschaffen, die als
Überschrift den Dateinamen (tokens l) und das
Datum (tokens j)
hat, also in der Art: beliebigerName_18.03.2011.log.
Das entscheidende
kommt jetzt mit &
>> Werden nun Zeilen in die
Logdatei geschrieben. &
>> leitet immer eine neue Zeile ein.
Wozu?
Es wird der Text für eine Batch erstellt. Die Logdateien
transportieren immer für eine Datei die Befehlszeilen zum kopieren. Die
werden dann später in einer Batch zusammengefasst und diese
ausgeführt...
Die einzelnen Zeilen sind leicht
verständlich:
Erstmal wird wieder der Befehl für ä,ö usw. Exportiert. In der nächsten
Zeile der xcopy
Befehl mit Parametern Quelle und Ziel - nichts
besonderes. Für jede Zeile eine Logdatei...
mkdir "%zeit%"
Der
erste Ordner wird erstellt - z. B. 2012
goto erste
Die
nächsten Zeilen werden übersprungen. Die erste Bearbeitung funktioniert
im Prinzip wie die folgenden, nur das die folgenden Befehle in einer
sich immer wiederholenden Schleife liegen. Folgen wir der Bearbeitung
der Batch und springen synchron zur Sprungmarke : erste - das
ist für
Sie einfacher:
:erste
chcp 28591 > NUL
if exist
%standort%\**.**.%zeit%.log (xcopy /i /k /d /y
%standort%\**.**.%zeit%.log %standort%\*.txt) else goto weiter
chcp 28591 > NUL
for /f "TOKENS=*" %%a in
('dir **.**.%zeit%.txt /b') do type "%%a" >>
ergebnis_%zeit%.bat
start /wait cmd /c
"ergebnis_%zeit%.bat"
del ergebnis_%zeit%.bat
:weiter
Beim
ersten Durchgang springt also die Batch zur Sprungmarke :erste
if exist
%standort%\**.**.%zeit%.log (xcopy /i /k /d /y
%standort%\**.**.%zeit%.log %standort%\*.txt) else goto weiter
Der
if exist
- Befehl prüft, ob überhaupt eine Logdatei für das höchste
eingegebene Jahr erstellt wurde, die das Schema Dateiname_Erstelldatum
aufweist. Existiert keine solche Datei, dann wird zu einer Prüfung
gesprungen, ob noch weitere niedrige Jahrgänge vorliegen (:weiter) und
nichts kopiert.
Ist
also eine Logdatei mit dem Zeitpunkt 2012 dabei (wenn der User 2012
eingab), dann wird ein Textdokument aus der Logdatei durch den
Xcopy-Befehl erstellt und der nächste Befehl bearbeitet, der bei
Nichtexistenz einerLogdatei übersprungen worden wäre.
for /f "TOKENS=*" %%a in
('dir **.**.%zeit%.txt /b') do type "%%a" >>
ergebnis_%zeit%.bat
Dieser
Befehl gibt ein wenig mehr Klarheit, warum eine Textdatei aus der
Logdatei für das Jahr 2012 erstellt wurde. Denn alle Textdokumente des
Jahres 2012 werden nun in einer Batchdatei Ergebnis_**.**.2012.bat
zusammengefasst.
start /wait cmd /c
"ergebnis_%zeit%.bat"
Wir
starten nun die Ergebnis...bat
und warten, bis alle Dateien kopiert
wurden, die in den Ordner 2012 gehören. Danach wird die Batch zerstört (del ergebnis_%zeit%.bat ).
Deshalb zur Sicherheit das Warten auf die Ausführung mit dem Wait -
Befehl:
Zusammenfassung was bisher geschah: Dateien
wurden von
einem Quellverzeichnis in ein Zielverzeichnis (relativ zur Batch)
kopiert. Die Leerzeichen wurden durch die Bereinigungsbatch in den
Dateinamenüberschriften durch einen Unterstrich bereinigt. Die
kopierten und bereinigten Dateien wurden in einer HTML-Liste
erfasst.
Die Liste wurde ausgelesen und für jede Zeile (also kopierte Datei)
eine Logdatei mit Befehlssatz zum kopieren erstellt. Der Dateiname der
Logdatei beinhaltete immer das Erstelldatum. Das höchste eingegebene
Erstelldatum wurde abgeglichen. Existiert eine Datei mit z. B.
Name_**.**.2012.log,
so wird diese Jahrgangsdatei in eine Textdatei mit
gleichen Dateinamen konvertiert. Sämtliche Textdateien werden in einer
Batch zusammengefasst, die also den Befehlssatz zum kopieren jeder
einzelnen Logdatei enthält- Die Batchdatei wird ausgeführt und alle
Dokumente mit der Dateiendung, die der User Eingab, werden in den
Ordner 2011 kopiert, der zuvor erstellt wurde.
:weiter
if %zeit% equ %end% goto
ende
goto schleife
Das
höchste Datum wurde abgearbeitet . Wenn nun diese Zeit dem
Ergebnis der höchsten Zeit - dem Zeitraum, den der User eingab
entspräche, würde die Batch zum Ende springen, also z. B. 2012 - 20 Jahre= 1992
. Da sind wir aber noch nicht. Das war ja der erste Durchgang - also
wird der nächste goto
schleife Befehl erreicht und wir springen rückwärts:
Zur
Erinnerung nochmal die Befehle ab der Schleife:
:schleife
set /a zeit=%zeit%-1
del *.log
chcp 28591 > NUL
FOR
/F "Tokens=1,2,3,4" %%i in (test.html) do vo >%%l_%%j.log
&
>>"%standort%\%%l_%%j.log" Echo chcp 28591 ^> NUL
&
>>"%standort%\%%l_%%j.log" Echo xcopy /i /k /d /y %%i
%standort%\%zeit%
mkdir "%zeit%"
:erste
Ab
erste: waren wir zuvor - wir sind nun im zweiten Durchgang.
set /a zeit=%zeit%-1
Das
Datum wird nun um ein Jahr - in unserem Beispiel bei 2012 auf 2011
zurückgestellt.
del *.log
Die
alten Logdateien werden zerstört.
chcp 28591 > NUL
FOR
/F "Tokens=1,2,3,4" %%i in (test.html) do vo >%%l_%%j.log
&
>>"%standort%\%%l_%%j.log" Echo chcp 28591 ^> NUL
&
>>"%standort%\%%l_%%j.log" Echo xcopy /i /k /d /y %%i
%standort%\%zeit%
mkdir "%zeit%"
:erste
chcp 28591 > NUL
if exist
%standort%\**.**.%zeit%.log (xcopy /i /k /d /y
%standort%\**.**.%zeit%.log %standort%\*.txt) else goto weiter
chcp 28591 > NUL
for /f "TOKENS=*" %%a in
('dir **.**.%zeit%.txt /b') do type "%%a" >>
ergebnis_%zeit%.bat
start /wait cmd /c
"ergebnis_%zeit%.bat"
del ergebnis_%zeit%.bat
:weiter
if %zeit% equ %end% goto
ende
goto schleife
Die
nächsten Befehle kennen Sie ja vom ersten Durchgang. Wir sind Gefangene
in einer Schleife. Ein Jahr nach dem anderen wiederholt sich das Spiel:
Ein Ordner wird erstellt 2010,2009.. und dazu werden die Logdateien,
die Textdateien und Batches erstellt, die Batch gestartet und die kopierten Dateien in den Ordner kopiert...
Irgendwann
kommt aber der Zeitpunkt, wo es gilt:
if %zeit% equ %end% goto
ende
Was
übersetzt bedeutet: Die Zeit Minus den Jahren, die der User archiviert
hat wurde erreicht: Die Schleife wird verlassen und die
Restbereinigungsarbeiten werden begangen.
del *.txt
del *.log
del *.%ende%
exit
Alles
relativ im Batchordner, wo die zwei Batches liegen. Da sind dann nur
noch zwei Batchdateien, die HTML-Seitenliste, die Sie sich geordnet mit
dem Editor anschauen können und eine bestimmte Anzahl mit
Archivordnern, einige voll und leer.
Ein bis zwei Jahre später
können Sie wieder alles archivieren. Ordner werden nicht überschrieben und
alte Dateien nur durch neuere Dateien.
Bereinigungsbatch
Es
wurde eine zweite Batch mit dem Call Befehl
aufgerufen. Sie erinnern sich?
CALL bereinigung.bat %1 A:
Ist
nicht so wild Mit :A
übergeben Sie die Variablen an die neue Batch. Die
wird gestartet. Die Ursprungsbatch wartet geduldig darauf, dass die
Batch ihre Arbeit beendet und setzt ihre Arbeit in der nächsten Zeile
fort. Das ginge ohne Übergabe von Parametern auch mit start /wait -
gähn!
Warum wurde die Batch ausgelagert? Die
arbeitet in einer
Schleife, die sich automatisch beendet und die unangenehme Eigenschaft
besitzt danach sich zu schließen. Kriege das leider auch nicht besser
hin - bin leider Anfänger...
@echo off & setlocal
FOR %%i in ( "%standort%\*
*.%ende%") do call :Nameneu "%%~nxi"
goto :eof
:Nameneu
Set "urname=%~1"
Set "neu=%urname: =_%"
Ren "%standort%\%urname%"
"%neu%"
goto :eof
Ist
wieder eine kleine Kombination von for-Schleife
und goto
- nichts neues.
Besteht kein * *
Leerzeichen, geht es geradewegs heraus zum ersten goto
Befehl in die nächsten Schleife und zur nächsten Prüfung. eof ist echo off als
Ziel der Sprungmarke.
Der Dateiname ohne die
Dateiendung der kopierten Datei ~nxi wird
also auf 1%
gesetzt. Ist *
* ein Leerzeichen zwischen
den
Buchstaben des Namens der Datei, so wird ein Unterstrich _ eingesetzt.
Der alte
Name wird durch den neuen ersetzt (Rename).
Danach geht es wieder zu
echo off.
Echo
off ist die Sprungmarke und setlocal wird
unter cmd /?
ausreichend
erklärt. call Kann
auch mit einer Sprungmarke verwendet werden. Jeder Name mit der
Dateiendung, die wir eingaben, wird also auf Leerzeichen überprüft,
aber nach jeder Prüfung muss leider ein neuer Durchganbg gestartet
werden, da sonst nur eine Datei umbenannt werden würde. Sobald
sämtliche spezifierten Dateien abgearbeitet wurden, wird die Datei
geschlossen. Die Ursprungsbatch wartet in der Zeile CALL bereinigung.bat %1 A:
auf
die Beendigung der Batch und läuft nun weiter.
Fazit
Die
Sortierung und Archivierung mit der Kommandozeile ist ein relativ
aufwendiges Unterfangen - aber realisierbar - die Macht der alten
Computermagie ist stark...-:) Diese Batch schafft um die 98 % - das ist
mehr als gut....
Der Sternenhimmelstuermer leitet
mit dieser Abhandlung eine Ruhepause von mindestens einer
Computergeneration ein. Die Hauptseite wird vorläufig sporadisch
weitergeführt. Der Computeralchimist Sternenhimmelstuermer wünscht
Ihnen viel Spass die Grenzen des Systems und Ihres Wissens auszutesten!
Diese
Abhandlungen könnten Sie auch interessieren;
KI 1 -
switchbatch
KI 2 - Lernbatch
Zur
besseren Orientierung auf den über 911 (Din A 4) Tippseiten
in Abhandlungen von drei Generationen Windows der
Sternenenhimmelstuermerpage die individualisierte Suchmaschine von
Google mit Suchergebnissen nur von dieser Homepage: Selbst
der Sternenhimmelstuemer findet sich bei diesem umfassenden Content
trotz präziser Sortierung der Abhandlungen nur mit Hilfe von
Suchmaschinen zu
recht...
Loading
Disclaimer: Sie geben bei
der Suche Daten ein, deren Verwendung nach den Regeln von Google
weiterverwendet werden können.
Der Sternenhimmelstuermer hat darauf keinen Einfluss, aber kommt mit
diesem Hinweis der Verpflichtung aus dem Datenschutz und
Telekommunikationsgesetz nach, auf diesen Umstand aufmerksam
zu machen. Mit der Eingabe eines Suchwortes stimmen Sie dieser
Verfahrensweise zu, der Sternenhimmelstuermer kann hierfür nicht
haftbar gemacht werden. Der Sternenhimmelstuermer distanziert sich von
den Werbeinhalten.
Beim Betätigen dieses Buttons geben Sie Daten
an Google weiter über deren Verwendung der Webmaster keinen Einfluss
hat. Nach dem Datenschutzgesetz und Telekommunikationsgesetz ist der
Webmasterverpflichtet, Sie darauf aufmerksam zu machen - Der
Sternenhimmelstuermer traut Google +