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
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 16820
Url: https://administrator.de/contentid/16820
Ausgedruckt am: 14.11.2024 um 01:11 Uhr
10 Kommentare
Neuester Kommentar
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
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
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
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
~~~~~
Wenn es auch vbs sein darf und du den Namen der USB-Platte kennst
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
@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
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
VBScript scheint hier nicht allzu beliebt zu sein
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! ) Lösung mit der hddx.txt
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! ) Lösung mit der hddx.txt
@gemini
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:
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!!!
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!!!
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 Datenträgernummer: 0000-0000
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