Wie kann eine Batchdatei von einer Netzwerkfreigabe ohne die Meldung "UNC-Pfad wird nicht unterstützt" ausgeführt werden?

84

Ich versuche, eine Batchdatei von einer Netzwerkfreigabe auszuführen, erhalte jedoch weiterhin die folgende Meldung: "UNC-Pfad wird nicht unterstützt. Standardmäßig wird das Windows-Verzeichnis verwendet." Die Batch-Datei befindet sich auf \\Server\Soft\WPX5\install.bat. Während ich als Administrator angemeldet bin, navigiere ich von meinem Windows 7-Desktop \\Server\Soft\WP15\zu install.bat und doppelklicke darauf. In diesem Fall erhalte ich die Meldung "UNC-Pfad wird nicht unterstützt". Botschaft. Ich habe online einige Vorschläge gefunden, die besagen, dass das Mapping-Laufwerk nicht funktioniert, aber die Verwendung eines symbolischen Links löst dieses Problem, aber der symbolische Link hat bei mir nicht funktioniert. Nachstehend finden Sie den Inhalt meiner Batchdatei. Ich würde mich über jede Unterstützung freuen, die mir dabei helfen kann, das zu erreichen, was ich versuche. Grundsätzlich möchte ich in der Lage sein, die Batch-Datei von auszuführen \\Server\Soft\WP15\install.bat.

Batch-Dateiinhalt

mklink /d %userprofile%\Desktop\WP15 \\server\soft\WP15
\\server\soft\WP15\setup.exe
robocopy.exe "\\server\soft\WP15\Custom" /copyall "C:\Program Files (x86)\WP\Custom Templates"
Regedit.exe /s \\server\soft\WPX5\Custom\Migrate.reg

Wie entferne ich den symbolischen Link nach Abschluss der Installation?

Eintopf
quelle
2
Jahre später, aber vielleicht nützlich für jemand anderen: Warum verweisen Sie nach dem Erstellen der symbolischen Verknüpfung weiterhin auf den ursprünglichen Pfad? Der Sinn der symbolischen Verknüpfung besteht darin, Ihnen einen lokalen Pfad zu geben, den Sie stattdessen verwenden können. Zum Beispiel sagen Sie nicht "\\ server \ soft \ WP15 \ setup.exe", sagen Sie „% userprofile% \ Desktop \ WP15 \ setup.exe
ToolmakerSteve
Ernsthaft, dies ist eine ServerFault.com-Frage
Junchen Liu

Antworten:

134

PUSHD und POPD sollten in Ihrem Fall helfen.

@echo off
:: Create a temporary drive letter mapped to your UNC root location
:: and effectively CD to that location
pushd \\server\soft

:: Do your work
WP15\setup.exe
robocopy.exe "WP15\Custom" /copyall "C:\Program Files (x86)\WP\Custom Templates"
Regedit.exe /s WPX5\Custom\Migrate.reg

:: Remove the temporary drive letter and return to your original location
popd

Geben Sie PUSHD /?in der Befehlszeile weitere Informationen ein.

Dbenham
quelle
2
Vielen Dank für die schnellen Antworten und Vorschläge. Ich hatte gehofft, Ihr Vorschlag würde funktionieren, aber leider hat es bei mir nicht funktioniert. Ich habe die gleiche Meldung erhalten: "... UNC-Pfade werden nicht unterstützt. Standardmäßig wird das Windows-Verzeichnis verwendet." Außerdem wurde im Dialogfeld Benutzerkontensteuerung auf Ja oder Nein geklickt, obwohl ich die Datei ausgeführt habe, während ich als Mitglied der Administratorgruppe angemeldet war.
Eintopf
25
@Stew Geben Sie am Anfang Ihrer .bat-Datei Folgendes ein: Damit pushd %~dp0sollte das Verzeichnis in das Verzeichnis geändert werden, in dem sich Ihre bat-Datei befindet. Die Warnung wird weiterhin ausgedruckt, sollte dann aber wie gewohnt funktionieren. Wenn die bat-Datei an anderer Stelle '% ~ dp0' verwendet, kann dies zu Problemen führen. In diesem Fall können Sie feststellen, ob %~dp0mit '//' am Anfang der bat-Datei begonnen wird, und wenn ja pushd, und dann ausführen Dann wieder Fledermausdatei goto :EOF. Dadurch wird es im neu zugeordneten Verzeichnis ausgeführt.
Grant Peters
Wird der Cmd auf dem Remotecomputer oder lokal ausgeführt?
Dingxin Xu
@ DingxinXu - Der Remote-Code wird lokal ausgeführt. Wenn Sie den Code auf dem Remotecomputer ausführen möchten, benötigen Sie etwas wie PsExec .
Dbenham
3
@balki - Ja, fügen Sie die Remote-Befehle in ein anderes Skript ein. Nach PUSHDführen Sie das zweite Skript über CMD /C, und folgen Sie, dass mit POPD. Die Steuerung kehrt nach dem CMD /CBeenden des Skripts zum übergeordneten Skript zurück , auch wenn es durch STRG-C beendet wurde.
Dbenham
27

Es gibt eine Registrierungseinstellung , um diese Sicherheitsüberprüfung zu vermeiden (die Verwendung erfolgt jedoch auf eigenes Risiko):

Unter dem Registrierungspfad

   HKEY_CURRENT_USER
     \ Software
       \ Microsoft
         \ Command Processor

Fügen Sie den Wert DisableUNCCheck REG_DWORD hinzu und setzen Sie den Wert auf 0 x 1 (Hex).

Hinweis: Unter Windows 10 Version 1803 befindet sich die Einstellung anscheinend unter HKLM: HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Command Processor

Vinzz
quelle
1
Ich
weiß
Danke, es ist hilfreich. Unter Windows 10 1803 ist es jedoch HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Command Processor, wie @aoh hervorhob.
Edwin Yip
Ich werde die Antwort dann aktualisieren; danke für die Präzision
Vinzz
26

Ich denke, das clsist die beste Antwort. Die UNC-Nachricht wird ausgeblendet, bevor sie angezeigt werden kann. Ich habe es mit einem @pushd %~dp0Recht danach kombiniert, so dass es so aussieht, als würde man das Skript öffnen und den Ort in einem Schritt zuordnen, um weitere UNC-Probleme zu vermeiden.

cls
@pushd %~dp0
:::::::::::::::::::
:: your script code here
:::::::::::::::::::
@popd

Anmerkungen:

pushd ändert Ihr Arbeitsverzeichnis in den Speicherort der Skripte auf dem neuen zugeordneten Laufwerk.

popd am Ende, um das zugeordnete Laufwerk zu bereinigen.

Grallen
quelle
4
Ich brauchte das popdam Ende (Windows 7), sonst blieben die zugeordneten Laufwerke hängen, nachdem das Fenster geschlossen wurde.
Patrick
1
Funktioniert gut. Danke dir.
Jonas_Hess
1
Sollte unter Windows 10 funktionieren. Es ist immer noch die "Eingabeaufforderung".
Grallen
11

Grundsätzlich können Sie es nicht über einen UNC-Pfad ausführen, ohne diese Nachricht zu sehen.

Normalerweise setze ich einfach ein CLSoben in das Skript, damit ich diese Nachricht nicht sehen muss. Geben Sie dann den vollständigen Pfad zu den Dateien in der Netzwerkfreigabe an, die Sie verwenden müssen.

Aphorie
quelle
1
Danke dir. Ich werde dies als letzte Option versuchen, wenn es keine andere Lösung gibt.
Eintopf
@ jameslr Antwort wird funktionieren, aber es ist mehr Arbeit (Tippen) als ich normalerweise bereit bin zu tun. Es reicht mir also, nur den Bildschirm zu löschen, um den Fehler zu beseitigen. :)
Aphorie
8

Ich musste in der Lage sein, nur im Windows Explorer die Serverfreigabe zu durchsuchen und dann auf die Batchdatei zu doppelklicken. @dbenham führte mich zu einer einfacheren Lösung für mein Szenario (ohne die popdSorgen):

:: Capture UNC or mapped-drive path script was launched from
set NetPath=%~dp0

:: Assumes that setup.exe is in the same UNC path
%NetPath%setup.exe

:: Note that NetPath has a trailing backslash ("\")
robocopy.exe "%NetPath%Custom" /copyall "C:\Program Files (x86)\WP\Custom Templates"
Regedit.exe /s %NetPath%..\WPX5\Custom\Migrate.reg

:: I am not sure if WPX5 was typo, so use ".." for parent directory
set NetPath=
pause
JayRO-GreyBeard
quelle
@ Peter-Mortensen, die Kommentare im Skript 4x bearbeitet, um das erste Wort groß zu schreiben? Eine Bearbeitung wert? Warum nicht am Ende einen Punkt setzen, um daraus einen Satz zu machen? Wie wäre es: Da es sich nur um einen Kommentar handelt, verwende ich absichtlich KEINE Großbuchstaben im ersten Wort in Kommentaren, AUSSER in Wertschätzungen und Variablen (oder Hervorhebungen), um das Verständnis zu verbessern.
JayRO-GreyBeard
4

Anstatt den Stapel direkt vom Explorer aus zu starten, erstellen Sie eine Verknüpfung zum Stapel und legen Sie das Startverzeichnis in den Eigenschaften der Verknüpfung auf einen lokalen Pfad wie% TEMP% oder ähnliches fest.

Verwenden Sie den Befehl rmdir, um die symbolische Verknüpfung zu löschen.

jameslr
quelle
1
Dies funktioniert jedoch nur, wenn Sie über eine Verknüpfung starten möchten. Es hilft nicht, wenn Sie über eine Befehlszeile ausführen oder von einer anderen Batchdatei aus aufrufen möchten.
Aphorie
2
Wenn Sie von einem anderen Stapel oder einer anderen Befehlszeile aus anrufen möchten, können Sie wie folgt aufrufen: start / d% TEMP% \\ Server \ Soft \ WP15 \ install.bat
jameslr
2

Ich bin kürzlich auf dasselbe Problem gestoßen, als ich mit einer Batchdatei auf einem Netzwerkfreigabe-Laufwerk in Windows 7 gearbeitet habe.

Eine andere Möglichkeit, die für mich funktioniert hat, bestand darin, den Server über Windows Explorer einem Laufwerk zuzuordnen: Extras -> Netzwerklaufwerk zuordnen. Geben Sie ihm einen Laufwerksbuchstaben und einen Ordnerpfad zu \ yourserver. Da ich mit der Netzwerkfreigabe arbeite, ist die Zuordnung häufig einfacher und der Fehler "UNC-Pfad wird nicht unterstützt" wurde behoben.

Kai
quelle
2

Meine Situation ist nur ein bisschen anders. Ich führe beim Start eine Batchdatei aus, um die neueste Version interner Geschäftsanwendungen zu verteilen.

In dieser Situation verwende ich den Windows-Registrierungsausführungsschlüssel mit der folgenden Zeichenfolge

cmd /c copy \\serverName\SharedFolder\startup7.bat %USERPROFILE% & %USERPROFILE%\startup7.bat

Dadurch werden beim Start zwei Befehle in der richtigen Reihenfolge ausgeführt. Kopieren Sie zuerst die Batchdatei lokal in ein Verzeichnis, zu dem der Benutzer berechtigt ist. Führen Sie dann dieselbe Batchdatei aus. Ich kann ein lokales Verzeichnis c: \ InternalApps erstellen und alle Dateien aus dem Netzwerk kopieren.

Dies ist wahrscheinlich zu spät, um die Frage des Originalplakats zu lösen, aber es kann jemand anderem helfen.

James
quelle
1

Dies ist der RegKey, den ich verwendet habe:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor]
"DisableUNCCheck"=dword:00000001
FreeSoftwareServer
quelle
0

Meine env windows10 2019 lts Version und ich füge diese beiden Binray-Daten hinzu, behebe diesen Fehler

Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command ProcessorDisableUNCCheck-Wert 1 Computer\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Command Processor DisableUNCCheck-Wert 1

Zhui Wang
quelle
0

Dies ist ein sehr alter Thread, aber ich benutze immer noch Windows 7. :-)

Es gibt einen Punkt, den anscheinend niemand berücksichtigt hat, der wahrscheinlich auch Windows 10-Benutzern helfen würde.

Wenn Befehlserweiterungen aktiviert sind, akzeptiert der PUSHD-Befehl zusätzlich zum normalen Laufwerksbuchstaben und -pfad Netzwerkpfade.

Die naheliegende und einfachste Antwort könnte darin bestehen, Befehlserweiterungen im Batch-Skript zu aktivieren, wenn Sie PUSHD verwenden möchten. Zumindest sollte dies die Probleme verringern, die bei der Verwendung von PUSHD mit einem Netzwerkpfad auftreten können.

Ed999
quelle
-1

Das Bearbeiten von Windows-Registrierungen lohnt sich nicht und ist nicht sicher. Verwenden Map network driveund laden Sie die Netzwerkfreigabe so, als ob sie von einem Ihrer lokalen Laufwerke geladen würde.

Geben Sie hier die Bildbeschreibung ein

Adham Sabry
quelle
1
Wie unterscheidet sich das von Kai's Antwort ?
SomethingDark
Ich habe es nicht bemerkt, vielleicht sagen Screenshots mehr als tausend Worte, die einen Unterschied machen?
Adham Sabry