flyingsader
Goto Top

Anhand von einer Schlüsseldatei Laufwerke zuordnen

Hallo zusammen,

ich habe das folgende Problem ich möchte meine Daten in regelmäßigen Abstanden auf einer USB Platte sichern. Die Platte bekommt aber nicht immer das gleiche Laufwerk zugewiesen. Daher möchte ich mit einem Skript eine Schlüsseldatei auf der Platte suchen. Das funktioniert auch soweit ganz gut, allerdings wird der Quelltext so wie ich es momentan laufen habe unübersichtlich

if exist "F:\hdd1.txt" set drv=F:
if exist "G:\hdd1.txt" set drv=G:
if exist "H:\hdd1.txt" set drv=H:
if exist "I:\hdd1.txt" set drv=I:
if exist "J:\hdd1.txt" set drv=J:
if exist "K:\hdd1.txt" set drv=K:
if exist "L:\hdd1.txt" set drv=L:
if not exist hdd1.txt echo Die ausgewählte Festplatte (HDD1) ist momentan nicht angeschlossen.>>imagecopy.txt

Da das für momentan vier Festplatten läuft könnt ihr euch sicher vorstellen das das Skript ziemlich lang geworden ist, jetzt würde ich das ganze gerne in eine Schleife packen bekomme es aber nicht hin.

Danke für eure Hilfe

Content-Key: 16820

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

Printed on: April 19, 2024 at 08:04 o'clock

Member: sysad
sysad Sep 28, 2005 at 05:30:16 (UTC)
Goto Top
Respekt,

das Skript hat mir sehr geholfen. Von wo aus und wann wird das gestartet?
Member: Biber
Biber Oct 03, 2005 at 08:05:45 (UTC)
Goto Top
Moin, FlyingSader,
in welcher Zeile der Schleife sind denn die Schwierigkeiten?

...(im Batch)
for %%i in ( F G H I J K L) do @if not defined drv if exist %i:\hdd1.txt Set "drv=%i:"
if not defined drv echo Die gewählte Festplatte (HDD1) ist nicht da .... >>imagecopy.txt
if not defined drv goto :eof
(sonst gibt es einen drv, alles prima)
Echo Sichere jetzt am %date% %time% mal auf Laufwerk %drv% .....>>imagecopy.txt
... (mach mir die Sicherung...)


HTH Frank /der Biber aus Bremen
Member: gemini
gemini Oct 03, 2005 at 08:48:23 (UTC)
Goto Top
Also mein Stick und auch die USB-Platte behalten Ihren Laufwerksbuchstaben an allen Rechnern an denen ich das einmal eingestellt habe.

~~~~~
Wenn es auch vbs sein darf und du den Namen der USB-Platte kennst face-smile
Hier ein Schnipsel, dass _alle_ Laufwerke scannt.

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set colDrives = objFSO.Drives
strUSBName = "Wie auch immer die Platte heißt"
On Error Resume Next
For Each objDrive in colDrives
If objDrive.VolumeName = strUSBName And objDrive.IsReady = True Then
MsgBox "Do something"
Else
MsgBox "Do nothing"
End If
Next
Member: FlyingSader
FlyingSader Oct 03, 2005 at 11:12:30 (UTC)
Goto Top
Morgen Biber,
danke für deine Hilfe vom Prinzip her funktioniert das auch alles so nur jetzt habe das Problem das zwei Platten angesteuert werden sollen hdd1.txt und hdd2.txt dies habe ich wie unten in den Skript jetzt erstellt nur findet er die hdd1.txt dann weißt er auch für hdd2.txt den entsprechenden Laufwerksbuchstaben zu

:begin

echo off
echo ............................>>imagecopy.txt
echo Datenauslagerung vom %date% >>imagecopy.txt
echo ............................>>imagecopy.txt


for %%i in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do @if not defined drv if exist %%i:\hdd1.txt Set "drv=%%i:"
if not defined drv echo Die gewählte Festplatte (HDD1) ist nicht da .... >>imagecopy.txt

Echo Sichere HDD1 jetzt am %date% %time% mal auf Laufwerk %drv%>>imagecopy.txt

for %%i in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do goto hdd1
echo -------------------------------->>imagecopy.txt

goto abfragehdd2

:abfragehdd2

for %%i in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do @if not defined drv if exist %%i:\hdd2.txt Set "drv=%%i:"
if not defined drv echo Die gewählte Festplatte (HDD2) ist nicht da .... >>imagecopy.txt
Echo Sichere HDD2 jetzt am %date% %time% mal auf Laufwerk %drv%>>imagecopy.txt

for %%i in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do goto hdd2
echo -------------------------------->>imagecopy.txt
:hdd1
echo hdd1 >>test.txt
goto abfragehdd2
:hdd2
echo hdd2 >>test.txt
goto ende
:ende
echo FERTIG >>test.txt
Member: Biber
Biber Oct 03, 2005 at 17:56:09 (UTC)
Goto Top
@FlyingSader

Also, ich habe nur versucht, die beschriebene Anforderung "handwerklich" zu lösen.

Stimme allerdings gemini uneingeschränkt zu: die ganz prickelnde Strategie ist es irgendwie nicht.
Schon bei der ursprünglichen Fragestellung, die impliziert, dass das Sicherungslaufwerk vollkommen zufällig und planlos alles zwischen Laufwerk F: und Laufwerk L: sein kann, bekam ich eine der Jahreszeit unangemessene Gänsehaut.
Und das es nun im Nachklapp sogar alle von C: bis Z: plus möglicherweise die zwei von M$ undokumentierten Laufwerksbuchstaben sein können...ähmm, hört sich nicht vertrauenserweckend an.
Und dabei ist es vollkommen unerheblich, ob Du diese Laufwerke durchscannst mit Batch, mit VBScript oder mit Assembler... ist die falsche Lösung.
Was machst Du denn, wenn irgendein Töffel eine Datei HDD1.txt auf eine RamDisk kopiert?
Oder welches ist das "richtige" Sicherungslaufwerk, wenn auf L:, K: und Y: so eine Signaldatei rumdümpelt?

Aber trotzdem nochmal zu dem Script-Fragment ein paar Anmerkungen

for %%i in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) ...
Also, wenn schon so viele Lw in Frage kommen sollten... dann
a) in eine Variable damit. Weniger Tippfehlergefahr und bessere Wartbarkeit
b) und mach eine SINNVOLLE Reihenfolge, nicht alphabetisch.

Set "NormaleSichLaufwerke=L T U"
Set "AusweichLaufwerke=J F K"
Set "LetzterNotNagel=S P D"

Set "AlleDenkbarenLW=%NormaleSichLaufwerke% %AusweichLaufwerke% %LetzterNotNagel%"

for %%i in ( %AlleDenkbarenLW%) DO ...whatever

Zweite Bemerkung: Der Batch funktioniert nicht, weil Du im oberen Fall (Suche nach HDD1.txt) und im unteren Fall (HDD2.txt) beide Male die Variable %drv% benutzt.

Wenn Du unten ankommst, ist die Variable defined *gg

Nimm also da ruhig zwei Variablen %drv1% und %drv2%.. ist sauberer...

Aber unabhängig davon überschlaf erst mal die Sicherungsmimik an sich... das kann irgendwie nicht die richtige Strategie sein.

Schönen Abend

Biber
Member: FlyingSader
FlyingSader Oct 03, 2005 at 18:36:07 (UTC)
Goto Top
Hallo.
also das mit den ganzen Laufwerken war mehr zum Testen, allerdings habe ich 4 Laufwerke die es potenziell sein können, da es sich um 4 Speicherträger handelt wobei nicht alle angeschlossen sind. Daher muss ich vor dem Kopieren überprüfen welche Festplatten angeschlossen sind.
Ich hoffe es ist jetzt ein wenig klarer geworden was das Skript letzendlich wenn es mal fertig sein sollte tun soll
Member: gemini
gemini Oct 03, 2005 at 19:27:53 (UTC)
Goto Top
VBScript scheint hier nicht allzu beliebt zu sein face-sad
Nun zumindest in diesem Fall bietet es eine Möglichkeit deine(n) Datenträger eindeutig zu identifizieren.
Nämlich mit der Seriennummer
objDrive.SerialNumber

Dieser Wert ist fix und mit normalen Mitteln nicht manipulierbar.
Imho allemal besser als die, da sind wir uns doch einig, suboptimale (Hallo Gerd! face-wink) Lösung mit der hddx.txt
Member: FlyingSader
FlyingSader Oct 03, 2005 at 20:28:16 (UTC)
Goto Top
Da muss ich dir wohl recht geben die Lösung ist suboptimal aber funktioniert momentan völlig problemlos. Aber da mir das Skript langsam ein wenig zu große ausmaße angenommen hat bin ich ja dabei es immer mehr zu optimieren obwohl ich immer noch mehr dem Batch-File zugewandt bin. Und ich denke mal wenn es sich auf 4 Festplatten bezieht ist auch das Sicherheitsrisiko nicht wirklich groß.
Member: Biber
Biber Oct 03, 2005 at 21:06:54 (UTC)
Goto Top
@gemini
face-wink
Diese "eindeutige, mit normalen Mitteln nicht manipulierbare Serial".. das ist aber nicht zufällig das, was ich als Serial von Datenträgern kenne, oder?
Dann hätte ich nämlich schockierende Neuigkeiten für Dich:
>dir l:
 Datenträger in Laufwerk L: ist BIBERS_USB03
 Datenträgernummer: 0000-0000

Aber Du hast natürlich recht, das Vorhandensein einer "HDD1.txt"-Datei als Kriterium für eine Datenträger-Identifizierung ist ein bisschen... optimistisch.
Eine oDrive.SerialNo ist da schon etwas vertrauenserweckender.

VBScript scheint hier nicht allzu beliebt zu sein..
ICH hab VBScript ganz doll lieb!!! face-wink
Member: gemini
gemini Oct 04, 2005 at 05:22:31 (UTC)
Goto Top
Datenträger in Laufwerk L: ist BIBERS_USB03
Datenträgernummer: 0000-0000
Du solltest nicht immer diese Biiligangebote kaufen, die können sich nicht mal ne richtige Seriennummer leisten. Wird halt überall gespart face-wink

Vielleicht hat die Platte wirklich 8 Nullen als sn.
Rein statistisch ist es genauso wahrscheinlich wie:
C:\>dir b:
Datenträger in Laufwerk B: ist USB MEMORY
Volumeseriennummer: 4464-BE46

Schönen Arbeitstag
gemini