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

时间:2011-04-27 23:37:41

标签: windows batch-file

我有一个usb密钥上的批处理文件。我需要知道批次所在的驱动器名称。

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

我怎么能在批处理脚本中这样做。 (Windows)中

8 个答案:

答案 0 :(得分:36)

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

示例:

echo %CD%

打印

E:\

安装在E :.

的闪存驱动器上

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

%CD:~0,3%

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

答案 1 :(得分:17)

M $文档“Using batch parameters”说:

  

修饰符:%~d0

     

描述:将%0扩展为驱动器号。

答案 2 :(得分:9)

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

答案 3 :(得分:1)

您可以使用此功能从任何驱动器中找到所有USB驱动器盘符。

@echo off

for /F "usebackq tokens=1,2,3,4 " %%i in (`wmic logicaldisk get caption^,description^,drivetype 2^>NUL`) do (

if %%l equ 2 (
echo %%i is a USB drive.
        )
        )

答案 4 :(得分:0)

非常感谢@ Sparky3489,如果我只有一个USB闪存盘,我把它放在你的算法中,就在

之后
echo %%i is a USB drive.
Set FlashDrive=%%I

我还将标识符的措辞改为

Echo %%i is a USB Flash Drive~!

然后,在算法之后,{和外部},我可以添加闪存驱动器路径,例如......

Set FlashPath=%FlashDrive%\Users\Public\Documents

然后通过设置其他路径 如

Set SourcePath=C:\Users\Public\Documents

我可以为闪存驱动器制作批处理文件备份,(可以通过快速启动窗口中的相关图标通过Windows快捷方式调用〜搜索"快速启动",如果怀疑是什么我正在谈论。)

Rem  * * * * * * * * * Start Batch File * * * * * * * * * *
@Echo OFF
cls
Echo FlashDrive UpDater for
Echo.
Echo Excel, Word ...
Echo * * * * * * * * * ~ Excel SpreadSheets ~ * * * * * * * * *
XCopy /D /I /V /Y /U /S "%SourcePath%\Excel Documents\*.*" "%FlashPath%\Excel Documents\"
Echo * * * * * * * * * ~ Word Documents ~ * * * * * * * * *
XCopy /D /I /V /Y /U /S "%SourcePath%\Word Documents\*.*" "%FlashPath%\Word Documents\"
Echo.
Echo.
Echo FlashDrive = %FlashDrive%
Echo FlashPath = %FlashPath%
Echo.
Echo * Bonus Switch Info * * * * *
Echo * XCopy Switch  /D ~ Copies Files Changed On or After the Specified Date.
Echo *          {If no Date is Given, Copies only those Files whose
Echo *          Source Time is Newer than the Destination Time}.
Echo * XCopy Switch  /I ~ Copies More than One File to Destination (Assumes Destination is a Directory)
Echo * XCopy Switch  /S ~ Copies Directories and Subdirectories Except Empty Ones
Echo * XCopy Switch  /V ~ Verifies Each New File.
Echo * XCopy Switch  /U ~ Copies only Files that Already Exist in Destination.
Echo * XCopy Switch  /Y ~ Suppresses Prompting to Confirm You Want to Overwrite an Existing Destination File.
Echo.
Rem for More Info on XCopy Switches GoTo http://support.microsoft.com/kb/128756
Echo Directory Path = %~DP0
Echo.
Echo * Batch File Name = %0 *
Echo.
Rem Echo %CD:~0,2%, {Returns "Drive Letter & Colon"}
Rem Echo %CD:~0,3%, {Returns "Drive Letter & Colon & BackSlash"}
Pause
cls
Pause
Exit
Rem  * * * * * * * * * End Batch File * * * * * * * * * *

答案 5 :(得分:0)

%CD:~0,2%

这将为您提供C:格式的当前驱动器,即当前工作目录中的前2个字符。

C:\Users\ashish>ECHO %CD:~0,2%
C:

D:\projects>ECHO %CD:~0,2%
D:

D:\projects>ECHO %CD%
D:\projects

答案 6 :(得分:0)

当心

该问题的现有答案并未承认该问题实际上是在询问两件事:

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

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

当前工作目录的驱动器

%CD:~0,2%

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

批处理文件本身的驱动器

%~d0

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


(这是我的rejected editKai K's answer的扩展版本)

答案 7 :(得分:0)

就像其他人所说的%~d0

再说一遍是没有意义的,但是如果您偶然发现了这个线程,那么它将被CD到批处理文件的目录中。

@echo off
set "fullDir=C:\Program Files"
cd /d %fullDir%                                &rem changes to the full directory 'C:\Program Files'.
echo You're now cd' in the '%cd%' directory.
pause

此外,如果您要从另一驱动器(例如Z:)运行批处理文件,那么该驱动器将执行此操作。

cd /d %~d0                                     &rem Changes to the current directory
echo You're now cd' in the '%cd%' directory.   &rem This is now your full path of the batch file cd' into.
pause