含空格变量的NET SHARE命令无法执行,求技术支持
解决批处理删除带空格非管理员共享的问题
问题根源在于WMIC的输出是UTF-16 LE编码,包含隐藏的空字符,导致FOR /F捕获的变量%%j带有不可见的尾部空字符——这会让带空格的共享名无法被NET SHARE正确识别,甚至echo输出时出现异常。
修正后的代码
直接替换原有逻辑即可解决问题,代码如下:
FOR /F "USEBACKQ SKIP=1 DELIMS=" %%j IN (`wmic /node:192.168.0.101 SHARE WHERE "Name like '%%[^$]'" GET NAME ^| more ^| findstr /r /v "^$"`) DO NET SHARE "%%j" /DELETE
关键修改说明
- 添加
| more:将WMIC的UTF-16输出转换为ANSI编码,彻底去除隐藏的空字符,这是解决变量异常的核心步骤。 - 替换
TOKENS=*为DELIMS=:确保捕获完整的共享名(包括空格),TOKENS=*会忽略开头空格,而DELIMS=会保留整个字符串的原始格式。 - 保留
SKIP=1跳过WMIC的表头行,findstr /r /v "^$"过滤空行。
测试验证代码
用以下代码验证变量捕获是否正常:
FOR /F "USEBACKQ SKIP=1 DELIMS=" %%j IN (`wmic /node:192.168.0.101 SHARE WHERE "Name like '%%[^$]'" GET NAME ^| more ^| findstr /r /v "^$"`) DO @ECHO "%%j"
执行后将正确输出带引号的完整共享名,不会出现仅显示引号的异常情况。
内容的提问来源于stack exchange,提问作者Enqueue
相关产品推荐
相关产品推荐

