gods-disciple
Goto Top

Batch Datei zur Archivierung von Disketten

Ich möchte mir den Arbeitsablauf des Archivieren alter Disketten möglichst einfach gestalten, um nebenher andere Sachen machen zu können... also habe ich mich zum ersten Mal mit dem Thema Batch beschäftigt und auch ganz stolz meine erste eigene Batchdatei geschrieben.

Also mein Ziel der Batchdatei ist, dass ich nur eine Diskette einlegen muss, dann den Ordnernamen eingebe und die Diskette an den Ort, wo ich sie haben möchte, kopiert wird. Und das ganze dann bitte als Dauerschleife.
Für diesen Vorgang habe ich mir eine Batchdatei geschrieben, die auch funktioniert.
Nur habe ich diese (als fauler Mensch) noch verbessern wollen und so mehrfach umgeschrieben, mit dem Ziel, dass ich noch einen weiteren Ordner angeben kann.
Um die Situation zu verstehen... oft hat man ja Disketten die zusammen gehören. Deswegen würde ich am liebsten einen Ordner (in der Batch "f3") erstellen, in den alle zusammengehörigen Disketten kopiert werden, aber jeweils halt noch in ihren eigenen Unterordner (in der Batch "fd").
Unten meine Batch zur Fehlersuche... es liegt daran, das Robocopy den Pfad nicht richtig auflöst im log wie im Zielverzeichnis, doch trotz vielen Versuchen mit verschiedenen Slash- oder Anführungszeichen-konstelationen bin ich nicht zum Ergebnis gekommen.
Da es meine erste Batch ist, kann es sein, dass auch noch einige Anfängerfehler oder Umständlichkeiten drin sind, bitte gerne freundlich korrigieren, will ja was lernen face-wink.

Batch:

@echo off
set S=A:\
set Dir=R:\
set f1=Backup
set f2=Disketten
set log=Sicherung-Diskette

rem Oeffne Verzeichnis, in dem der Zielordner erstellt werden soll.
cd %Dir%%f1%\%f2%
goto anfang

:anfang
echo.
echo.
echo Bitte geben Sie den Namen ein, den das zu erstellende Verzeichnis erhalten soll.
echo.
echo Wenn der Name aus mehreren Woertern bestehen soll,
echo geben Sie den Namen bitte in Anfuehrungszeichen an.
echo.

rem Setze Variable fuer Zielordner.
set /p fd=

echo.
echo.
echo Wenn Sie einen Zusatzordner nach dem Hauptverzeichnis anlegen moechten,
echo geben Sie bitte den Namen des Ordners jetzt an.
echo.
echo Wenn der Name aus mehreren Woertern bestehen soll,
echo geben Sie den Namen bitte in Anfuehrungszeichen an.
echo.
echo Wenn Sie keinen weiteren Ordner hinzufuegen moechten,
echo druecken Sie bitte einfach Enter.
echo.

rem Setze Ordner in dem der Zielordner abgespeichert werden soll.
set /p f3=
goto test

:test

rem Teste, ob mein zu erstellender Ordner schon besteht.
if exist %Dir%%f1%\%f2%\%f3%\%fd% goto aendern
goto erzeugen

:aendern
echo.
echo.
echo Das zu erstellende Verzeichnis besteht bereits,
echo bitte geben Sie einen neuen Namen ein.
echo.

rem Setze Variable fuer Zielordner, da der vorher gewaehlte schon besteht.
set /p fd=
goto test

:erzeugen

rem Erzeuge Ordner, oeffne Ordner, erzeuge Zielordner.
md %f3%
cd %Dir%%f1%\%f2%\%f3%
md %fd%
goto kopieren

:kopieren
echo.
echo.
echo Bitte legen Sie die Diskette nun in das Laufwerk ein.
echo.
echo Mit druecken einer Taste wird der Inhalt der Diskette nach
echo %Dir%%f1%\%f2%\%f3%\%fd% kopiert
Pause

rem Kopiere Diskette in Zielordner mit Logdatei
robocopy %S% %Dir%%f1%\%f2%\%f3%\%fd% /E /COPY:DT /R:5 /W:1 /LOG:%Dir%%f1%\%f2%\%f3%\%fd%\%log%.txt /NFL /NDL
goto ende

:ende-k

echo Bitte druecken Sie eine Taste
pause
goto ende

:ende
echo.
echo.
echo Der Kopiervorgang wurde erfolgreich abgeschlossen.
echo.
echo.
echo Mit druecken einer Taste wird der naechste Kopiervorgang gestartet.
echo Zuerst wird dem Laufwerk ein Name vergeben,
echo Sie muessen die Diskette also noch nicht einlegen.
echo.
echo.
echo Wenn Sie den Vorgang hier abbrechen moechten druecken Sie "CTRL" ("STRG") + "C"
echo und bestaetigen Sie mit "S" ("J").
pause
goto anfang

Noch 2 Anmerkungen:
In den echo-sachen:
CTRL und S liegen daran, dass ich in Peru arbeite.

Die Angabe oben, dass wenn kein f3 erstellt werden soll, dass einfach Enter gedrückt werden soll, ist eine Annahme, da meine Batch ja nicht funktioniert, konnte ich es nicht testen. Was ich will ist, dass ich, falls ich eine Diskette archivieren muss, die alleine steht und in keinen Ordner mit anderen Disketten gesteckt werden soll, diese Funktion auch weg lassen kann. Ob dies funktioniert, indem einfach die Variable nicht gesetzt wird weiss ich nicht. Wenn ihr dafür Ideen habt, immer raus damit.

Ich hoffe das war nicht zu kompliziert erklärt.

Liebe Grüsse und Vielen Dank
God`s disciple

Content-Key: 110757

Url: https://administrator.de/contentid/110757

Printed on: April 25, 2024 at 03:04 o'clock

Member: miniversum
miniversum Mar 07, 2009 at 08:53:49 (UTC)
Goto Top
Ich hab deine Batch mal etwas verändert / vereinfacht.
Schau mal ob die das so macht wie du willst:
@echo off
set S=A:\
set "Dir=R:\Backup\Disketten"  
set log=Sicherung-Diskette

rem Oeffne Verzeichnis, in dem der Zielordner erstellt werden soll.
cd /D "%Dir%"  

:anfang
echo.
echo.
echo Bitte geben Sie den Namen ein, den das zu erstellende Verzeichnis erhalten soll.
echo.
echo.

rem Setze Variable fuer Zielordner.
set /p "fd="  

echo.
echo.
echo Wenn Sie einen Zusatzordner nach dem Hauptverzeichnis anlegen moechten,
echo geben Sie bitte den Namen des Ordners jetzt an.
echo.
echo Wenn Sie keinen weiteren Ordner hinzufuegen moechten,
echo druecken Sie bitte einfach Enter.
echo.

rem Setze Ordner in dem der Zielordner abgespeichert werden soll.
set /p "f3="  

rem Teste, ob mein zu erstellender Ordner schon besteht.
if not exist %Dir%\%f3%\%fd% goto:erzeugen

echo.
echo.
echo Das zu erstellende Verzeichnis besteht bereits,
echo bitte geben Sie einen neuen Namen ein.
echo.
goto:anfang

:erzeugen

rem Erzeuge Ordner, oeffne Ordner, erzeuge Zielordner.
md %Dir%\%f3%\%fd%

echo.
echo.
echo Bitte legen Sie die Diskette nun in das Laufwerk ein.
echo.
echo Mit druecken einer Taste wird der Inhalt der Diskette nach
echo %Dir%\%f3%\%fd% kopiert
Pause

rem Kopiere Diskette in Zielordner mit Logdatei
robocopy %S% %Dir%\%fd% /E /COPY:DT /R:5 /W:1 /LOG:%Dir%\%f3%\%fd%\%log%.txt /NFL /NDL

echo Bitte druecken Sie eine Taste
pause

echo.
echo.
echo Der Kopiervorgang wurde erfolgreich abgeschlossen.
echo.
echo.
echo Mit druecken einer Taste wird der naechste Kopiervorgang gestartet.
echo Zuerst wird dem Laufwerk ein Name vergeben,
echo Sie muessen die Diskette also noch nicht einlegen.
echo.
echo.
echo Wenn Sie den Vorgang hier abbrechen moechten druecken Sie "CTRL" ("STRG") + "C"  
echo und bestaetigen Sie mit "S" ("J").  
pause
goto:anfang
Der Code ist von mir nicht getestet.
Bei Leerstelle den Namen in Anführungszeichen setzen ist nicht nötig jetzt, Da das sowieso immer gemacht wird jetzt.
Ich habe einige Sprungmarken entfernt die nicht notwendig waren.
Das ganze ist ungetestet.
Das mit dem einfachen weglassen von f3, bzw. nichts dafür angeben könnte funktionieren. Wenn nicht wäre eine Abfrage ob f3 leer ist möglich.
Da die Kombination "%Dir%%f1%\%f2%" immer vorkam habe ich sie zusammen in die Variable %Dir% gezogen.

Wenn du so etwas testen willst ändere einfach das "@echo off" in "@echo on² um oder lasse es erstmal weg. Dann kannst du sehen was pasiert, welche inhalte die ariabeln haben und wo es hängt. Funktioniert alles wi ees soll dan einfach wieder "@echo off" und gut ist.
Member: gods-disciple
gods-disciple Mar 07, 2009 at 16:30:16 (UTC)
Goto Top
Hey. vielen Dank schonmal für deine Hilfe.
Ich habe die getestet und sie funktioniert leider auch noch nicht so richtig. Der Test, ob die Ordner bestehen, geht nicht mehr, aber selbst wenn ich das rausnehme, schafft er es nicht das Zielverzeichnis bei robocopy zu verarbeiten. Er nimmt immer nur den Anfang von dem Ordnernamen mit Leerzeichen.
Ich denke das Problem ist einfach, dass robocopy mit Ordnernamen mit Leerzeichen nicht klar kommt. Hat jemand eine Ahnung, wie ich ihm sagen, kann, wo er es hinkopieren soll, wenn der Ordner Leerzeichen hat.
Vielen Dank
Liebe Grüsse
God's disciple
Member: miniversum
miniversum Mar 07, 2009 at 17:05:33 (UTC)
Goto Top
Die Prüfung ob ein ordner schon existiert udn das kopieren war ieen nachlässigkeit von mir.
Du must an diesen stellen eindach die Pfadangaben in Anführungszeichen setzen. dan klapt es auch mit den Leerstellen. Bei ienem ordner ohne Leerstellen machen diese zusätzlichen Anführungszeichen nichts. Schadet also nicht.
Daher:
Ändere Zeile 32 in
if not exist "%Dir%\%f3%\%fd%" goto:erzeugen  
, Zeile 44 in
md "%Dir%\%f3%\%fd%"  
und Zeile 55 in
robocopy %S% "%Dir%\%fd%" /E /COPY:DT /R:5 /W:1 /LOG:"%Dir%\%f3%\%fd%\%log%.txt" /NFL /NDL  

Dan sollte es eigentlich gehen.
Member: gods-disciple
gods-disciple Mar 08, 2009 at 20:25:23 (UTC)
Goto Top
Hola,
vielen Dank, jetzt läuft es sehr gut face-smile. Ich hab immer versucht jeden einzelnen Ordner in Anführungszeichen zu setzen, das hat nicht funktioniert, aber so läuft es jetzt.
Meine Annahme stimmt auch nicht ganz mit dem Enter wird die alte Variable bei behalten... hab jetzt noch eine Zeile zugefügt, dass wenn man Ja eingibt, dass er die Variable wieder löscht... jetzt macht er alles was ich will face-smile.
Vielen Dank für deine Hilfe
God´s disciple