我有一个usb密钥上的批处理文件。我需要知道批次所在的驱动器名称。
例如,如果它是E:\ mybatch.bat它应该找到E:\同样的东西F:\,G:\ etc ..当它打开时。
我怎么能在批处理脚本中这样做。 (Windows)中
答案 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)
该问题的现有答案并未承认该问题实际上是在询问两件事:
从工作目录(而不是其驻留位置)启动批处理文件时,这些文件可能会有所不同。因此,在确定哪种解决方案与他们的案情相关之前,读者应先清楚其区别。
%CD:~0,2%
这将获取当前的完整工作目录,并将其修剪为前两个字符,这将是一个驱动器号和一个冒号,例如C:
。
%~d0
这会将批处理文件的完整路径(在%0
中修剪为一个驱动器号和一个冒号,例如C:
。
(这是我的rejected edit到Kai 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