cmd – 是否有可能临时分配一个可用的驱动器号到本地path?

Windows上使用cmd,使用pushd可以很容易地将驱动器号分配给UNCpath:

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

不过,我希望能够做到与本地path相同,因为它会缩短文件path,我不得不使用不支持具有很长path的文件的命令。

这个想法在脚本中没有G:硬编码,因为它可以在另一台机器上使用。

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

我试过pushd \\?\%CD%但不幸的是它不工作…

有没有人有这个魔术?

谢谢

Solutions Collecting From Web of "cmd – 是否有可能临时分配一个可用的驱动器号到本地path?"

如果你在Windows 7上,你不必使用驱动器号。 您可以改为创建一个符号链接。

要链接到一个文件夹使用:

 cd <folder_you_want_the_link_in> mklink /D \MyLinkedFolder \Folder\Folder\Folder\Folder\MyLinkedFolder 

这是一个我不喜欢的临时解决方案,但试图从Z:开始以编程方式查找第一个可用的驱动器盘符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