您不应该像某些答案所建议的那样删除所有空格,因为某些计算机在值的中间有空格。请参阅WMIC CSProduct 获取名称结果列表。
我不仅得到多个尾随空格,而且还得到一个尾随回车符 ( <CR>
),这是 WMIC 的 unicode 输出自动转换为 ASCII 的产物。
<CR>
可以通过将值传递给另一个 FOR /F 循环来删除尾随。这也删除了幻影“空白”行(实际上是 a <CR>
),因此不再需要 IF 语句。
然后可以使用~nx
修饰符删除尾随空格。这是有效的,因为文件名不能以空格或点结尾,并且会被操作系统自动删除。修饰符通过删除尾随的点和空格来规范化“文件名”。\
如果该值包含、/
、*
或?
,或者如果它以一个字母开头后跟 ,这将无法正常工作:
。
for /F "skip=1 delims=" %%A in (
'wmic csproduct get name'
) do for /f "delims=" %%B in ("%%A") do set "model=%%~nxB"
另一种选择是使用 wmz 对 CSV 格式的建议,但我仍然必须删除结尾的<CR>
.
for /F "skip=2 tokens=2 delims=," %%A in (
'wmic csproduct get name /format:csv'
) do for /f "delims=" %%B in ("%%A") do set "model=%%B"
编辑 - 为什么 wmz 解决方案似乎可以工作,而无需剥离<CR>
问题可能并不明显,这<CR>
取决于您在model
设置变量后如何访问该变量。正常扩展会剥离任何<CR>
,但延迟扩展会保留它。
@echo off
setlocal enableDelayedExpansion
for /f "skip=2 tokens=2 delims=," %%A in (
'wmic csproduct get name /format:csv'
) do set "model=%%A"
echo Normal expansion strips ^<CR^>: [%model%]
echo Delayed expansion preserves ^<CR^>: [!model!]
- - 输出 - -
Normal expansion strips <CR>: [LX4710-01]
] Delayed expansion preserves <CR>: [LX4710-01
编辑 - 避免<CR>
问题的另一种方法
您可以使用 CSV 格式并请求出现在所需值之后的额外属性。当<CR>
您解析出所需的令牌时,将与额外的值一起丢弃。
for /f "skip=2 tokens=2 delims=," %%A in (
'wmic csproduct get name^,vendor /format:csv'
) do set "model=%%A"