dogweazle
Goto Top

Name der Batchdatei verwenden

Hallo Community,

wie kann ich einen Batch nur mit unterschiedlichen Dateinamen anhand des Dateinamens steuern?

Beispiel: zum Verwalten meiner Netzlaufwerke mit dem Befehl "net use" möchte ich drei verschiedene Funtionen aufrufen.

1. Das Mounten aller Laufwerke in einem Durchlauf

net use J: \\NAS1\music
net use K: \\NAS1\photo
net use L: \\NAS2\video
net use M: \\NAS3\Media

2. Das AbMounten aller Laufwerke in einem Durchlauf

net use J: /delete
net use K: /delete
net use L: /delete
net use M: /delete

3. Eine Abfrage des Status aller gemounteten Laufwerke

net use

Ziel ist, mit ein- und dem selben Code die verschiedenen Fuktionen über den Namen der Batchdatei zu steuern.

Welche Variable trägt den Namen der eigenen Batchdatei für diese Abfrage?

Ich habe vor langer Zeit mal in Perl programmiert, da war sowas möglich.

Bitte um eine brauchbare Lösung, bleibt gesund, Grüße, Dogweazle

Content-ID: 581190

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

Ausgedruckt am: 25.11.2024 um 22:11 Uhr

Penny.Cilin
Penny.Cilin 21.06.2020 um 10:40:22 Uhr
Goto Top
Moin,

welchen Batchcode hast Du bisher? - Keinen?
Und hier etwas Lesefutter bzgl. Windows Batch:

Ein Beispiel:
@Echo Off
net use J: \\NAS1\music
net use K: \\NAS1\photo
net use L: \\NAS2\video
net use M: \\NAS3\Media

Und nennst die Batchdatei Mount_All.cmd

Weiteres Beispiel:
@Echo Off
net use J: /delete
net use K: /delete
net use L: /delete
net use M: /delete
Und nennst die Batchdatei Unmount_All.cmd

Und für den Rest lese die von mir angegebenen Links.

Gruss Penny.
em-pie
Lösung em-pie 21.06.2020 aktualisiert um 10:52:26 Uhr
Goto Top
Moin,

du willst also 4 Batch Dateien, die jeweils folgendes erledigen?

REM Mount Share
net use %drv% \\%srv%\%share%

REM unmount Share
net use %drv% /del

dann kannst du deine Batchs mit den Parametern aufrufen:
 REM Mount Shares
c:\SCRIPT\mybatch.cmd 1 J NAS1 music
c:\SCRIPT\mybatch.cmd 1 K NAS1 photo
c:\SCRIPT\mybatch.cmd 1 L NAS2 video
c:\SCRIPT\mybatch.cmd 1 M NAS3 media

REM unmount
c:\SCRIPT\mybatch.cmd 0 J
c:\SCRIPT\mybatch.cmd 0 K
c:\SCRIPT\mybatch.cmd 0 L
c:\SCRIPT\mybatch.cmd 0 M

und deine batch sieht dann wie folgt aus:
SET state=%1
SET drv= %2
SET srv=%3
SET share=%4

IF %state% = 0 (
 net use %drv% /del
 exit
)

IF %state% = 1 (
 net use %drv%: \\%srv%\%share%
 exit
)

EXIT


für das unmount kannst du aber auch einfach ein
net use * /delete /yes
ausführen lassen. Dann werden ALLE Netzwlaufwerke getrennt.

Edit:
Wenn alles in "einem Rutsch" mit nur einer Batch laufen soll, ist der Ansatz des Kollegen @Penny.Cilin das Mittel der Wahl


Gruß
em-pie
em-pie
em-pie 21.06.2020 um 11:00:46 Uhr
Goto Top
Moin @penny

dein zweiter Link geht nicht. Vermutlich weil dies die URL aus deiner persönlichen Beobachtungsliste ist face-wink
https://administrator.de/members/watchlist.php?m=1&limit=60 
Gruß
em-pie
Dogweazle
Dogweazle 21.06.2020 um 11:13:53 Uhr
Goto Top
Diese Batches habe ich bereits im Einsatz, meine Frage war eine Abfrage der Variablen mit dem Namen des Batches.

Vielen Dank für die schnelle Antwort.
em-pie
em-pie 21.06.2020 aktualisiert um 12:06:20 Uhr
Goto Top
Moin,

dann frag den Namen der Batch via %0
%~n0 
ab...

30 Sekunden:
google "Batch Paramater" -> 1. Treffer -> kurz prüfen und hier Posten:
https://it-learner.de/batch-script-parameter-uebergeben/

Edit: Variable korrigiert

Gruß
em-pie
Penny.Cilin
Penny.Cilin 21.06.2020 um 11:22:24 Uhr
Goto Top
Zitat von @em-pie:

Moin @penny

dein zweiter Link geht nicht. Vermutlich weil dies die URL aus deiner persönlichen Beobachtungsliste ist face-wink
https://administrator.de/members/watchlist.php?m=1&limit=60 
Stimmt. Habe ich angepasst. - Danke für den Hinweis.
Gruß
em-pie

Gruss Penny.
Dogweazle
Dogweazle 21.06.2020 um 11:35:57 Uhr
Goto Top
Hallo em-pie,

danke für die Vorschläge,

aber es ging mir ja nicht um verschiedene Batchdateien, sondern um eine Batchdatei (ein- und derselbe Code),
unter drei verschiedenen Namen abgelegt, deren Ausführung durch den Namen gesteuert wird.

Beispiel: Name des Batches in Variable %0

goto %0

REM wenn Name = mount
:mount
net use J: \\NAS1\data

REM wenn Name =umount
:umount
net use J: /delete

REM wenn Name=mountinfo
:mountinfo
net use
Dogweazle
Dogweazle 21.06.2020 um 11:37:06 Uhr
Goto Top
... das mit dem Link habe ich nicht ganz verstanden ?!
Dogweazle
Dogweazle 21.06.2020 um 11:40:50 Uhr
Goto Top
Ok, das wäre die Kurzform, spart ein paar Zeilen!!
em-pie
em-pie 21.06.2020 um 12:04:07 Uhr
Goto Top
Zitat von @Dogweazle:

Hallo em-pie,

danke für die Vorschläge,

aber es ging mir ja nicht um verschiedene Batchdateien, sondern um eine Batchdatei (ein- und derselbe Code),
unter drei verschiedenen Namen abgelegt, deren Ausführung durch den Namen gesteuert wird.

Beispiel: Name des Batches in Variable %0

goto %0

REM wenn Name = mount
:mount
net use J: \\NAS1\data

REM wenn Name =umount
:umount
net use J: /delete

REM wenn Name=mountinfo
:mountinfo
net use

Dann brauchst du aber wieder drei Batch-Files:
  • mount.cmd
  • unmount.cmd
  • mountinfo.cmd
Denn mit %0 (eigentlich sogar %~n0) erhälst du den Namen der Batch über die du dann steuerst, was du machen willst.
Ich würde daher nur eine BatchFile erstellen (siehe oben) und diese mit (einem) Parameter(n) aufrufen...

-> myMount.cmd [Status]

In der Batch wird dann der Parameter mit %1 abgefragt und entsprechend geprüft:
Status = 0 löscht alle Netzkaufwerke
Status = 1 mountet alle Laufwerke
Status = 2 zeigt die Infos an.

Eine batch, die verschiedene Dinge erledigt.
Auf dem Desktop legst du dir dann drei Verknüpfungen an, die jeweils einen anderen Inhalt des Status-Parameters übergeben.

Gruß
em-pie
TomTomBon
TomTomBon 22.06.2020 aktualisiert um 09:57:05 Uhr
Goto Top
Moin Moin,

In einer Batch kann Ich Abfragen wie der eigene Namen heißt.
Z.B. mit
set Dateiname="%~n0"  

Und habe dann die Variable
%Dateiname%

Und dann die Abfrage
if /I %Dateiname%=


Mit Stati ist das Skript meiner Meinung nach viel Variabler weil der Stati einfach zu ändern ist.
Allerdings ist deine Wunsch Methode Dau Sicherer.
Ein Mount oder UnMount kann man einem Dau erklären, der sollte sich das dann später ableiten können.
Eine Universal CMD mit einem anderen Status wird er nach 6monaten sich nicht ableiten können...

Hat beides sein für und wieder.

Nur mein Senf