Команда Net Use с относительным целевым путем

1393
Jorge

У меня есть пакетный файл, расположенный в нескольких папках, и в этом файле мне нужно заменить старую subst T: .команду, net useпотому что устройства (диски) имеют разные свойства в Windows 7.

Тем не менее, я только нашел, что net useучитывает только абсолютные пути, такие как:

net use T: \\path\to\folder 

Я не могу работать с абсолютными путями, но net use T: .это не разрешено (выдает ошибку).

Есть ли способ выполнить net useкоманду из папки, чтобы она использовала текущий каталог .bat?

Я думаю, что лучшим решением для меня было бы иметь возможность получить полный путь (\ path \ to \ folder) с помощью пакетной команды. (переменные% cd% и chdir в этом случае не работают). Вопросы о получении текущего каталога или имени папки бесполезны, так как net useкоманда не допускает такие пути, какx:\path\to\folder

1
Что вы пытаетесь достичь? Создать замену 1: 1 для `subst`? Кроме того, я не очень понимаю, почему «субстрата» больше не достаточно. Не могли бы вы уточнить? Daniel B 8 лет назад 0
Конечно. Я не стал вдаваться в подробности, потому что это не входило в рамки вопроса. При запуске неподписанных исполняемых файлов с сетевого диска, созданного с помощью `subst` окон, всегда выдается сообщение:« издатель не может быть проверен ... », и мне нужно, чтобы сообщение не отображалось. Jorge 8 лет назад 0
@DanielB. Продолжение: Дело в том, что я снизил всю безопасность локальной сети и попробовал все, чтобы избежать этого сообщения, но оно продолжает появляться всякий раз, когда я его запускаю. Однако, если сетевой диск создается с помощью кнопки `computer -> map network drive`, даже если путь к соответствующей папке совпадает, он ведет себя иначе, чем` subst`. Windows больше не показывает мне сообщение таким образом. Так что мне нужна команда windows, чтобы сделать то, что делает эта кнопка. Jorge 8 лет назад 0

1 ответ на вопрос

1
Rik

The %~dp0 will give exactly what you're asking for (i.e. \\server\share\to\folder) . But you can't use it for your net use command. The net use command only accepts the \\server\share part to create a drive-letter.

You can do some work to strip off the \to\folder-part and add it later in your batch-files but it might be better to use the pushd \\server\share\to\folder command. With that command there is a temporary driver-letter created and the current directory is automatically changed to the correct folder. With the popd-command you're back where you started and the temporary drive is released.

So:

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

B.T.W. if you need to find out what temporary drive is created you can use the %~d0 in your batch-files. And %~dp0 for the complete path, and so on (or %cd% of course :)).

Я попробовал это, и это не работает. Такая команда: `net use T: c: \ path \ to \ folder` не работает. Чистое использование ожидает UNC-пути, такие как \\ server \ path Jorge 8 лет назад 0
@Jorge ~ dp0 должен дать вам полный UNC-путь, если вы поместите пакетный файл в сеть и запустите его по UNC-пути. Это не сработает, если вы начнете с буквы диска. Что вы получаете с эхо-примером? Rik 8 лет назад 0
@ Хорхе, подожди. Это может вызвать проблемы с подпапками. `~ dp0` даст вам полный путь к подпапке, который вы не можете использовать для` net use`. Вы должны были бы раздеть их. Но `pushd` не будет лучшим вариантом, или вам нужен именно` T: `. Если вы выполните `pushd \\ path \ to \ folder`, вы попадете в` Z: \ folder`, где `Z:` будет временной буквой диска. С `popd` вы возвращаетесь и` Z: `освобождается. Разве это не лучший вариант? (В противном случае я постараюсь найти способ раздеть папку для вас) Rik 8 лет назад 0
@Jorge Видя, что вы не можете использовать `\\ server \ share \ to \ folder` для команды` net use`, вы также не можете использовать `% ~ dp0`. Я полностью изменил свой ответ на использование `pushd`, которое было бы гораздо более подходящим в этой ситуации. Rik 8 лет назад 0
Хорошо, я не знаю, что я что-то упускаю, но это то, что происходит со мной: у меня уже есть \\ server \ general \ path, сопоставленный с X: \ (все на работе имеют это таким образом). Теперь мне нужна подпапка X: для сопоставления с T :. Итак: `\\ сервер \ общий \ путь \ конкретный \ путь -> T:`. Но когда я открываю командное окно из \\ server \ general \ path и выполняю bat-файл с `echo ~ dp0`, он дает мне X: \ specific \ path, поэтому` ~ dp0` у меня не работает. Jorge 8 лет назад 0
Мы использовали следующую команду: `subst T: .` (точка обозначает текущую папку). Кстати, каждый раз, когда я открываю командное окно из окна сетевого диска, субфолер создает новую букву диска! Я не знаю, почему это происходит. Это связано с этими временными буквами диска? Jorge 8 лет назад 0
@Jorge Если вы вводите букву диска в командной строке и переходите в каталог `X:`, `cd folder` и выполняете` subst T: .`, когда переходите к `T:` you ' Я буду в `X: \ folder`. Так что команда `subst T: .` отлично работает для меня. То, что при открытии каталога на сетевом диске вы получаете временную букву диска, это нормально. Cmd.exe обнаруживает, что у вас нет письма, поэтому назначает его временно. Это происходит только с командной строкой. Не с пакетным файлом. Для пакетного файла вам нужно сначала выполнить `pushd% ~ dp0`, чтобы получить временную букву диска. Rik 8 лет назад 0
Давайте [продолжим это обсуждение в чате] (http://chat.stackexchange.com/rooms/34530/discussion-between-jorge-and-rik). Jorge 8 лет назад 0
Но хотя `subst` создает новую букву диска с путем, он ведет себя иначе, как это прокомментировано в оригинальном сообщении Jorge 8 лет назад 0
`% ~ Dp0` ** ONLY ** дает квалифицированный UNC-путь, если вы действительно запускаете его из UNC-пути. Если вы запустите его из буклета диска, вы также получите букву диска. Но если вы запускаете его с буквы диска, вам не нужно `% ~ dp0`, потому что вы можете использовать относительный путь с subst. Так что если у вас есть буква диска, вы можете просто использовать `subst T: .`, а если у вас нет буклета диска, вам нужно использовать` pushd% ~ dp0`, чтобы получить букву, после чего вы можете использовать `subst T: .`-метод. Rik 8 лет назад 0