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

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

Ausgedruckt am: 22.11.2024 um 22:11 Uhr

Snowman25
Lösung Snowman25 29.06.2015 aktualisiert um 15:46:02 Uhr
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
Biber
Lösung Biber 29.06.2015 aktualisiert um 15:53:36 Uhr
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-
Paulikid
Paulikid 29.06.2015 um 15:52:51 Uhr
Goto Top
Hallo @Snowman25,

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

Gruß,

@Paulikid
Macharul
Lösung Macharul 25.10.2016 aktualisiert um 17:43:33 Uhr
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.
Paulikid
Paulikid 25.10.2016 um 18:10:43 Uhr
Goto Top
Ich würde tippen VOR dem UNC-Pfad, also als zweite Zeile...
Macharul
Macharul 26.10.2016 um 08:28:37 Uhr
Goto Top
Da ändert sich leider gar nichts - ich bekomme dieselbe Fehlermeldung...
Snowman25
Snowman25 26.10.2016 um 11:15:38 Uhr
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
Macharul
Macharul 26.10.2016 aktualisiert um 11:26:22 Uhr
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