cmd - можно ли временно назначить доступную букву диска локальному пути? - PullRequest
1 голос
/ 20 сентября 2011

Используя cmd в Windows, легко назначить букву диска UNC-пути с помощью pushd:

C:\Windows\> pushd \\server\share\path
Y:\> popd
C:\Windows\>

Однако я бы хотел сделать то же самое с локальными путями , потому что это сократит пути к файлам, и мне придется использовать команды, которые не поддерживают файлы с очень длинным путем.

Идея состоит в следующем без G:, жестко закодированного в сценарии, поскольку его можно использовать на другом компьютере.

subst G: .
pushd G:\
(other commands)
popd
subst G: /d

Я пытался pushd \\?\%CD% но, к сожалению, это не работает ...

У кого-нибудь есть магический трюк для этого?

Спасибо

Ответы [ 2 ]

5 голосов
/ 23 ноября 2011

Если вы используете Windows 7, вам не нужно использовать буквы дисков.Вместо этого вы можете создать символическую ссылку.

Для ссылки на папку используйте:

cd <folder_you_want_the_link_in>
mklink /D \MyLinkedFolder \Folder\Folder\Folder\Folder\MyLinkedFolder
0 голосов
/ 20 сентября 2011

Это временное решение, которое мне не нравится, но я пытаюсь программно найти первую доступную букву диска, начиная с Z:, как это делает pushd.Я полагаю, что он может легко потерпеть неудачу.

call:find_first_available_drive
subst %drive% .
pushd %drive%\
(other commands)
popd
subst %drive% /d

:find_first_available_drive
@pushd Z: 2>NUL && popd || (set drive=Z:& goto:eof)
@pushd Y: 2>NUL && popd || (set drive=Y:& goto:eof)
@pushd X: 2>NUL && popd || (set drive=X:& goto:eof)
@pushd W: 2>NUL && popd || (set drive=W:& goto:eof)
@pushd V: 2>NUL && popd || (set drive=V:& goto:eof)
@pushd U: 2>NUL && popd || (set drive=U:& goto:eof)
@pushd T: 2>NUL && popd || (set drive=T:& goto:eof)
@pushd S: 2>NUL && popd || (set drive=S:& goto:eof)
@pushd R: 2>NUL && popd || (set drive=R:& goto:eof)
@pushd Q: 2>NUL && popd || (set drive=Q:& goto:eof)
@pushd P: 2>NUL && popd || (set drive=P:& goto:eof)
@pushd O: 2>NUL && popd || (set drive=O:& goto:eof)
@pushd N: 2>NUL && popd || (set drive=N:& goto:eof)
@pushd M: 2>NUL && popd || (set drive=M:& goto:eof)
@pushd L: 2>NUL && popd || (set drive=L:& goto:eof)
@pushd K: 2>NUL && popd || (set drive=K:& goto:eof)
@pushd J: 2>NUL && popd || (set drive=J:& goto:eof)
@pushd I: 2>NUL && popd || (set drive=I:& goto:eof)
@pushd H: 2>NUL && popd || (set drive=H:& goto:eof)
@pushd G: 2>NUL && popd || (set drive=G:& goto:eof)
@pushd F: 2>NUL && popd || (set drive=F:& goto:eof)
@pushd E: 2>NUL && popd || (set drive=E:& goto:eof)
@pushd D: 2>NUL && popd || (set drive=D:& goto:eof)
@pushd C: 2>NUL && popd || (set drive=C:& goto:eof)
@pushd B: 2>NUL && popd || (set drive=B:& goto:eof)
@pushd A: 2>NUL && popd || (set drive=A:& goto:eof)
@set drive=&goto:eof
...