paulikid
Goto Top

DOS-Fenster (Batch-Datei) bleibt mit der Warnung "UNC-Pfade werden nicht unterstützt" stehen

Hallo zusammen,

wir haben folgende Batch-Datei erstellt:

@echo off

if exist P:\. net use P: /DELETE
net use P: \\nws-XXX.de\vol0\prog

P:
cd \Programmordner\Unterverzeichnis
PROGRAMM.exe

exit

_____________________________________________________________

Wir erhalten dabei folgende Fehlermeldung:

"\\nws-XXX.de\vol0\prog\Programmordner\Unterverzeichnis"
CMD.EXE wurde mit dem oben angegebenen Pfad als aktuellem Verzeichnis gestartet.

UNC-Pfade werden nicht unterstützt.
Stattdessen wird das Windows-Verzeichnis als aktuelles Verzeichnis gesetzt.
P: wurde erfolgreich gelöscht.

Der Befehl wurde erfolgreich ausgeführt.


___________________________________________________________

Das Programmverzeichnis samt Inhalt befindet sich auf einem Novell-Netware-Server (Fileserver).

Eigentlich sollte nach erfolgreichem Start des Programms das DOS-Fenster geschlossen werden. Dies funktioniert allerdings nicht. Das Programm startet zwar, das DOS-Fenster bleibt jedoch stehen.

Wie müsste die Batch-Datei angepasst werden, damit das Fenster nach Programmstart geschlossen wird? Oder gibt es einen anderen Workaround?

Vielen Dank für eure Unterstützung,

Paulikid

Content-Key: 275979

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

Printed on: April 20, 2024 at 00:04 o'clock

Member: Snowman25
Solution Snowman25 Jun 29, 2015 updated at 13:46:02 (UTC)
Goto Top
Hallo @Paulikid,

Die Batch-datei ist so schon richtig.
Auch die Fehlermeldung ist "in Ordnung". Wenn du eine Batch-Datei startest, wird das Working Directory auf das aktuelle Verzeichnis gesetzt. Wenn du nun im Explorer einen Doppelklick darauf machst, dann ist der aktuelle Ordner das Working Directory. Und wenn du die Batch über \\server\pfad\zur\batch.bat ausführst, versucht die CMD mit \\server\pfad\zur als Working Directory zu starten, was nicht geht. Darum wird es automatisch auf %windir% gesetzt.

Du kannst das mit
PUSHD \\%~P0
abfangen.


Jetzt zum eigentlichen Problem des "nicht beenden".

Die Batch wartet darauf, dass dein PROGRAMM.EXE fertig wird.
Das kannst du umgehen durch
start "" programm.exe  

Gruß,
@Snowman25
Member: Biber
Solution Biber Jun 29, 2015 updated at 13:53:36 (UTC)
Goto Top
Moin Paulikid,

es schadet auch nichts, wenn du einmalig folgenden HKCU-Wert hinzufügst:
 REG ADD "HKCU\Software\Microsoft\Command Processor" /v DisableUNCCheck /t REG_DWORD /d 1 /f  

Der macht in etwa das, was der Name suggeriert - die Fehlermeldung mit den nicht unterstützten UNC-Pfaden sollte danach weg sein.

Grüße
Biber-
Member: Paulikid
Paulikid Jun 29, 2015 at 13:52:51 (UTC)
Goto Top
Hallo @Snowman25,

vielen Dank für die schnelle Antwort! Hat einwandfrei funktioniert.

Gruß,

@Paulikid
Member: Macharul
Solution Macharul Oct 25, 2016 updated at 15:43:33 (UTC)
Goto Top
"Du kannst das mit

01. PUSHD \\%~P0

abfangen."



An welcher Stelle im Skript?
Ich hab dasselbe Problem und finde nicht heraus, an welcher Stelle ich den Befehl eingeben soll!
Wir haben eine Batch erstellt, mit der eine Software auf Clients verteilt werden soll, dabei wird eine Install_OK.txt erstellt, damit die Installation nicht bei jedem Login erneut ausgeführt wird. Die .exe ist komplett silent und funktioniert lokal ausgeführt perfekt, nach wenigen sekunden ploppen die Symbole auf und die Software ist verfügbar. So sieht die Batch aus:


IF EXIST "c:\Install_OK.txt" GOTO END

\\DC1LAB\Software Deployment\*.exe
echo "Install Successful" > "c:\Install_OK.txt"

:END

Folgendes bekomme ich beim Ausführen der Batch auf dem Client:

UNC-Pfade werden nicht unterstützt.
Stattdessen wird das Windows-Verzeichnis als aktuelles Verzeichnis gesetzt.

Der Netzwerkname wurde nicht gefunden.
Member: Paulikid
Paulikid Oct 25, 2016 at 16:10:43 (UTC)
Goto Top
Ich würde tippen VOR dem UNC-Pfad, also als zweite Zeile...
Member: Macharul
Macharul Oct 26, 2016 at 06:28:37 (UTC)
Goto Top
Da ändert sich leider gar nichts - ich bekomme dieselbe Fehlermeldung...
Member: Snowman25
Snowman25 Oct 26, 2016 at 09:15:38 (UTC)
Goto Top
Hallo @Macharul,

Als erste ausführende Anweisung in deinem Skript.
PUSHD funktioniert so, dass ein UNC-Pfad on-the-fly auf einen Laufwerksbuchstaben gemappt wird.

Beispiel:
PUSHD \\server1\share\ordner\unterordner
Erstellt ein Netzlaufwerk Z:\, welches auf \\server1\share zeigt.
Z:\ordner\unterordner wir dann auf den Directory-Stack gelegt, welchen du mit PUSHD und POPD kontrollierst.

Wenn jetzt einer der Schritte hierbei nicht klappt, gibt es einen Fehler.
Wenn du aber sowieso den Pfad kennst, in dem sich das Skript befinden sollte und sich dieser auch nicht ändern wird, dann mach doch einfach
PUSHD \\install-server\share\pfad\zum\skript


Wenn dein Skript garnicht von einem UNC-Pfad aufgerufen wird, sondern von einem bereits gemappten Laufwerk, solltest du PUSHD %~dp0 bzw. PUSHD %~f0 verwenden.

Wenn dein Skript über ein anderes Skript aufgerufen wird und dabei Anführungszeichen um den Filenamen stehen, ist der Inhalt von %~0 allerdings nicht mehr verlässlich. Hier stolperst du über einen Bug in der cmd.exe (siehe: hier).


Ich hoffe, das hilft dir.

Gruß,
@Snowman25
Member: Macharul
Macharul Oct 26, 2016 updated at 09:26:22 (UTC)
Goto Top
Vielen Dank für die Erklärung Snowman25,

ich habe das Problem bereits gelöst. Ich habe den UNC-Pfad einfach in Anführungszeichen gesetzt, dann hat es Problemlos funktioniert.
Also nicht so:


IF EXIST "c:\Install_OK.txt" GOTO END

\\DC1LAB\Software Deployment\*.exe
echo "Install Successful" > "c:\Install_OK.txt"

:END

sondern so:

IF EXIST "c:\Install_OK.txt" GOTO END

"\\DC1LAB\Software Deployment\*.exe"
echo "Install Successful" > "c:\Install_OK.txt"

:END

Da sieht man mal, was für winzige Details manchmal num Nichterfolg führen können. Das Script wird nun beim Start des Clients per Computerrichtlinie ausgeführt und die Software wird problemlos installiert.

Vielen Dank nochmal für die Erklärung zu PUSHD, kann ich sicherlich mal gebrauchen.
Grüße, Michael