Windows 如何获取当前控制台提示符的volumelabel

Windows 如何获取当前控制台提示符的volumelabel,windows,batch-processing,drive,Windows,Batch Processing,Drive,例如,我的drivelettere的卷标签是卷abc 例如,外壳中的im位于: e:\directory-a\bc\> 现在我需要drivelettere:的卷标签,以及以下语句: vol %CD:~0,1%: 我将获得当前的volumelabel,但周围有很多内容(对不起,只有德语): 因此,也许可以从这个输出中解析/提取字符串volume abc,但对我来说,这似乎是一种糟糕的方式,因为输出可能因windows和语言版本而异。所以我不知道如何以健壮的方式执行字符串操作。@ECHO

例如,我的drivelettere的卷标签是卷abc

例如,外壳中的im位于:

e:\directory-a\bc\>
现在我需要drivelettere:的卷标签,以及以下语句:

vol %CD:~0,1%:
我将获得当前的volumelabel,但周围有很多内容(对不起,只有德语):

因此,也许可以从这个输出中解析/提取字符串volume abc,但对我来说,这似乎是一种糟糕的方式,因为输出可能因windows和语言版本而异。所以我不知道如何以健壮的方式执行字符串操作。

@ECHO OFF
SETLOCAL
设置卷=%1
如果未定义卷集卷=%CD%
设置“卷=%volume:~0,1%:”
设置“vlabel=”
设置“vserial=”
对于/f“delims=“%%a IN('vol%volume%”)DO(
电话:lastparm%%a
)    
回显标签为%vlabel%
回音序列为%v序列%
endlocal&设置vlabel=%vlabel%&设置vserial=%vserial%
后藤:EOF
:lastparm
设置$1=%2
如果定义为$1班次,则转到最后一班
如果定义了vlabel(设置vserial=%1),则为ELSE(设置vlabel=%1)
后藤:eof
这应该满足您的要求-在限制范围内。运行批处理,将drivename作为第一个参数。如果未提供任何参数,将选择当前驱动器

在英语中,
VOL
的响应可能是

 Volume in drive C has no label.
 Volume Serial Number is 830B-46FA

 Volume in drive M is XPC
 Volume Serial Number is 62FF-EBB1
因此,似乎独立于语言的版本可能有点困难。上面的代码会给出
标签。
对于
C:
,而不是
没有标签。
我不知道其他语言会生成什么

然而,可能的事实是,响应是小写的,这可能是定义“未标记”的一种方式——我相信真正的标签必须是大写的

而且现在一个卷标可能最多有32个字符,我不知道现在是否允许使用空格


编辑:添加
ENDLOCAL
行以设置调用方环境中的值。乍一看,该方法似乎不符合逻辑,但利用了
cmd
使用的解析过程。解析整个
endlocal
行,并用其内容替换
%var%
s。然后执行该行,该行首先处理自
setlocal
之后进行的所有环境更新,然后将感兴趣的值分配回变量。

非常感谢!有没有办法将其作为自己的脚本并在主脚本中使用变量?例如:调用您的-posted-script-in-batch-file.bat&&echo-vlabel:%vlabel%
 Volume in drive C has no label.
 Volume Serial Number is 830B-46FA

 Volume in drive M is XPC
 Volume Serial Number is 62FF-EBB1