【问题标题】:Batch - Trim WMIC variable output for reuse批处理 - 修剪 WMIC 变量输出以供重复使用
【发布时间】:2018-01-25 10:22:21
【问题描述】:

希望有人可以帮忙:)

我在努力

  • 将 WMIC 查询的输出放入变量中
  • 通过删除最后一个字符(冒号)来操作此变量
  • 在我的脚本中重用这个剩余的字符

这是生成我需要使用的值的行:

for /f "skip=1" %%A in ('wmic logicaldisk where "Description='Removable Disk'" get name') do

通常,输出如下所示:

E:

现在我需要剪切这个变量以仅获取驱动器字母“E”,我需要在我的脚本中重复使用它。

我发现了this 威胁,我希望它也能解决我的问题。 不幸的是,这对我不起作用,因为应用这个输出完全是空的。

我认为在将输出 %%A 写入变量时我做错了。

我的代码目前如下所示:

@ECHO OFF
for /f "skip=1" %%A in ('wmic logicaldisk where "Description='Removable Disk'" get name') do (
echo.%%A
set drive=%%A
set drive=%drive:~0,-1%
echo.%drive%
)

这段代码的输出是:

E:
:*:
:*:

有人知道我做错了什么吗? :)

提前感谢您的帮助!

【问题讨论】:

  • 在这里使用%drive:~0,1%WMIC 有一个非标准的行尾,这会导致一个以 <CR> 结尾的变量
  • 嗨@Stephan,感谢您的快速回复:) 现在输出是(逐行)E: ~ ~
  • 如果你坚持使用那个方法,那么延迟扩展肯定会有帮助。
  • E: ~ ~ 是因为 wmic 输出 4 行。您跳过第一个,第二个是您的“有效负载”,然后有两行(显然是空的)。问题是,对于命令解释器来说,它们不是为空的,而是包含<CR>。在我的回答中,我避免处理它们,因为它们没有第二个令牌(几种可能性之一)。
  • 这只是一个说明,不保证USB驱动器将注册为Removable Disk

标签: windows batch-file variables for-loop wmic


【解决方案1】:

有许多不同的方法可以解决wmic 丑陋的行尾。在你的情况下,它相对容易(你甚至不需要任何变量):

for /f "skip=1 tokens=2 delims==:" %%A in ('wmic logicaldisk where "DriveType='2'" get name /value') do echo %%A

我从Description='Removable Disk' 切换到DriveType='2',因为输出取决于语言(在德语中,它是Description=Wechseldatenträger)并且2 在每种语言中都是2

【讨论】:

  • 谢谢 Stpehan,这正是我想要的 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-05-07
  • 1970-01-01
  • 2017-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-06
相关资源
最近更新 更多