如何在Windows 10批处理中获取指定盘符卷标并赋值给变量
Windows 10下提取光盘卷标并创建同名文件夹的BAT脚本方案
直接用vol命令结合for循环可以提取卷标,不过更推荐用wmic命令,它的输出格式更稳定,不受系统语言影响。以下是两种可行的实现方式:
方法一:基于vol命令提取(适配中文系统)
vol E:的输出第一行格式为 驱动器 E: 的卷标是 [卷标内容],通过for /f解析该行内容,提取卷标部分:
@echo off setlocal enabledelayedexpansion set "disc_label=" :: 解析vol命令的第一行输出,提取卷标 for /f "tokens=6* delims= " %%a in ('vol E:') do ( set "disc_label=%%a" :: 处理带空格的卷标 if not "%%b"=="" set "disc_label=!disc_label! %%b" goto :extract_done ) :extract_done :: 验证卷标是否获取成功 if not defined disc_label ( echo 无法获取E盘卷标,请检查光盘是否正确挂载。 pause exit /b 1 ) :: 在目标驱动器创建同名文件夹(这里以D盘为例,可自行修改路径) md "D:\!disc_label!" >nul 2>&1 if %errorlevel% equ 0 ( echo 成功创建文件夹:D:\!disc_label! ) else ( echo 文件夹创建失败,可能路径已存在或权限不足。 ) endlocal
方法二:基于wmic命令提取(更通用,不受语言限制)
wmic可以直接查询磁盘的卷标属性,输出格式更规范,适合多语言系统:
@echo off setlocal enabledelayedexpansion set "disc_label=" :: 通过WMIC查询E盘卷标 for /f "skip=1 tokens=2 delims==" %%a in ('wmic logicaldisk where "DeviceID='E:'" get VolumeName /value') do ( :: 清理输出中的多余空格和换行符 set "disc_label=%%a" set "disc_label=!disc_label: =!" goto :extract_done ) :extract_done if not defined disc_label ( echo 无法获取E盘卷标,请检查光盘是否正确挂载。 pause exit /b 1 ) :: 创建同名文件夹 md "D:\!disc_label!" >nul 2>&1 if %errorlevel% equ 0 ( echo 成功创建文件夹:D:\!disc_label! ) else ( echo 文件夹创建失败,可能路径已存在或权限不足。 ) endlocal
关键说明
setlocal enabledelayedexpansion:开启延迟变量扩展,确保循环内修改变量能被正确读取goto :extract_done:只处理vol或wmic的第一行有效输出,避免读取后续无关内容>nul 2>&1:重定向命令输出,避免创建文件夹时显示重复提示信息
内容的提问来源于stack exchange,提问作者Ian M
相关产品推荐
相关产品推荐

