WinFuture-Forum.de: Kleines Script für eine externe Festplatte - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

Kleines Script für eine externe Festplatte


#1 Mitglied ist offline   multimill 

  • Gruppe: Mitglieder
  • Beiträge: 1
  • Beigetreten: 27. März 13
  • Reputation: 0

geschrieben 27. März 2013 - 00:20

Hallo,


bitte nicht wundern, ich bin absoluter Noob in solchen Dingen, möchte aber gerne alles etwas vereinfachen.


Ich habe folgendes vor: Ich möchte "einfach nur", dass alle meine externen Festplatte auf jedem PC immer dieselben Laufwerksbuchstaben bekommen. Da ich aber nicht immer nur an 3-4 verschiedenen PCs arbeite, sondern an vielen verschiedenen, brauche ich dafür eine automatisierte Lösung. Ich habe mir dazu folgendes überlegt: Ich habe neben den Festplatte/n auch immer meinen Stick dabei. Diesen schließe ich an den Computer an und starte die "Beispiel.bat". Diese Batchdatei soll dann den angeschlossenen Fesplatten automatisch den richtigen (meinen richtigen) Buchstaben zuweisen. Dafür würde ich dann Buchstaben nutzen, die wirklich niemand nutzt z.B. Q-W oder so.
Nun habe ich mir überlegt, ob es nicht vielleicht möglich wäre das folgendermaßen zu lösen:

Ich schreibe hier einfach mal meinen "Pseudocode" auf, da ich mich schon versucht habe reinzulesen, aber (noch) nicht alles dazu gefunden habe.

funktion suche1
       {
       Suche multimill-festplatte-1.multimill
       {
wenn funktion "suche1" nicht erfolgreich = hier abbrechen
parameter a = Pfad zur Datei multimill-festplatte-1.multimill
parameter b = Laufwerksbuchstabe von parameter a
mache Laufwerk "parameter b" zu Laufwerk Q



Also am Anfang sucht er nach verschiedenen Dateien auf den Hauptverzeichnissen (kann man eine Suche auf die Hauptverzeichnisse der Laufwerke beschränken?). Wenn er die Datei von Festplatte 1 nicht findet, versucht er die von Festplatte 2 zu finden etc..
Anschließend nimmt er den Pfad der Dateien und extrahiert jeweils nur den Laufwerksbuchstaben. Dieser Laufwerksbuchstabe soll geändert werden in den vordefinierten Buchstaben.

Das Problem besteht deshalb, weil ich auf dem Stick ein Inhaltsverzeichnis mit vielen Verlinkungen habe und diese natürlich nur dann funktionieren, wenn die Dateien auch unter dem richtigen Pfad zu finden sind.



Ich hoffe ihr könnt mir bei meinem Problem helfen und danke auch schon einmal im vorraus fürs Lesen und vielleicht darf ich in ein paar Tagen schon ein paar Antworten von euch lesen.


Gruß
Christian
0

Anzeige



#2 Mitglied ist offline   RalphS 

  • Gruppe: VIP Mitglieder
  • Beiträge: 8.895
  • Beigetreten: 20. Juli 07
  • Reputation: 1.126
  • Geschlecht:Männlich
  • Wohnort:Zuhause
  • Interessen:Ja

geschrieben 27. März 2013 - 03:36

Sollte erstmal grundlegend so funktionieren.

Du müßtest im Stammverzeichnis jeder Festplatte ein oder mehrere "Tags" eineindeutige Tags anlegen, die Dir jede HD eineindeutig identifizieren.

Problem gibt's nur an einer Stelle: zum Mounten des Laufwerks brauchst Du den VolumeName und den VolumeName kriegst Du nur (eindeutig), wenn das Laufwerk bereits gemountet ist.

Also, (ARG!) pseudomäßig:
for buchstabe in [A-Z]; do
  if exist $buchstabe:\HDTAG; then # Eine der Festplatten gefunden
    mountpoint=$(cat $buchstabe:\HDTAG); *2*
    if exist $mountpoint:\; then
      echo Hups, Zielbuchstabe bereits belegt :huh: ;
    else
      volname=$(mountvol $buchstabe:); 
      mountvol $buchstabe: /d; *1*
      mountvol $mountpoint $volname;
    fi;
  fi;
done;


*1* mountvol /d schmeißt ungefragt und ungeprüft das fragliche Volume aus dem System -- UNBEDINGT sicherstellen, daß da nicht drauf zugegriffen wird

*2* Hier in diesem Beispiel steht einfach der neue LW-Buchstabe in \HDTAG drin, das kann aber sonstwie realisiert werden; wichtig ist, daß statt HDTAG ein *eindeutiger* Name verwendet wird, welcher möglichst NICHT irgendwoanders in Verwendung ist - besser noch: zwei oder mehr solcher Tags in Kombination abfragen und erst wenn alle ihre Prüfung bestehen, die Festplatte als "identifiziert" einstufen.

Denke mal, das Ganze wäre am besten in PowerShell zu implementieren, bin ich aber grad ein wenig überfragt, was dessen Syntax angeht. Das hätte allerdings den Nachteil, daß es auf älteren Windows-Rechnern potentiell keine Powershell gibt und das Script daher dort nicht laufen würde.

Der Einfachkeit halber würd ich persönlich mir ne Mini-MingW/msys-Installation anlegen (auf dem Stick) und das ganze in bash halten. Dann ist man auf Nummer Sicher.

Note -- sicherheitshalber: :wink: das da oben ist wirklich nur Pseudocode zur Veranschaulichung; sieht zwar ein bißchen aus wie, funktioniert aber erwartungsgemäß nicht in, bash. :)

Note 2: Nachteil bei dem Ansatz ist, daß die Laufwerksbuchstaben alle abgefragt werden; wenn D bis Z alles Netzlaufwerke sind und die beim Zugriff verbunden werden... dauert das *ewig*.

Ein sinnvollerer, aber aufwendigerer Ansatz wäre da unter Umständen, mountvol ohne Parameter auszuführen und die Ausgabe als solche weiterzuverwerten; das hätte den Vorteil, daß man nur lokale Laufwerke nach den Tags durchsucht und auf (potentielle) Netzlaufwerke nur zugreift, wenn man nach dem Zielbuchstaben schaut.


Wirklich problematisch seh ich insbesondere die Frage: ist mein Laufwerksbuchstabe überhaupt frei? Wenn man da einen Buchstaben aus der Mitte nimmt wie zB Q fährt man sicherlich in 90% der Fälle sicher... aber es soll ja auch Leute geben, die einmal Laufwerk C haben und das einzige andere Laufwerk eben *da* gemountet ist, wo es stört.

Umgehen könnte man das, potentiell zumindest, mit Batchdateien statt Verknüpfungen - denn ersteren genügen relative Pfade, letzteren nicht.


Dann würde man siche jede Scriptdatei sparen können, weil alles unabhängig vom Laufwerksbuchstaben funktioniert.

Aber man hat dann halt dieses schwarze Fenster da.
"If you give a man a fish he is hungry again in an hour. If you teach him to catch a fish you do him a good turn."-- Anne Isabella Thackeray Ritchie

Eingefügtes Bild
Eingefügtes Bild
0

#3 _d4rkn3ss4ev3r_

  • Gruppe: Gäste

geschrieben 27. März 2013 - 05:15

Haben die Festplatten denn alle ein Name mit der man alle finden kann? Heißt eine Zeichenfolge, Zahl etc. die jede der Festplatten gleich hat?

Dann wäre das mit einer Batch ganz leicht wenn nicht, dann schwer.
0

#4 Mitglied ist offline   dnr 

  • Gruppe: aktive Mitglieder
  • Beiträge: 949
  • Beigetreten: 06. Januar 10
  • Reputation: 89
  • Geschlecht:Männlich

geschrieben 27. März 2013 - 20:15

irgendwo hab ich mal gelesen, dass, wenn man einer externen Festplatte/Stick etc. einen ganz bestimmten Namen gibt, es möglich ist, dass diese dann immer automatisch den Laufwerksbuchstaben B bekommen... fragt mich aber nicht mehr, wie man die nennen muss oder wo ich das her hatte... kA mehr ;)
0

#5 _d4rkn3ss4ev3r_

  • Gruppe: Gäste

geschrieben 27. März 2013 - 20:48

Das geht im Gerätemanager möcht ich meinen.
0

#6 Mitglied ist offline   Stefan_der_held 

  • Gruppe: Offizieller Support
  • Beiträge: 14.289
  • Beigetreten: 08. April 06
  • Reputation: 885
  • Geschlecht:Männlich
  • Wohnort:Dortmund NRW
  • Interessen:Alles wo irgendwie Strom durchfließt fasziniert mich einfach weswegen ich halt Elektroinstallateur geworden bin :)

geschrieben 27. März 2013 - 20:54

Mal ein alternativer Ansatz: Schonmal daran gedacht eine NTFS-Platte in einem NTFS-Verzeichnis bereit zu stellen? dann können Laufwerksbuchstaben egal sein...
0

#7 Mitglied ist offline   RalphS 

  • Gruppe: VIP Mitglieder
  • Beiträge: 8.895
  • Beigetreten: 20. Juli 07
  • Reputation: 1.126
  • Geschlecht:Männlich
  • Wohnort:Zuhause
  • Interessen:Ja

geschrieben 27. März 2013 - 21:05

War auch so meine Überlegung, aber dann muß doch auf *jedem einzelnen* Rechner, wo das Ding dran kommt, dieses Verzeichnis erstellt werden...

Und wenn da doch wer ne FAT32 Partition haben sollte wo die Festplatte(n) drankomm(t|en), geht's auch schief.


Ist halt unter Windows etwas suboptimal mit den Laufwerken. Jedenfalls dann, wenn die Zuordnung auf einem "unbekannten" Rechner wiederhergestellt werden soll.

Denn die VolumeNames sind ja hardwarespezifisch. Da geht es auch nicht, auf einer Platte Mountpoints für die übrigen Platten einzurichten - das geht auf einem Rechner (dem, wo es erstellt wurde) aber auf anderen Systemen funktioniert das schon nicht mehr.

Dieser Beitrag wurde von RalphS bearbeitet: 27. März 2013 - 21:07

"If you give a man a fish he is hungry again in an hour. If you teach him to catch a fish you do him a good turn."-- Anne Isabella Thackeray Ritchie

Eingefügtes Bild
Eingefügtes Bild
0

#8 Mitglied ist offline   Stefan_der_held 

  • Gruppe: Offizieller Support
  • Beiträge: 14.289
  • Beigetreten: 08. April 06
  • Reputation: 885
  • Geschlecht:Männlich
  • Wohnort:Dortmund NRW
  • Interessen:Alles wo irgendwie Strom durchfließt fasziniert mich einfach weswegen ich halt Elektroinstallateur geworden bin :)

geschrieben 27. März 2013 - 21:13

Beitrag anzeigenZitat (RalphS: 27. März 2013 - 21:05)

War auch so meine Überlegung, aber dann muß doch auf *jedem einzelnen* Rechner, wo das Ding dran kommt, dieses Verzeichnis erstellt werden...

Und wenn da doch wer ne FAT32 Partition haben sollte wo die Festplatte(n) drankomm(t|en), geht's auch schief.


och die LW-Buchstaben können ja bleiben. Funktionieren tut das glaube ich auch mit FAT32... nur das Ziel-Dateisystem (also dieses jenes welches die HDDs einhängt) muss NTFS sein.
0

#9 Mitglied ist offline   RalphS 

  • Gruppe: VIP Mitglieder
  • Beiträge: 8.895
  • Beigetreten: 20. Juli 07
  • Reputation: 1.126
  • Geschlecht:Männlich
  • Wohnort:Zuhause
  • Interessen:Ja

geschrieben 27. März 2013 - 22:27

Ja eben. Es geht darum, existierende (externe) Festplatten an, letztlich, beliebige (und, augenscheinlich, unbekannte) Rechner zu hängen.

Kann natürlich auch sein, daß der TO das anders meinte und durchaus die Kontrolle über die Zielrechner hat (also diejenigen, wo die Platten dran sollen). In dem Fall könnte man das natürlich sicherstellen mit dem Dateisystem... und den Mountpoints, dann müßte man eben auf jedem Rechner zB ein leeres Verzeichnis als Mountpoint reservieren.
"If you give a man a fish he is hungry again in an hour. If you teach him to catch a fish you do him a good turn."-- Anne Isabella Thackeray Ritchie

Eingefügtes Bild
Eingefügtes Bild
0

#10 _d4rkn3ss4ev3r_

  • Gruppe: Gäste

geschrieben 12. April 2013 - 12:35

Eventuell ist das etwas für dich: USBDLM

Musst dann halt nur das ganze ohne den Dienst zu installieren, starten.
0

#11 Mitglied ist offline   Kirill 

  • Gruppe: aktive Mitglieder
  • Beiträge: 3.590
  • Beigetreten: 04. Dezember 06
  • Reputation: 121
  • Geschlecht:Männlich
  • Wohnort:BT

geschrieben 12. Mai 2013 - 10:30

Mal eine Überlegung: ist das mit dem immer gleichen Buchstaben das Endziel, oder dient das einem höheren Zweck, den man auch anderweitig erreichen kann? Um Vorgänge zu automatisieren zum Beispiel gibt's eine simple Methode: man packt auf die Platte eine Batchdatei, die den jeweiligen Buchstaben, auf dem die liegt, im Code ermittelt.
Most rethrashing{
DiskCache=AllocateMemory(GetTotalAmountOfAvailableMemory);}
0

#12 Mitglied ist offline   RalphS 

  • Gruppe: VIP Mitglieder
  • Beiträge: 8.895
  • Beigetreten: 20. Juli 07
  • Reputation: 1.126
  • Geschlecht:Männlich
  • Wohnort:Zuhause
  • Interessen:Ja

geschrieben 12. Mai 2013 - 11:46

Die Verknüpfungen sollen weiter funktionieren, wenn ich das da oben richtig verstanden hab. Und die sind leider absolut.

Mittel dagegen:
- Batchdateien statt Verknüpfungen(.lnk).
* Pro: Die können relativ zum Stammverzeichnis gehalten werden.
* Contra: Schwarze Fenster noch und nöcher.
- Symlinks. Brauchen aber NTFS und als ob das noch nicht genug wäre, muß auch auf jedem(!) Zielrechner zumindest Win7 laufen (Vista bin ich grad nicht sicher, ist aber möglich). Und selbst wenn das alles paßt, gibt es spätestens dann Probleme, wenn das Programm .DLLs oder Pfade relativ zur Startdatei sucht -- und das wäre ja dann der Symlink, nicht das echte Ziel.
- Wie weiter oben schon angeknuspert, ein mehr oder weniger umständliches Script.
* Pro: Set & Forget; wenn's einmal da ist und funktioniert, ist alles gut.
* Contra: Da muß man aber erstmal hinkommen. Man müßte a) unreservierbare Laufwerksbuchstaben reservieren (schwierig), b) einen eindeutigen Pfad auf der Festplatte haben, wohin gemountet werden kann (nicht ganz so schwer, stellt aber Annahmen ans Zielsystem - und schreibt darauf); oder natürlich c) aktuellen Laufwerksbuchstaben ermitteln und dann sämtliche Referenzen auf den alten Buchstaben durch den neuen ersetzen (was entweder mindestens lineare Zeit oder aber die Existenz eines gut gewarteten Index erfordert).

Also nicht ganz so trivial. :(
"If you give a man a fish he is hungry again in an hour. If you teach him to catch a fish you do him a good turn."-- Anne Isabella Thackeray Ritchie

Eingefügtes Bild
Eingefügtes Bild
0

#13 Mitglied ist offline   Kirill 

  • Gruppe: aktive Mitglieder
  • Beiträge: 3.590
  • Beigetreten: 04. Dezember 06
  • Reputation: 121
  • Geschlecht:Männlich
  • Wohnort:BT

geschrieben 13. Mai 2013 - 07:24

Das mit den Batchdateien ist trivial.
"%~d0\Backup" wählt mir den Backup-Unterordner auf der Festplatte, auf der die Batchdatei liegt. Also F:\Backup oder H:\Backup oder X:\Backup oder oder oder.
Most rethrashing{
DiskCache=AllocateMemory(GetTotalAmountOfAvailableMemory);}
0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0