quijote
Goto Top

Prüfen ob Laufwerk in Verwendung ist

Hi,

ich muss Abfragen ob auf ein Laufwerk zugegeriffen wird. Z.B. wenn momentan ein Programm darauf zugreift.
Ich benötige es für ein Script das ein LW nach 10 min. aushängt, wenn es gerade nicht verwendet wird.

Gibt es ein Befehl/Skript mit dem man das machen kann?


Als Beispiel:

Mount Z:
Warte 10 min.
Prüfe ob LW in Verwendung.

Wenn nicht: unmount Z:
Ansonsten: warte 10 min. ...

Content-Key: 188186

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

Ausgedruckt am: 28.03.2024 um 12:03 Uhr

Mitglied: AndreasHoster
AndreasHoster 18.07.2012 um 15:11:38 Uhr
Goto Top
Handle kann Dir die File Handles der Programme auslesen.
Siehe http://technet.microsoft.com/de-de/sysinternals/bb896655.aspx

Damit könnte man sehen, ob noch jemand was im Zugriff habt.
handle -a | find "z:\" /i  
if errorlevel 1 goto KeinZugriff

Wenn es ein Netzwerkshare ist, dann sieht es etwas anders aus:
handle -a | find "\Device\LanmanRedirector\;Z:" /i  
if errorlevel 1 goto KeinZugriff
Mitglied: Quijote
Quijote 20.07.2012 um 17:31:11 Uhr
Goto Top
Danke für die Hilfe, aber das klappt leider nicht.

Wenn ich die Errorlevel mit If abfrage, kommt sowohl 1 als auch 0 dabei raus.
Ich habe das mit echo ausprobiert.
Mitglied: AndreasHoster
AndreasHoster 23.07.2012 um 10:00:13 Uhr
Goto Top
Der Errorlevel kann nicht gleichzeitig 0 und 1 sein.
Könntest Du mal näher erläutern was Du da meinst, bzw. am Besten den Code posten, mit dem Du abfragst?
Mitglied: Quijote
Quijote 27.07.2012 um 22:12:32 Uhr
Goto Top
Tut mir leid, hat etwas gedauert.

Mein Testscript ist folgendes:

start LW_X.bat

timeout /T 5 /NOBREAK

handle -a | find "X:\" /i  
if errorlevel 1 goto KeinZugriff
if errorlevel 0 goto Zugriff

:KeinZugriff
echo derzeit kein Zugriff

:Zugriff
echo Laufwerk ist besetzt


PAUSE

Ausgeben tut die Kommandozeile beides, also "derzeit kein Zugriff" und "Laufwerk ist besetzt". Egal ob ich jetzt darauf zugreife oder nicht.
Mitglied: bastla
bastla 27.07.2012 aktualisiert um 23:56:44 Uhr
Goto Top
Hallo Quijote!
Ausgeben tut die Kommandozeile beides, also "derzeit kein Zugriff" und "Laufwerk ist besetzt".
Das ist zumindest für den Fall, dass ein Zugriff erfolgt, klar - hast Du Dir überlegt, was nach Zeile 10 in weiterer Folge passiert?
Ich würde das ab Zeile 5 eher so versuchen:
set "LW=X:"  
handle "%LW%\ | findstr /i "%LW%\\" && (  
    echo Zugriff
) || (
    echo Kein Zugriff
)
Ev sollten auch noch "X:\$Extend\$ObjId" und "X:\System Volume Information\tracking.log" ignoriert werden - dann als Zeile 2:
handle %LW%\|findstr /ivc:"%LW%\\System Volume Information\\tracking.log" /c:"%LW%\\\$Extend\\\$ObjId"|findstr /i "%LW%\\" && ( 
Die Erklärung für die zusätzlichen "\" findest Du übrigens mit "findstr /?" ...

Grüße
bastla
Mitglied: Quijote
Quijote 28.07.2012 um 11:17:34 Uhr
Goto Top
Hi bastla!

Ich habe zwar nicht alles vom Code verstanden, aber wenn ich den so übernehme bekomme ich am Ende immer die Meldung "Kein Zugriff". Unabhängig davon ob ich darauf zugreife oder nicht.

Gruß
Quijote
Mitglied: bastla
bastla 28.07.2012 aktualisiert um 11:32:05 Uhr
Goto Top
Hallo Quijote!

In die Zeile 2 ist ein Anführungszeichen reingerutscht - sollte besser so aussehen:
handle %LW%\ | findstr /i "%LW%\\" && (
Ich habe zwar nicht alles vom Code verstanden
handle -a | find "X:\" /i
kombinieren ...

Grüße
bastla
Mitglied: Quijote
Quijote 29.07.2012 um 14:34:18 Uhr
Goto Top
Zitat von @bastla:
In die Zeile 2 ist ein Anführungszeichen reingerutscht - sollte besser so aussehen:
handle %LW%\ | findstr /i "%LW%\\" && (

Habe ich eben ausprobiert, aber bekomme trotzdem immer die Meldung "Kein Zugriff". Funktioniert das denn bei dir?

Vielen Dank und Grüße

Quijote
Mitglied: bastla
bastla 29.07.2012 um 17:52:56 Uhr
Goto Top
Hallo Quijote!
Funktioniert das denn bei dir?
Ja; allerdings benötigt "handle" Admin-Rechte - wenn Du also nicht mit einem Admin-User testest, würde das Dein Ergebnis erklären ...

Grüße
bastla
Mitglied: Quijote
Quijote 31.07.2012 um 15:41:07 Uhr
Goto Top
Leider bringt das auch nichts. Habe es nochmal mit einem USB-Stick gestestet (vielleicht liegts ja am Laufwerk) aber klappt auch nicht.