Wie erkennt man automatisch den Laufwerksbuchstaben des gerade angeschlossenen Laufwerkes?
Guten Tag
schon lange arbeite ich mit einem Skript, das auf dem guten alten DOS basiert, und von cmd's aus der win8-welt (auch 64bit) verstanden werden.
Sinn des Skriptes ist es, Daten zu sichern. Auf ein externes Laufwerk, oder auf ein freigegebenes Laufwerk oder oder. Auf alles, was einen Laufwerksbuchstaben hat. z.B. auch auf einen USB-Stick oder ein USB-Festplattenlaufwerk.
Arbeitsaufgabe des Skriptes:
eine transparente Datensicherung durchzuführen. Egal, wer am PC sitzt (=userunabhängig) UND betriebssystemunabhängig. Es funktioniert ab Windows2000 (vermutlich auch ab NT3.x). Es werden die cmd-internen Befehlsteile benutzt, sowie die externen Tools, die zum Betriebssystem gehören, wie xcopy.exe (in bestimmten Fällen auch robocopy.exe; das Vorhandensein dieses sehr guten commandozeilen-Tools wird abgefragt, und nach den Ergebnissen der Errorlevels eingesetzt.
Mein Problem ist folgendes:
ich weiss nie, was z.B. das externe Laufwerk, was der Benutzer da an seinen PC anschliesst, für einen Laufwerksbuchstaben bekommt.
Das Problem habe ich immer so umgegangen, in dem ich dem angeschlossenen Laufwerk in der Systemsteuerung-Verwaltung-Computerverwaltung dem neu hinzugekommen Medium explicit ein Z: verpasse. Das klappt insofern gut, der Rechner merkt(!) sich den Laufwerkbuchstaben. Problematisch wird es z.B. DANN, wenn der Benutzer 2(!) verschiedene externe Festplatten benutzen will. Dann iss essich! Der Rechner vergisst, wem es das Z: zugeweisen hat, und teilt beim nächsten Laufwerkswechsel ihm den nächsten freien Buchstaben zu: e: oder f: oder wasweissich.
Meine internen Werkzeuge: ich benutze die (seltener!)command.com, fast immer die cmd.exe, und wenn vorhanden robocopy.exe auf den Windowsrechnern. ich benutze NICHT und werde es auch NICHT: irgendwelche shellskripte, die externe Tools oder Programme benötige, oder Visualbasicskripte. WARUM nicht, werde einige fragen (denn damit würden sich bestimmt einige Probleme lösen lassen ? Ganz einfach: zu VB benötige ich runtimeModule, zu anderen Lösungsansätzen eben externe (betriebsystemABHÄNGIGE Tools. Ich will NUR das benutzen, was von Natur aus auf dem Rechner drauf ist. Und einen Rechner OHNE command.com bzw cmd.exe gibt es NICHT [lassen wir mal 4dos.exe weg, und os2, sowie die dosbox[opensource] weg!]
So sieht der einleitende Teil des Skriptes aus:
rem oder als externesLW an Client angeschlossen
set freigabe=z:
if exist \\QNAP\server set freigabe=\\QNAP\server
if exist \\CHEF\externHD set freigabe=\\CHEF\externHD
if exist \\BUERO-PC1\backup set freigabe=\\BUERO-PC1\backup
if exist \\LS-CHL-V21CD\share set freigabe=\\LS-CHL-V21CD\share
if exist \\MATZE-PC\Z set freigabe=\\MATZE-PC\Z
if exist \\CARMEN-PC\Z-Backup set freigabe=\\CARMEN-PC\Z-Backup
if "%COMPUTERNAME%"=="OBERMANN-PC" set freigabe=z:
if "%COMPUTERNAME%"=="FROSCH-NB" set freigabe=z:
if "%COMPUTERNAME%"=="NAGEL-PC" set freigabe=z:
Ich erkläre es mal mit meinen eigenen Worten:
das Ziel ist IMMER z:
Die Ausnahmen sind darunter notiert:
a. ist der Rechner in meinem Netz angeschlossen, dann ist meine NAS(=QNAP) das Ziellaufwerk. Ein angeschlossenes Z:-Laufwerk wird ignoriert.
b. gibt es bei den Rechnern da draussen irgendwelche Netzwerklaufwerke,also Besonderheiten, gibt es solche Regeln:
if exist \\CARMEN-PC\Z-Backup set freigabe=\\CARMEN-PC\Z-Backup
if "%COMPUTERNAME%"=="OBERMANN-PC" set freigabe=z:
Die letzte Regel ist also die zuletzt gültigste!
das funktioniert GANZ prima.
Was auch funktioniert:
ich frage die 32bit- oder die 64bit-Version des Betriebssystems ab. Ich frage das Betriebssystem ab. Je nachdem, was als Antwort kommt, weiss ich wo die Firefox-Daten liegen, OutlookExpress. oder oder oder.
Mein Wunsch:
wie erkennt man automatisch, welchen Laufwerksbuchstaben die GERADE angeschlossene externe USB-Festplatte bekommt?
Das hätte DEN Vorteil: mir ist es egal, wie die laufwerksbuchstabenverteilung ist. wenn der PC-Benutzer 2 verschiedene Datensicherungsinstrumente benutzen will, kann er das. z.b. Platte I für die geraden Wochen. Platte II für die ungeraden Wochen.
Wäre das ein Lösungsansatz?
for %%a IN (a: b: 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 exist %%a\_eine_bestimmte_datei set freigabe=%%a:
NICHT getestet. nur in gedanken formuliert....
ich erinnere mich, das man ein Laufwerk NICHT nach einer Datei abfragen kann, wenn es NICHT existiert!
Oder? Das war doch mit Diskettenlaufwerken so. OK. Oben könnte man also a und b rausnehmen....
UND: kleiner nachteil: es muss eine Art
Wer weiss was?
Danke fürs Mitlesen und Gruß zum Sonnabend
Euer Klaus(i)
PS: aus Respekt vor dem Forum schreibe ich in der gewünschten Orthographie. Ansonsten schreibe ich NIE mit korrekter Rechtschreibe (=klainundGROSSschreibungk)
Dieses Forum hat mir schon einige Gedankenansätze gegeben, die ich gut anwenden konnte. Danke den unbekannten Beiträgern. Nebenbei: wenn ich fremdes Eigentum verwende !und !diejenigen es freigegeben haben, dann nenne ich auch die Copyright-Quelle. Ist Ehrensache!
schon lange arbeite ich mit einem Skript, das auf dem guten alten DOS basiert, und von cmd's aus der win8-welt (auch 64bit) verstanden werden.
Sinn des Skriptes ist es, Daten zu sichern. Auf ein externes Laufwerk, oder auf ein freigegebenes Laufwerk oder oder. Auf alles, was einen Laufwerksbuchstaben hat. z.B. auch auf einen USB-Stick oder ein USB-Festplattenlaufwerk.
Arbeitsaufgabe des Skriptes:
eine transparente Datensicherung durchzuführen. Egal, wer am PC sitzt (=userunabhängig) UND betriebssystemunabhängig. Es funktioniert ab Windows2000 (vermutlich auch ab NT3.x). Es werden die cmd-internen Befehlsteile benutzt, sowie die externen Tools, die zum Betriebssystem gehören, wie xcopy.exe (in bestimmten Fällen auch robocopy.exe; das Vorhandensein dieses sehr guten commandozeilen-Tools wird abgefragt, und nach den Ergebnissen der Errorlevels eingesetzt.
Mein Problem ist folgendes:
ich weiss nie, was z.B. das externe Laufwerk, was der Benutzer da an seinen PC anschliesst, für einen Laufwerksbuchstaben bekommt.
Das Problem habe ich immer so umgegangen, in dem ich dem angeschlossenen Laufwerk in der Systemsteuerung-Verwaltung-Computerverwaltung dem neu hinzugekommen Medium explicit ein Z: verpasse. Das klappt insofern gut, der Rechner merkt(!) sich den Laufwerkbuchstaben. Problematisch wird es z.B. DANN, wenn der Benutzer 2(!) verschiedene externe Festplatten benutzen will. Dann iss essich! Der Rechner vergisst, wem es das Z: zugeweisen hat, und teilt beim nächsten Laufwerkswechsel ihm den nächsten freien Buchstaben zu: e: oder f: oder wasweissich.
Meine internen Werkzeuge: ich benutze die (seltener!)command.com, fast immer die cmd.exe, und wenn vorhanden robocopy.exe auf den Windowsrechnern. ich benutze NICHT und werde es auch NICHT: irgendwelche shellskripte, die externe Tools oder Programme benötige, oder Visualbasicskripte. WARUM nicht, werde einige fragen (denn damit würden sich bestimmt einige Probleme lösen lassen ? Ganz einfach: zu VB benötige ich runtimeModule, zu anderen Lösungsansätzen eben externe (betriebsystemABHÄNGIGE Tools. Ich will NUR das benutzen, was von Natur aus auf dem Rechner drauf ist. Und einen Rechner OHNE command.com bzw cmd.exe gibt es NICHT [lassen wir mal 4dos.exe weg, und os2, sowie die dosbox[opensource] weg!]
So sieht der einleitende Teil des Skriptes aus:
rem oder als externesLW an Client angeschlossen
set freigabe=z:
if exist \\QNAP\server set freigabe=\\QNAP\server
if exist \\CHEF\externHD set freigabe=\\CHEF\externHD
if exist \\BUERO-PC1\backup set freigabe=\\BUERO-PC1\backup
if exist \\LS-CHL-V21CD\share set freigabe=\\LS-CHL-V21CD\share
if exist \\MATZE-PC\Z set freigabe=\\MATZE-PC\Z
if exist \\CARMEN-PC\Z-Backup set freigabe=\\CARMEN-PC\Z-Backup
if "%COMPUTERNAME%"=="OBERMANN-PC" set freigabe=z:
if "%COMPUTERNAME%"=="FROSCH-NB" set freigabe=z:
if "%COMPUTERNAME%"=="NAGEL-PC" set freigabe=z:
Ich erkläre es mal mit meinen eigenen Worten:
das Ziel ist IMMER z:
Die Ausnahmen sind darunter notiert:
a. ist der Rechner in meinem Netz angeschlossen, dann ist meine NAS(=QNAP) das Ziellaufwerk. Ein angeschlossenes Z:-Laufwerk wird ignoriert.
b. gibt es bei den Rechnern da draussen irgendwelche Netzwerklaufwerke,also Besonderheiten, gibt es solche Regeln:
if exist \\CARMEN-PC\Z-Backup set freigabe=\\CARMEN-PC\Z-Backup
if "%COMPUTERNAME%"=="OBERMANN-PC" set freigabe=z:
Die letzte Regel ist also die zuletzt gültigste!
das funktioniert GANZ prima.
Was auch funktioniert:
ich frage die 32bit- oder die 64bit-Version des Betriebssystems ab. Ich frage das Betriebssystem ab. Je nachdem, was als Antwort kommt, weiss ich wo die Firefox-Daten liegen, OutlookExpress. oder oder oder.
Mein Wunsch:
wie erkennt man automatisch, welchen Laufwerksbuchstaben die GERADE angeschlossene externe USB-Festplatte bekommt?
Das hätte DEN Vorteil: mir ist es egal, wie die laufwerksbuchstabenverteilung ist. wenn der PC-Benutzer 2 verschiedene Datensicherungsinstrumente benutzen will, kann er das. z.b. Platte I für die geraden Wochen. Platte II für die ungeraden Wochen.
Wäre das ein Lösungsansatz?
for %%a IN (a: b: 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 exist %%a\_eine_bestimmte_datei set freigabe=%%a:
NICHT getestet. nur in gedanken formuliert....
ich erinnere mich, das man ein Laufwerk NICHT nach einer Datei abfragen kann, wenn es NICHT existiert!
Oder? Das war doch mit Diskettenlaufwerken so. OK. Oben könnte man also a und b rausnehmen....
UND: kleiner nachteil: es muss eine Art
Wer weiss was?
Danke fürs Mitlesen und Gruß zum Sonnabend
Euer Klaus(i)
PS: aus Respekt vor dem Forum schreibe ich in der gewünschten Orthographie. Ansonsten schreibe ich NIE mit korrekter Rechtschreibe (=klainundGROSSschreibungk)
Dieses Forum hat mir schon einige Gedankenansätze gegeben, die ich gut anwenden konnte. Danke den unbekannten Beiträgern. Nebenbei: wenn ich fremdes Eigentum verwende !und !diejenigen es freigegeben haben, dann nenne ich auch die Copyright-Quelle. Ist Ehrensache!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 230766
Url: https://administrator.de/contentid/230766
Ausgedruckt am: 22.11.2024 um 19:11 Uhr
13 Kommentare
Neuester Kommentar
Moin,
ich persönlich weise per Script softwarebuchstaben per Registry zu. Wenn du den Key exportiert und dann eine Diffenenzanalyse machst, könnte das funktionieren:
"HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices"
du musst natürlich schauen, dass es auch auf Windows 98 noch klappt, aber ich könnte es mir gut vorstellen.
solltest du mit "fc" als Befehl schaffen können.
Gruß
Chris
ich persönlich weise per Script softwarebuchstaben per Registry zu. Wenn du den Key exportiert und dann eine Diffenenzanalyse machst, könnte das funktionieren:
"HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices"
du musst natürlich schauen, dass es auch auf Windows 98 noch klappt, aber ich könnte es mir gut vorstellen.
solltest du mit "fc" als Befehl schaffen können.
Gruß
Chris
moin,
mit IF exist geht es in die Grütze, wenn kein Medium im Laufwerk ist. Dann nervt erstmal eine Klickbox. Ordner suchen
vol und dir machen da eine Ausnahme.
Verwendbar sind auch noch vol Volumename; Seriennummer; wmic abfragen etc.
Gruß Phil
mit IF exist geht es in die Grütze, wenn kein Medium im Laufwerk ist. Dann nervt erstmal eine Klickbox. Ordner suchen
vol und dir machen da eine Ausnahme.
for /f "delims=\ " %%i in ('"mountvol|find ":\"|sort"') do @vol %%i 2>nul >nul && find "Backup-SET-01" %%i\Backup.ini && set freigabe=%%i
Verwendbar sind auch noch vol Volumename; Seriennummer; wmic abfragen etc.
Gruß Phil
Hey,
das war auch meine Idee. Allerdings ist das erst ab XP Prof. an Board.
Gruss.
das war auch meine Idee. Allerdings ist das erst ab XP Prof. an Board.
Gruss.
Hallo Klaus,
pieh-ejdsch Script bringt dich sicherlich weiter.
Aber interessehalber hier das "eingeworfene" mal in einer simplen Schleife (als Array)
Viele Grüsse und viel Erfolg
Tsuki
pieh-ejdsch Script bringt dich sicherlich weiter.
Aber interessehalber hier das "eingeworfene" mal in einer simplen Schleife (als Array)
@Echo Off
Set MeinArray="A:","B:","C:","D:","E:","F:","G:","H:","I:","J:","K:","L:","M:","N:","O:","P:","Q:","R:","S:","T:","U:","V:","W:","X:","Y:","Z:"
for %%i in (%MeinArray%) do Echo %%i && fsutil fsinfo drivetype %%i
pause
Viele Grüsse und viel Erfolg
Tsuki
Hallo Klaus,
Also das sehe ich anders. Unter XP brauche ich für diese Zeilen VBS
keine extra DLL mir besorgen.
Schönen Sonntag,
Tsuki
oder für vb-skripte, wie ich irgendwelche dll's benötige, habe ich leider keinen bock.
Also das sehe ich anders. Unter XP brauche ich für diese Zeilen VBS
On Error Resume Next
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_LogicalDisk")
For Each objItem in colItems
Select Case objItem.DriveType
Case 1 strDriveType = "Drive could not be determined."
Case 2 strDriveType = "Removable Drive"
Case 3 strDriveType = "Local hard disk."
Case 4 strDriveType = "Network disk."
Case 5 strDriveType = "Compact disk (CD)"
Case 6 strDriveType = "RAM disk."
Case Else strDriveType = "Drive type Problem."
End Select
Wscript.Echo objItem.DriveType & " " & objItem.Name & "\ is: " & strDriveType
Next
Schönen Sonntag,
Tsuki
moin Klaus,
Damit sich dieser Datenträger bei mehreren Backupmedien eindeutig zuordnen lässt erhält die jeweilige HDD eine entsprechende Zeile in dieser INF zur Identifizierung.
Gruß Phil
- Delims wird von @Friemler im Tutorial zur FOR-Schleife erklärt.
- mountvol zeigt die Laufwerke, welche online (mit Laufwerksbuchstaben) sind, an
- vol ist erfolgreich bei Laufwerken mit Medium.
- && ist die Befehlsverknüpfung bei erfolgreichen vorherigen Befehl.
- find sucht nach Zeichenfolgen in Dateien.
Damit sich dieser Datenträger bei mehreren Backupmedien eindeutig zuordnen lässt erhält die jeweilige HDD eine entsprechende Zeile in dieser INF zur Identifizierung.
Gruß Phil