Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Wie erkennt man automatisch den Laufwerksbuchstaben des gerade angeschlossenen Laufwerkes?

Frage Entwicklung Batch & Shell

Mitglied: klausph

klausph (Level 1) - Jetzt verbinden

22.02.2014, aktualisiert 18:53 Uhr, 2818 Aufrufe, 13 Kommentare

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!
Mitglied: Sheogorath
22.02.2014 um 22:16 Uhr
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
Bitte warten ..
Mitglied: pieh-ejdsch
22.02.2014, aktualisiert um 23:18 Uhr
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.
01.
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
Bitte warten ..
Mitglied: Endoro
22.02.2014 um 23:25 Uhr
Hey,

Zitat von pieh-ejdsch:

wmic abfragen etc.
das war auch meine Idee. Allerdings ist das erst ab XP Prof. an Board.
Gruss.
Bitte warten ..
Mitglied: TsukiSan
23.02.2014 um 00:51 Uhr
Hallo klausph,

eventuell hilft dir
01.
fsutil fsinfo drivetype C:
bei deinem Vorhaben weiter.

Viele Grüsse

Tuski
Bitte warten ..
Mitglied: klausph
24.02.2014 um 14:47 Uhr
guten tag den fleissigen beantworten
da sind sehr interessante ansätze.
danke erstmal!
ich melde, wenn ich mehr weiss.
kurzkomment: pieh eitsch hat völlig recht: mit "dir" kommt man nicht weiter. das hat mich damals schon sehr geärgert.
gruß klaus(i)
Bitte warten ..
Mitglied: klausph
26.02.2014 um 23:12 Uhr
danke christoph
für deinen tip muss ich wissen, wie man in die registry kommt. hm, das habe ich mal gerade gemacht. das was da für c: und g: (auf letzterem ist mein testlaufwerk) notiert ist, macht mir nicht gerade mut. klar mit fc würde man später weiterkommen. danke. leider nix für mich.
gruß, klaus
Bitte warten ..
Mitglied: klausph
26.02.2014 um 23:22 Uhr
Guten Tag Tsuki (San),
fsutil mit "seinen Parametern" gefällt mir richtig gut. Bin derzeit in Dortmund, und habe nur einen win7-prof-Laptop dabei. Wxp kann ich also nicht abprüfen.
Wenn ich mit fsutil weitermachen kann, dann muss es in wxp vorhanden sein. Deshalb konzentriere ich mich auf den Lösungsansatz von pieh-ejdsch.

Nur mal trotzdem weitergedacht:
"fsutil fsinfo drivetype" müsste man in eine for-Schleife setzen, alle Laufwerksbuchstaben abfragen. Dann den errorlevel ausforschen. Bei positivem errorlevel zusätzlich einen dir-Befehl absetzen, weil auf dem Datenträger irgendeine bestimmte Datei sein muß. Wenn positiv, dann könnte man %freigabe% definieren.

In der Antwort an pieh-ejdsch gehe ich noch mehr darauf ein.
Danke für die Hilfe!
Gruß Klaus
Bitte warten ..
Mitglied: klausph
26.02.2014 um 23:44 Uhr
Zitat von pieh-ejdsch:
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.
01.
> for /f "delims=\ " %%i in ('"mountvol|find ":\"|sort"') do @vol %%i 2>nul >nul 
02.
> && find "Backup-SET-01" %%i\Backup.ini && set freigabe=%%i 
03.
> 
....
Gruß Phil

Guten Abend Phil,
DANKE. Ich verstehe die for-Schleife nicht völlig, aber sie funktioniert! Bravo!
ich habe mich jetzt für folgende Lösung entschieden:

for /f "delims=\ " %%i in ('"mountvol|find ":\"|sort"') do @vol %%i 2>nul >nul && find "Backup-SET-01" %%i\allegronet-backup.cmd && set freigabe=%%i

if exist \\QNAP\server set freigabe=\\QNAP\server

if not exist c:\_install md c:\_install
copy "%freigabe%\allegronet-backup.cmd" c:\_install
copy "%freigabe%\allegronet-backup.cmd" "%userprofile%\desktop"

die letzten 3 Zeilen des Skriptes "allegronet-backup.cmd" (Umfang 100kb) haben folgenden Sinn:
1. Es wird eine Sicherheitskopie nach c:\_install kopiert [bald wird hier %systemdrive% verwendet werden!]
2. Das Skript selber, welches ja aufgerufen wurde, wird auf den Desktop des aktiven User kopiert. Dort kann es dann später aufgerufen werden.
Ich halte es für die einfachste Art das Skript zu istallieren: dem Benutzer es in "die Hand zu drücken", ihn zu bitten, es auf den Datenträger zu kopieren und von dort aus aufzurufen, erscheint mir die einfachste. Es "installiert sich dann selber" auf den aktuellen Desktop.

Nachgefragt:
&& find "Backup-SET-01
das verstehe ich nicht. Er sucht den String ""Backup-SET-01", es ist egal, ob er ihn findet oder nicht. Richtig?
OHNE DAS && find "Backup-SET-01" würde das Skript nicht funktionieren (habe ich schon probiert .

DANKE! Ihr habt mir eine großes Problem gelöst:
ich muß mich nicht um die Festlegung von z: kümmern. (Wie leicht kann z: verloren gehen!...)
Und: mein (altes) Skript funktionierte, wenn 2 verschiedene Datensicherungslaufwerke benutzt wurden.
PRIMA. GANZ GROSSE KLASSE1

gruß vom klaus(i)
Bitte warten ..
Mitglied: TsukiSan
27.02.2014 um 03:29 Uhr
Hallo Klaus,

pieh-ejdsch Script bringt dich sicherlich weiter.
Aber interessehalber hier das "eingeworfene" mal in einer simplen Schleife (als Array)
01.
@Echo Off 
02.
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:" 
03.
 
04.
for %%i in (%MeinArray%) do Echo %%i && fsutil fsinfo drivetype %%i 
05.
pause
Viele Grüsse und viel Erfolg

Tsuki
Bitte warten ..
Mitglied: klausph
01.03.2014 um 14:48 Uhr
Zitat von TsukiSan:
Hallo Klaus,
pieh-ejdsch Script bringt dich sicherlich weiter.
Aber interessehalber hier das "eingeworfene" mal in einer simplen Schleife (als Array)
01.
> @Echo Off 
02.
> Set 
03.
> 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:" 
04.
>  
05.
> for %%i in (%MeinArray%) do Echo %%i && fsutil fsinfo drivetype %%i 
06.
> pause 
07.
> 

naja. gut.
nun muss man das skript "nur" auswerten. ich denk mal vor
wie wird der gewonnene laufwerkbuchstabe übernommen?
wie unterscheide ich die lokale platte vom externen laufwerk?
ich habe mich vor einigen tagen für das pieh-ejdsch-skript entschieden, und meine lösung, sowie ich sie verwenden werde, dazu veröffentlicht. das scheint alles serh gut zu klappen. merciVIELSmals


so mal nebenbei:
1. was ich so TOLL an der cmd.exe finde? (fast) alle meine aufgaben, habe ich bisher mit dieser cmd.exe lösen können. das skript von pieh-ejdsch ist auf wxp lauffähig (gerade kontrollt!), fsutil ist auch unter wxp bekannt.
das ist doch superoberklasse!
für irgendwelche shellskripte, wo eben mal ein windowsshell V2 installiert SEIN MUSS, oder für vb-skripte, wie ich irgendwelche dll's benötige, habe ich leider keinen bock. grund: ich benötige irgendetwas DAZU. und ich muss die windowsshell VERSTEHEN, für vbskript muss ich programmieren können. kann ich nich, und will ich nich

natürlich, ich weiss...
2. für GROSSE ausgaben: mal eine 4GB-datei, die nicht gerade mit normalen zeichen gefüllt ist, sondern mit allem ,was der dos-herrgott hergibt (also decimal 000 bis 255), da mal einige strings zu finden, und auszutauschen. da kann ich NICHT mit der cmd.exe arbeiten. da brauchen wir schon spezialwerkzeuchs


viele grüße vom klaus(i)
Bitte warten ..
Mitglied: klausph
01.03.2014 um 14:55 Uhr
ahoi Phil
heute getestet: deine skriptzeile löpt auch unter wxp!
fein!
klassenziel erreicht!
megadank. (s.a. private mail an dich)


wenn du zeit hast, kannst du uns mal bitte dein skript erklären?
oder ist es möglich, DIE eine skriptzeile zu teilen? in mehrere teile geteilt und mit pausen versehen, kann man vielleicht das besser nachvollziehen?

for /f "delims=\ " %%i in ('"mountvol|find ":\"|sort"') do vol %%i 2>nul >nul && find "Backup-SET-01" %%i\allegronet-backup.cmd && set freigabe=%%i

ich kapiere das mit den "delims" nicht. das find "Backup-Set-01" verstehe ich ebenfalls nicht.
mein dos-batsch-buch vom hanser-verlag kann nur das dos6.xx .für die for-schleife gibt es dort keine -für mich!- verständliche erklärung.

danke und gruß klaus

ps: wenn ich ein nachvollziehbares beispiel habe, verstehe ich das persönlich besser. irgendwelche dokus, wo für programmierer das alles logisch und selbsterklärend drinne steht, das verstehe ich eben nicht! bin eben so gepolt
Bitte warten ..
Mitglied: TsukiSan
02.03.2014 um 00:01 Uhr
Hallo Klaus,

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
01.
On Error Resume Next 
02.
strComputer = "." 
03.
 
04.
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") 
05.
Set colItems = objWMIService.ExecQuery("Select * from Win32_LogicalDisk") 
06.
 
07.
For Each objItem in colItems 
08.
	Select Case objItem.DriveType 
09.
	Case 1 strDriveType = "Drive could not be determined." 
10.
	Case 2 strDriveType = "Removable Drive" 
11.
	Case 3 strDriveType = "Local hard disk." 
12.
	Case 4 strDriveType = "Network disk." 
13.
	Case 5 strDriveType = "Compact disk (CD)" 
14.
	Case 6 strDriveType = "RAM disk." 
15.
	Case Else strDriveType = "Drive type Problem." 
16.
End Select 
17.
 
18.
Wscript.Echo objItem.DriveType & " " & objItem.Name & "\ is: " & strDriveType 
19.
 
20.
Next
keine extra DLL mir besorgen.

Schönen Sonntag,

Tsuki
Bitte warten ..
Mitglied: pieh-ejdsch
02.03.2014, aktualisiert um 12:48 Uhr
moin Klaus,

  • 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.
- Hier in einer Initialisierungs- oder auch Informations-Datei welche im Wurzelverzeichnis der USB (Backup) Festplatte abgelegt wurde.
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
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

IDE & Editoren
USB STICK Datei AUTOMATISCH beim anschliessen auf fremden PC öffnen (9)

Frage von Jwanner83 zum Thema IDE & Editoren ...

Microsoft Office
gelöst Registerkarte in Excel automatisch färben (14)

Frage von ralfkausk zum Thema Microsoft Office ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (21)

Frage von Xaero1982 zum Thema Microsoft ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Windows Update
Treiberinstallation durch Windows Update läßt sich nicht verhindern (15)

Frage von liquidbase zum Thema Windows Update ...

DSL, VDSL
Problem mit variernder Internetgeschwindigkeit (12)

Frage von schaurian zum Thema DSL, VDSL ...