You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何去除WMIC获取盘符中的冒号,用于Diskpart命令?

解决批处理去除盘符冒号并传入diskpart的问题

原代码的几个关键错误

  1. 变量赋值错误:你在FOR循环里写的set SystemReserved=%1是错的,%1指的是批处理的第一个命令行参数,不是WMIC返回的盘符%i,这直接导致变量没拿到正确值。
  2. 未处理盘符冒号:拿到带冒号的盘符后,没有做字符串截取来去掉冒号。
  3. Diskpart命令写法错误:Diskpart remove letter=$Source%这种写法不生效,diskpart是交互式工具,得用管道或者脚本传递命令。

修正后的完整代码

@echo off
SET "SOURCE=System Reserved"
SET "SystemReserved="

REM 获取带冒号的盘符,然后截取首字母去掉冒号
FOR /F "tokens=2 usebackq delims==" %%i IN (`wmic volume where "Label='%SOURCE%'" get DriveLetter /format:list`) DO (
    SET "SystemReserved=%%i:~0,1%"
)

REM 开启延迟变量扩展,确保循环里赋值的变量能正确读取
SETLOCAL ENABLEDELAYEDEXPANSION
IF "!SystemReserved!"=="" GOTO notfound

REM 通过管道给diskpart传命令,先选中分区再移除盘符
echo select volume where DriveLetter="!SystemReserved!:" | diskpart
echo remove letter=!SystemReserved! | diskpart

:notfound
ENDLOCAL
Exit

重点细节说明

  • 盘符截取:%%i:~0,1%是批处理的字符串截取语法,取变量%%i的第1个字符(索引从0开始),比如X:就会被截取为X。
  • 延迟变量扩展:FOR循环内部赋值的变量,默认在循环外部读不到正确值,开启SETLOCAL ENABLEDELAYEDEXPANSION后,用!SystemReserved!来读取就能拿到正确结果。
  • Diskpart正确用法:diskpart不能直接在命令行后跟操作命令,得用echo 命令 | diskpart的方式把命令传递进去,先选中对应分区,再执行移除盘符的操作。

内容的提问来源于stack exchange,提问作者kxo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 05:07:07