exzel
Goto Top

Festplatte dann Freigeben wenn diese einen bestimmten Laufwerksnamen hat

Hallo zusammen,

ich möchte eine Batch schreiben, die eine externe Festplatte, die entweder Buchstabe D: oder E: hat, freigibt, wenn die Laufwerksbezeichnung "Sicherungsplatte" ist.

Doch leider gibt die Batch die Platte immer frei, egal wie die Laufwerksbezeichnung lautet.

Wo liegt der Fehler

Gruß und Dank!


for /f "tokens=1-5*" %%1 in ('vol d:') do (
set volume=%%6
)


if "%volume%" == "Sicherungsplatte" goto freigabe

:freigabe
net share Sicherungsplatte=d:


for /f "tokens=1-5*" %%1 in ('vol e:') do (
set volume=%%6
)

if "%volume%" == "Sicherungsplatte" goto freigabe

:freigabe
net share Sicherungsplatte=e:

Content-Key: 179462

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

Printed on: April 24, 2024 at 13:04 o'clock

Member: Skyemugen
Skyemugen Jan 24, 2012 at 15:05:15 (UTC)
Goto Top
Aloha,

1. möchte ich dich bitten unsere schöne ##blue|## Formatierung zu verwenden
2. möchte ich dich darauf hinweisen, dass vol d: mehr als eine Zeile ausgibt, wodurch %%6 nicht definiert wird, ergo %volume% ebenso wenig definiert ist, was du mit echo on hättest feststellen können, bzw. pause (oder direkt am cmd)

Du könntest also gleich mit 'vol d:^|findstr "Sicherungsplatte"' arbeiten, zum Beispiel face-wink

greetz André

P.S.: Feierabend
Member: Exzel
Exzel Jan 24, 2012, updated at Oct 18, 2012 at 16:49:51 (UTC)
Goto Top
Hallo nochmal,

leider hat mir das auch nicht weitergeholfen. Es kam immer eine Fehlermeldung.

Ist aber auch egal:

@echo off & setlocal 

:: zu durchsuchende Laufwerksbuchstaben eintragen 

set Suche=D E F G H I J K L M N O P Q R S T U V W X Y Z 

::Volume Label der gesuchten Partition 

set Label=Sicherungsplatte

set lw= 

for %%a in (%suche%) do for /f "tokens=6 delims= " %%i in ('VOL %%a:') do (if "%%i"=="%Label%" set LW=%%a:)   


if defined lw (@echo %lw%) else (@echo Kein passendes Volume gefunden  & goto :eof) 


net share Sicherungsplatte=%lw%


Pause

Den Code hab ich von dem Beitrag.
Volume Label in einer Batch benutzen anstatt des LW Buchstaben

Vielen Dank und Hut ab!
Member: bastla
bastla Jan 24, 2012 at 16:35:50 (UTC)
Goto Top
Hallo Exzel!

Skye meinte es etwa so:
vol d:|findstr "Sicherungsplatte">nul && net share Sicherungsplatte=d:  
vol e:|findstr "Sicherungsplatte">nul && net share Sicherungsplatte=e:  
Warum es bei Deinem Ansatz sowieso nicht funktionieren konnte, ergibt sich einfach aus diesem Teil:
if "%volume%" == "Sicherungsplatte" goto freigabe  

:freigabe
net share Sicherungsplatte=d:
Was passiert wohl, wenn "%volume%" nicht gleich "Sicherungsplatte" ist? face-wink

Grüße
bastla
Member: Exzel
Exzel Jan 24, 2012 at 16:54:43 (UTC)
Goto Top
Hallo bastla,

dann soll er weitermachen mit dem nächsten Laufwerk und ermitteln welche Bezeichnung das wiederum hat.

Also wenn Laufwerk D nicht Sicherungsplatte heißt dann soll er weitermachen mit Laufwerk E

Gruß
Member: Skyemugen
Skyemugen Jan 24, 2012 at 17:24:39 (UTC)
Goto Top
Aloha,

naja dann tut doch
for %%s 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) do (
	vol %%s:|findstr "Sicherungsplatte">nul && net share Sicherungsplatte=%%s:  
	cls
)
seinen Dienst face-wink

das cls ist nur für die Optik, falls man echo on hat ... da ja >nul nicht die Fehlermeldung unterdrückt, wenn das Laufwerk nicht existiert face-wink

wenn das Skript eh nix anderes macht, kann man natürlich auch
vol %%s:|findstr "Daten">nul && net share Sicherungsplatte=%%s: && goto :eof  
einsetzen, wodurch sich das Skript nach erledigtem Job direkt beendet

greetz André

@bastla & Biber, seht ihr, mir fällt so etwas gar nicht auf, weil ich PLAINTEXT nicht verarbeite, sondern lese face-wink

... aber hätte er gleich ordentlich gesucht ... *pfeif*

edit: @Biber, ja ginge aber if exist dauert länger face-wink
Member: Biber
Biber Jan 24, 2012 at 17:27:47 (UTC)
Goto Top
Moin Exzel,

manchmal hilft es doch, wenn du einfach den Ablauf des Bätschelchens im normalen Umgangston wiedergibst.

-> der bisherige Code
<code type = plain>
if "%volume%" == "Sicherungsplatte" goto freigabe

:freigabe
net share Sicherungsplatte=d:

-> im Umgangston
Wenn dat wolljuhm gleich Sicherungspladde is' dann springe SOFORT auf Freibier  
Hier steht nix- > gehe weiter zur nächsten Zeile
Hier ist Freibier
Scher mir die Sicherungspladde

Entscheidend ist die Zeile 02 in beiden Code-Dialekten.
Die sollte nicht "leer" sein, sondern den Code goto :eof enthalten.
Bzw. im Umgangston-Code die Anweisung Dann leg dich wieder hin und vergiss es.

Grüße
Biber
[Edit] Skyes Ansatz ging auch ohne CLS
for %%s 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 %%s (
	vol %%s:|findstr "Sicherungsplatte">nul && net share Sicherungsplatte=%%s:  
)
[/Edit]
Member: brammer
brammer Jan 24, 2012 at 19:50:53 (UTC)
Goto Top
Hallo,

ich habe keinen blassen Schimmer von Batchprogrammierung.
Lese aber oft interessiert mit.

Nur ein Hinweis:

Win-doof bis XP (ab win 7 bin ich mir nicht sicher) erwartet unter den Laufwerkbuchstaben a und b ein Diskettenlaufwerk keine Festplatte!

Deswgen macht es keine Sinn die Laufwerk a und b zu prüfen.
Außerdem macht es kaum Sinn die Systemplatte Platte als Sicherungsplatte zu nutzen, damit ziehst du dir den Boden unter den Füßen weg

brammer
Member: bastla
bastla Jan 24, 2012, updated at Oct 18, 2012 at 16:49:51 (UTC)
Goto Top
Hallo Exzel!
dann soll er weitermachen mit dem nächsten Laufwerk
Das musst Du dem dann aber doch auch sagen - von alleine kommt ein Batch nie auf so eine Idee ... face-wink

Mehr dazu siehe oberhalb bei Biber ...

Grüße
bastla
Member: Exzel
Exzel Jan 25, 2012 at 08:11:23 (UTC)
Goto Top
Hallo nochmal,

das ist mir jetzt auch klar. Wenn ich es mit meinem einfachen Ansatz probiert hätte, hätte ich alle IF-Anweisungen hintereinander Zeile nach Zeile schreiben müssen, damit die Batch zum nächsten Laufwerk springt.

Gruß
Member: bastla
bastla Jan 25, 2012 at 08:18:02 (UTC)
Goto Top
... oder als Alternative die direkte Verarbeitung (wie in meinem Ansatz oben oder Skyes Schleifenvariante etwas darunter) verwenden können - dann entfallen alle Sprünge ...

Grüße
bastla