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

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-09 08:20:27  来源:igfitidea点击:

Windows Batch Script Get Current Drive name

windowsbatch-file

提问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

If run from inside a .CMD/.BAT file, you can use %~dp0to get the current/working directory. This one is a little safer as it is aware of UNC paths and such. Reference for the syntax of that variable is available here.

如果从 .CMD/.BAT 文件中运行,您可以使用它%~dp0来获取当前/工作目录。这个更安全一点,因为它知道 UNC 路径等。该变量的语法参考可在此处获得

回答by Alex Peters

Beware

谨防

The existing answers to this question don't acknowledge that the question is actually asking about two different things:

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

  1. the drive of the current working directory(“Get Current Drive name”); and
  2. the drive of the batch file(“I need to know the drive name the batch is in”).
  1. 当前工作目录的驱动器(“获取当前驱动器名称”);和
  2. 批处理文件的驱动器(“我需要知道批处理所在的驱动器名称”)。

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)

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

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