Net Use-Befehl mit relativem Zielpfad

1485
Jorge

Ich habe eine Batchdatei, die sich in mehreren Ordnern befindet. In dieser Datei muss ich den alten subst T: .Befehl ersetzen, net useda die Einheiten (Laufwerke) unterschiedliche Eigenschaften in Windows 7 haben.

Ich habe jedoch nur festgestellt, dass net usenur absolute Pfade zulässig sind, wie zum Beispiel:

net use T: \\path\to\folder 

Ich kann nicht mit absoluten Pfaden arbeiten, ist aber net use T: .nicht erlaubt (es wird ein Fehler ausgegeben).

Gibt es eine Möglichkeit, den net useBefehl aus einem Ordner auszuführen, sodass das aktuelle .bat-Verzeichnis verwendet wird?

Ich denke, die beste Lösung für mich wäre es, den absolut qualifizierten Pfad (\ path \ to \ folder) mit einem Batchbefehl zu erhalten. (Die Variablen% cd% und chdir funktionieren in diesem Fall nicht.) Fragen zum Abrufen des aktuellen Verzeichnis- oder Ordnernamens sind nicht hilfreich, da der net useBefehl keine Pfade wie zx:\path\to\folder

1
Was versuchst du zu erreichen? Erstellen Sie einen 1: 1-Ersatz für `subst`? Ich verstehe auch nicht wirklich, warum "subst" nicht mehr ausreicht. Könnten Sie vielleicht etwas näher erläutern? Daniel B vor 8 Jahren 0
Na sicher. Ich ging nicht ins Detail, weil es nicht in den Rahmen der Frage fiel. Beim Ausführen von nicht signierten ausführbaren Dateien von einem Netzlaufwerk, das mit `subst`-Fenstern erstellt wurde, wird immer die folgende Meldung angezeigt:" Der Herausgeber konnte nicht überprüft werden ... ", und ich muss die Meldung nicht anzeigen. Jorge vor 8 Jahren 0
@DanielB. Fortsetzung: Die Sache ist die, dass ich die gesamte lokale Netzwerksicherheit verringert und alles versucht habe, um diese Meldung zu vermeiden. Sie wird jedoch immer dann angezeigt, wenn ich sie ausführe. Wenn das Netzlaufwerk jedoch über die Schaltfläche "Computer -> Netzlaufwerk zuordnen" erstellt wird, verhält es sich auch, wenn der zugehörige Ordnerpfad derselbe ist, anders als bei "Subst". Windows zeigt mir die Nachricht auf diese Weise nicht mehr an. Was ich also brauche, ist ein Windows-Befehl, der diese Schaltfläche ausführt. Jorge vor 8 Jahren 0

1 Antwort auf die Frage

1
Rik

Das %~dp0gibt genau das, wonach Sie fragen (dh \\server\share\to\folder). Aber Sie können es nicht für Ihren net useBefehl verwenden. Der net useBefehl akzeptiert nur das \\server\shareTeil, um einen Laufwerksbuchstaben zu erstellen.

Sie können etwas Arbeit erledigen, um den \to\folder-part zu entfernen und später in Ihren Batch-Dateien hinzuzufügen, aber es ist möglicherweise besser, den pushd \\server\share\to\folderBefehl zu verwenden. Mit diesem Befehl wird ein temporärer Treiberbuchstabe erstellt und das aktuelle Verzeichnis wird automatisch in den richtigen Ordner geändert. Mit dem popd-Befehl sind Sie wieder da, wo Sie angefangen haben, und das temporäre Laufwerk wird freigegeben.

So:

C:\>  C:\>pushd \\wdmycloud\public\new folder  Z:\New folder>::do your thing Z:\New folder> Z:\New folder>popd  C:\> 

BTW Wenn Sie herausfinden möchten, welches temporäre Laufwerk erstellt wird, können Sie das %~d0in Ihren Batch-Dateien verwenden. Und %~dp0für den kompletten Pfad und so weiter (oder %cd%natürlich :)).

Ich habe es ausprobiert und es funktioniert nicht. Ein Befehl wie dieser: `net use T: c: \ path \ to \ folder` funktioniert nicht. Die Netto-Nutzung erwartet UNC-Pfade wie \\ Server \ Pfad Jorge vor 8 Jahren 0
@Jorge Das ~ dp0 sollte Ihnen einen vollständig qualifizierten UNC-Pfad geben, wenn Sie die Batchdatei im Netzwerk ablegen und über den UNC-Pfad starten. Es funktioniert nicht, wenn Sie es bereits mit einem Laufwerksbuchstaben starten. Was bekommst du mit dem Echo-Beispiel? Rik vor 8 Jahren 0
@Jorge O warte. Dies kann zu Problemen mit Unterordnern führen. Mit "~ dp0" erhalten Sie den vollständigen Unterordnerpfad, den Sie nicht für "net use" verwenden können. Sie müssten die entfernen. Aber "Pushd" wäre keine bessere Option, oder Sie brauchen es, um "T:" zu sein. Wenn Sie `pushd \\ path \ to \ folder` tun, landen Sie in` Z: \ folder`, wobei `Z:` ein temporärer Laufwerksbuchstabe ist. Mit `popd` gehst du zurück und` Z: `wird freigegeben. Ist das nicht eine bessere Option? (Ansonsten versuche ich einen Weg zu finden, den Ordner für Sie zu entfernen) Rik vor 8 Jahren 0
@Jorge Da dies nicht der Fall ist, können Sie `\\ server \ share \ to \ folder` nicht für den` net use`-Befehl verwenden. Sie können auch `% ~ dp0` nicht verwenden. Ich habe meine Antwort komplett auf "pushd" geändert, was in dieser Situation viel besser geeignet wäre. Rik vor 8 Jahren 0
Ok, ich weiß nicht, ob mir etwas fehlt, aber es ist das, was mir passiert: Ich habe bereits \\ Server \ General \ Path auf X: \ abgebildet (alle auf der Arbeit haben es so). Was ich jetzt brauche, ist ein Unterordner von X:, der T: zugeordnet werden soll. Also: `\\ Server \ Allgemein \ Pfad \ Bestimmter \ Pfad -> T:`. Wenn ich jedoch ein Befehlsfenster von \\ Server \ General \ Path öffne und eine Bat-Datei mit "echo ~ dp0" ausführe, wird mir X: \ Specific \ path angezeigt, sodass "~ dp0" für mich nicht funktioniert. Jorge vor 8 Jahren 0
Was wir verwendet haben, war dieser Befehl: `subst T: .` (wobei der Punkt den aktuellen Ordner bedeutet). Wenn ich ein Befehlsfenster aus einem Unterordner des Netzwerklaufwerks öffne, wird übrigens ein neuer Laufwerksbuchstabe erstellt! Ich weiß nicht, warum das passiert. Ist es mit diesen vorläufigen Fahrbuchstaben verbunden? Jorge vor 8 Jahren 0
@Jorge Wenn Sie sich in einer Eingabeaufforderung auf einem Laufwerksbuchstaben befinden, wechseln Sie in ein Verzeichnis `X:`, `cd folder` und tun` subst T: .`, wenn Sie zu `T:` you 'gehen. werde in `X: \ ordner` sein. Der Befehl "subst T:." Funktioniert also gut für mich. Das Öffnen eines Ordner-Verzeichnisses auf einem Netzlaufwerk, das einen temporären Laufwerksbuchstaben enthält, ist normal. Die cmd.exe stellt fest, dass Sie keinen Buchstaben haben, und weist diesen vorübergehend zu. Dies geschieht nur mit einer Eingabeaufforderung. Nicht bei einer Batchdatei. Bei einer Batch-Datei müssen Sie zuerst einen "pushd% ~ dp0" ausgeben, um den temporären Laufwerksbuchstaben zu erhalten. Rik vor 8 Jahren 0
Lassen Sie uns [diese Diskussion im Chat fortsetzen] (http://chat.stackexchange.com/rooms/34530/discussion-between-jorge-and-rik). Jorge vor 8 Jahren 0
Obwohl "subst" einen neuen Laufwerksbuchstaben mit dem Pfad erstellt, verhält es sich anders als im ursprünglichen Beitrag kommentiert Jorge vor 8 Jahren 0
Der "% ~ dp0" ** ONLY ** gibt einen qualifizierten UNC-Pfad an, wenn Sie ihn wirklich von einem UNC-Pfad aus ausführen. Wenn Sie es von einem Laufwerksbuchstaben ausführen, erhalten Sie auch einen Laufwerksbuchstaben. Wenn Sie es jedoch von einem Laufwerksbuchstaben ausführen, brauchen Sie nicht "% ~ dp0", da Sie den relativen Pfad mit subst verwenden können. Wenn Sie also einen Laufwerksbuchstaben haben, können Sie einfach "subst T:." Verwenden, und wenn Sie KEINEN Laufwerksbuchstaben haben, müssen Sie "pushd% ~ dp0" verwenden, um einen Brief zu erhalten. Danach können Sie das "subst T:" .`-Methode. Rik vor 8 Jahren 0