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-ID: 179462

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

Ausgedruckt am: 25.11.2024 um 18:11 Uhr

Skyemugen
Skyemugen 24.01.2012 um 16:05:15 Uhr
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
Exzel
Exzel 24.01.2012, aktualisiert am 18.10.2012 um 18:49:51 Uhr
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!
bastla
bastla 24.01.2012 um 17:35:50 Uhr
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
Exzel
Exzel 24.01.2012 um 17:54:43 Uhr
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ß
Skyemugen
Skyemugen 24.01.2012 um 18:24:39 Uhr
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
Biber
Biber 24.01.2012 um 18:27:47 Uhr
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]
brammer
brammer 24.01.2012 um 20:50:53 Uhr
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
bastla
bastla 24.01.2012, aktualisiert am 18.10.2012 um 18:49:51 Uhr
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
Exzel
Exzel 25.01.2012 um 09:11:23 Uhr
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ß
bastla
bastla 25.01.2012 um 09:18:02 Uhr
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