2011-04-27 104 views
17

我有一个批处理文件,它位于USB密钥上。我需要知道该批次的驱动器名称。Windows批处理脚本获取当前驱动器名称

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

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

+0

是否要批次所在的驱动器或当前工作目录的驱动器?这两个是不同的。 – Joey 2011-04-28 08:52:50

回答

27

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

实施例:

echo %CD% 

打印

E:\ 

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

更新:由于舍甫琴科在评论中说,如果你只是寻找路径的前三个字母,然后用它来代替%CD%:

%CD:~0,3% 

这将导致E:\,为例如,在驱动器上的任何地方。

+0

我试图配置geany编辑器来编译我的java文件,即使即时在usb上。我使用%CD%JDK \ bin \ javac“%f”但它没有工作。无论如何,你的答案是完美的,我会尽快接受你的答案。 ty – SBSTP 2011-04-27 23:46:42

+0

尝试%CD%\而不是%CD%。否则ITLL寻找E:JDK \ BIN \ javac的,而不是E:\ JDK \ BIN \ javac的 – 2011-04-27 23:48:50

+0

我做了一个简单的脚本, 'code' 关闭@echo 呼应%CD% 暂停 'code' 印刷Ç :\不是C: – SBSTP 2011-04-28 00:14:03

9

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

+0

不是true @ewall:参数0始终保留批处理文件位置的目录 - 如果有人从另一个驱动器调用该批处理文件,该目录可能不是当前工作目录。即使使用完全限定的路径名​​调用批处理文件也不会将当前工作目录更改为该路径。这就是为什么%cd%很有用 - 它显示了当前的工作目录,而不是批处理文件的位置。 – 2018-01-11 17:08:07

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. 
     ) 
     ) 
0

非常感谢@ Sparky3489,如果我只有一个USB闪存驱动器,我把这个你的算法中,权

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

我也改了标识的措辞

Echo %%i is a USB Flash Drive~! 

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

在快速启动窗口

然后通过设立其他路径 如

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 * * * * * * * * * *