是否可以使用WMIC获得驱动器标签?


1

使用WMIC,我想获得基于驱动器号的驱动器标签:

for /f "skip=1" %a in ('wmic volume where "Driveletter like '%C%'" get label') do echo %a

现在,那些了解Windows命令行的人会明白为什么这不能按预期工作,因为我正在“做”回声。因此,使用上面的内容,输出看起来如下(这不是我希望的):

C:\>for /f "skip=1" %a in ('wmic volume where "Driveletter like '%C%'" get label') do echo %a

C:\>echo System
System

C:\>echo
ECHO is on.

WMIC命令的原始输出如下所示:

Label
System

目标是仅跳过第一行(为什么我试图使用for /f "skip=1"...)并且只获得第二行。但是,我不确定如何在不回应它的情况下显示它。


该解决方案是否需要使用wmic?我有一个基于PowerShell的解决方案,如果有帮助的话?
Crippledsmurf 2015年

Answers:


2

你有两个问题。Techie007确定了第一个 - @如果要阻止命令回显到屏幕,则必须在DO命令前添加前缀。如果ECHO为OFF,则不需要这样做。

另一个问题是FOR / F如何与WMIC的unicode输出交互的非常烦人的工件。不知何故,unicode被不正确地转换为ANSI,因此每行以\ r \ n \ n \ n结尾。FOR / F在每个\ n中断,并且仅剥离单个终端\ r \ n,留下额外的不需要的\ r \ n。(注意\ r表示回车符,\ na表示换行符)

WMIC输出在末尾包含一个额外的空行。额外的不需要的\ r \ n阻止FOR / F忽略该行(它不被视为空)。当你获得你获得的价值时ECHO is on.

有多种方法可以解决这个问题,但我最喜欢的是通过额外的FOR / F传递输出以删除不需要的\ r \ n。

for /f "skip=1 delims=" %a in ('wmic volume where "Driveletter like '%C%'" get label') do @for /f "delims=" %b in ("%a") do @echo %b

谢谢。我甚至没有注意到最后的额外回车。这就像一个冠军。
Beems 2015年

1

Echo带有@符号的前缀以防止显示命令。

即(为简洁起见):

for ... do @echo %a
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.