【问题标题】:How to get current working directory of another drive in Batch?如何批量获取另一个驱动器的当前工作目录?
【发布时间】:2018-10-31 07:44:56
【问题描述】:

有没有办法获取驱动器的当前工作目录不是当前驱动器

Windows 存储每个驱动器的当前目录,%cd% 获取实际驱动器的当前工作目录。

如果我在批处理脚本中更改驱动器,我可以获得实际驱动器的当前工作目录:

cd w:\Downloads
cd c:\Windows
c:
(echo %cd%)
w:
(echo %cd%)

有没有办法在更改实际驱动器的情况下获取当前工作目录?

【问题讨论】:

  • 你的假设是错误的。在 Windows 中只有一个当前目录。为了与 MSDOS CMD.Exe 兼容,假设每个驱动器都有当前目录。
  • @CatCat 可能是“当前目录”而不是命名它的最佳选择。但是AFAIK“系统记住每个卷(驱动器号)的最后一个当前路径”(docs.microsoft.com/de-de/windows/desktop/FileIO/…)并且系统将这些“最后一个当前路径”存储在那些“奇怪的变量”(blogs.msdn.microsoft.com/oldnewthing/20100506-00/?p=14133)中。请参阅下面的答案
  • @CatCat:你是对的。查看我的答案的更新。

标签: windows batch-file cmd


【解决方案1】:

在搜索答案后,我在https://blogs.msdn.microsoft.com/oldnewthing/20100506-00/?p=14133下发现了一些关于奇怪变量的提示

使用%=c:%) 表示驱动器c 的当前目录或%=w:%) 表示w

或者在批处理脚本中:

cd c:\Windows
cd w:\Downloads
(echo %=c:%)
(echo %=w:%)

更新

正如@RossRidge 指出的那样,存储这些奇怪变量的不是 Windows,而是 DOS 命令处理器。那些奇怪的变量只在当前的“会话”中是已知的。 cd 也是如此(参见@Stephan 的评论)

打开两个 DOS 命令处理器:

在第一个 DOS 命令处理器中:

cd c:\Windows
cd w:\Downloads
(echo %=c:%)
    -> c:\Windows
(echo %=w:%)
    -> w:\Downloads
cd w:
    -> w:\Downloads

在第二个 DOS 命令处理器中:

(echo %=w:%)
    -> %=w:%       <- this variable is not set, not known
cd w:
    -> w:\

注意保存“当前目录”的方式不一致:cd 在进入 DOS 命令处理器后返回根目录。但是%=w:%直到目录改变才设置!

【讨论】:

  • 你还会注意到 Windows 实际上并没有存储每个驱动器的当前目录:“Win32 没有为每个驱动器单独的当前目录的概念,但是命令处理器想要保留旧的 MS-DOS 行为,因为人们已经习惯了它(以及依赖于它的批处理文件)。解决方案是将这个“每个驱动器当前目录”存储在环境中,使用奇怪的环境变量名称,这样它就不会t 与正常环境变量冲突。”
  • @RossRidge:感谢您的评论。查看我的答案的更新。
  • 如果你只是想知道,cd w: 也会告诉你。 (但在批处理脚本中,这些变量肯定更有帮助。)
  • @Stephan:感谢您的提示。查看我的答案的更新。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-05-28
  • 1970-01-01
  • 2016-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-18
相关资源
最近更新 更多