101. Archivierung

Einleitung


Nachtrag: 02.09.2016 Der Autor schrieb noch einmal unter Win 10 eine Batch zur Archivierung, die unter Win 7 und Win 8 nicht getestet wurde, aber auch dort funktionieren müsste: die entspricht dem aktuellsten Stand.

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 +




 
Impressum
Datenschutz