Windows批处理脚本获取当前驱动器名称

SBS*_*STP 24 windows batch-file

我有一个批处理文件,它位于usb密钥上.我需要知道批处理所在的驱动器名称.

例如,如果它是E:\ mybatch.bat,它应该在F:\,G:\ etc ..当它打开时找到E:\相同的东西.

我怎么能在批处理脚本中这样做.(视窗)

Joh*_*hey 38

%CD%是你在找什么.它打印批处理文件的当前工作目录或运行它的命令.如果您的批处理文件位于驱动器的根目录下,它将只打印驱动器号,否则您将需要解析前2个字符.

例:

echo %CD%
Run Code Online (Sandbox Code Playgroud)

版画

E:\
Run Code Online (Sandbox Code Playgroud)

在安装到E:的闪存驱动器上.

更新:正如Andriy在评论中所说,如果您只是寻找路径的前三个字符,那么使用它而不是%CD%:

%CD:~0,3%
Run Code Online (Sandbox Code Playgroud)

E:\例如,这将导致驱动器上的任何位置.

  • `%CD:~0,2%`仅评估[当前]驱动器号和':'.因此,'%CD:〜0.3%`另外包括'\'. (20认同)
  • 使用%cd%时要非常小心。它是程序正在执行的文件夹,而不是程序正在执行的文件夹。如果将文件拖放到脚本或exe上以作为该程序的参数,Windows会破坏运行路径。WinXP使其从“ c:\ Documents and Settings \ username”文件夹运行,而Win7则使用删除的自变量文件的路径。您应将%〜d0%和%〜p0%用于批处理文件的驱动器和位置。 (4认同)

Kai*_* K. 19

M $文档" 使用批处理参数 "说:

修饰符:%~d0

说明:将%0扩展为驱动器号.


ewa*_*all 8

如果从.CMD/.BAT文件内部运行,则可以使用%~dp0获取当前/工作目录.这个更安全,因为它知道UNC路径等.此处提供了该变量语法的参考.

  • @ewall不是正确的:参数0始终保留批处理文件位置的目录-如果有人从另一个驱动器调用了批处理文件,则该目录可能不是当前的工作目录。即使调用具有完全限定路径名的批处理文件,也不会将当前工作目录更改为该路径。这就是%cd%有用的原因-它显示当前的工作目录,而不是批处理文件的位置。 (3认同)

Ale*_*ers 6

谨防

这个问题的现有答案不承认这个问题实际上是在问两个不同的事情:

  1. 当前工作目录的驱动器(“获取当前驱动器名称”);和
  2. 批处理文件的驱动器(“我需要知道批处理所在的驱动器名称”)。

当批处理文件从其驻留位置以外的工作目录启动时,这些可能会有所不同。因此,读者在确定哪种解决方案与他们的案例相关之前应该清楚区别。

当前工作目录的驱动器

%CD:~0,2%
Run Code Online (Sandbox Code Playgroud)

这将获取完整的当前工作目录并将其修剪为前两个字符,这将是一个驱动器号和一个冒号,例如C:.

批处理文件本身的驱动器

%~d0
Run Code Online (Sandbox Code Playgroud)

这会将批处理文件 (in %0)的完整路径修剪为一个驱动器号和一个冒号,例如C:.


(这是我对Kai K 回答的拒绝编辑的扩展版本)