Windows 批处理脚本获取当前驱动器名称
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/5811966/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Windows Batch Script Get Current Drive name
提问by SBSTP
I have a batch file which is on a usb key. I need to know the drive name the batch is in.
我有一个位于 USB 密钥上的批处理文件。我需要知道批次所在的驱动器名称。
Example, if it's E:\mybatch.bat it should find E:\ same thing for F:\, G:\ etc.. when it's opened.
例如,如果它是 E:\mybatch.bat,它应该在打开时找到 E:\ 与 F:\、G:\ 等相同的东西。
How could I do that in batch script. (Windows)
我怎么能在批处理脚本中做到这一点。(视窗)
回答by John Leehey
%CD%
is what you're looking for. It prints the current working directory of the batch file or command running it. If your batch file is on the root of the drive, it will just print the drive letter, otherwise you'll have to parse the first 2 characters.
%CD%
就是你要找的。它打印批处理文件或运行它的命令的当前工作目录。如果您的批处理文件在驱动器的根目录上,它只会打印驱动器号,否则您必须解析前 2 个字符。
Example:
例子:
echo %CD%
prints
印刷
E:\
on a flash drive mounted to E:.
在安装到 E: 的闪存驱动器上。
Update: As Andriy said in the comments, if you are just looking for the first three characters of the path, then use this instead of %CD%:
更新:正如 Andriy 在评论中所说,如果您只是在寻找路径的前三个字符,那么使用它而不是 %CD%:
%CD:~0,3%
This will result in E:\
, for example, anywhere on the drive.
E:\
例如,这将导致驱动器上的任何位置。
回答by Kai K.
M$ documentation "Using batch parameters" says:
M$ 文档“使用批处理参数”说:
Modifier: %~d0
Description: Expands %0 to a drive letter.
修饰符:%~d0
描述:将 %0 扩展为驱动器号。
回答by ewall
回答by Alex Peters
Beware
谨防
The existing answers to this question don't acknowledge that the question is actually asking about two different things:
这个问题的现有答案不承认这个问题实际上是在问两个不同的事情:
- the drive of the current working directory(“Get Current Drive name”); and
- the drive of the batch file(“I need to know the drive name the batch is in”).
- 当前工作目录的驱动器(“获取当前驱动器名称”);和
- 批处理文件的驱动器(“我需要知道批处理所在的驱动器名称”)。
These can be different when the batch file is started from a working directory other than its residing location. Readers should therefore be clear on the difference before determining which solution is relevant to their case.
当批处理文件从其驻留位置以外的工作目录启动时,这些可能会有所不同。因此,读者在确定哪种解决方案与他们的案例相关之前应该清楚区别。
Drive of the current working directory
当前工作目录的驱动器
%CD:~0,2%
This takes the full current working directory and trims it down to the first two characters, which will be a drive letter and a colon, e.g. C:
.
这将获取完整的当前工作目录并将其修剪为前两个字符,这将是一个驱动器号和一个冒号,例如C:
.
Drive of the batch file itself
批处理文件本身的驱动器
%~d0
This trims the full path of the batch file (in %0
) to just a drive letter and a colon, e.g. C:
.
这会将批处理文件 (in %0
)的完整路径修剪为一个驱动器号和一个冒号,例如C:
.
(this is an expanded version of my rejected editto Kai K's answer)
回答by sparky3489
You can find all USB drive letters from any drive with this.
您可以使用它从任何驱动器中找到所有 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.
)
)
回答by Ste
Like others have said %~d0
就像其他人说的 %~d0
There's no point in going over that again, but if you have stumbled into this thread then this will cd to the directory of the batch file.
没有必要再重复一遍,但如果你偶然发现了这个线程,那么这将 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
Also if you want to run a batch file from another drive such as Z:
then this one will do that.
此外,如果您想从另一个驱动器运行批处理文件,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
回答by Ashish Namdev
%CD:~0,2%
This will give you the current drive in the format C:
, i.e. first 2 chars from the current working directory
这将为您提供当前驱动器的格式 C:
,即当前工作目录中的前 2 个字符
C:\Users\ashish>ECHO %CD:~0,2%
C:
D:\projects>ECHO %CD:~0,2%
D:
D:\projects>ECHO %CD%
D:\projects
回答by JollyChollie
Thanks Very Much @Sparky3489, if I have just one USB Flash Drive, I put this within your Algorithm, Right After the
非常感谢@Sparky3489,如果我只有一个 USB 闪存驱动器,我会把它放在你的算法中,紧随其后
echo %%i is a USB drive.
Set FlashDrive=%%I
I also changed the Wording of the Identifier to
我还将标识符的措辞更改为
Echo %%i is a USB Flash Drive~!
Then, After, {and Outside} the Algorithm, I can add the Flash Drive Path such as...
然后,在算法{和外部}之后,我可以添加闪存驱动器路径,例如...
Set FlashPath=%FlashDrive%\Users\Public\Documents
Then by setting up other Paths Such as
然后通过设置其他路径如
Set SourcePath=C:\Users\Public\Documents
I can make an Batch File BackUp For the Flash Drive, (can be Called Via Windows Short-Cut with an Associated Icon in your Quick Launch Window ~ Search "Quick Launch", if in Doubt to what I'm Talking About).
我可以为闪存驱动器制作批处理文件备份,(可以通过 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 * * * * * * * * * *