如何在命令提示符下将命令的输出分配给变量

how to assign output from command to variable in command prompt

我有这两个命令

C:\Users\xyz\AppData\Local\Temp>WMIC LOGICALDISK where volumename="abc" get deviceid>%temp%/path.txt

创建文件 path.txt,内容为:

DeviceID
F:      

该文件有很多额外的空间,我在上面的文件中添加了这些空间^

然后我使用(虽然我知道我可以使用 | char 我试图避免它)命令 C:\Users\xyz\AppData\Local\Temp>FINDSTR [:] path.txt>path2.txt 给出的输出 F : 令人难以置信,因为我显然只需要位于其位置的“F”/字母字符并将其存储在变量中。

有人可以告诉我如何执行此操作 - 或者最终仅使用 cmd 获取 USB 设备的驱动器盘符并将其存储在变量中吗?

我不介意是否需要很多行,只是不 |请字符或引号“:)

编辑:它必须在命令提示符下并且可以逐行写入(没有复制和粘贴命令)并且我需要单独的字母(例如 F:) - 存储在变量或剪贴板中.显然,请不要使用竖线字符或引号 :)

没有 | char please :) 我想你的意思是 pipe character | (U+007C, 竖线)?

批处理文件(将所需的字符串设置为 _volume 变量而不是 我的调试值 Elements):

@ECHO OFF
@SETLOCAL
rem set the variable _volume and delete the variable _letter
set "_volume=Elements"
set "_letter="

for /F "tokens=2 delims==:" %%G in ('
  WMIC LOGICALDISK where volumename^="%_volume%" get deviceid/Value
') do set "_letter=%%G"

echo letter of volume "%_volume%" is "%_letter%"    

输出.\SO753240.bat

letter of volume "Elements" is "F"

命令提示符(将以下代码片段复制并粘贴到打开的 cmd.exe window):

set "_volume=Elements"
set "_letter="
for /F "tokens=2 delims==:" %G in ('WMIC LOGICALDISK where volumename^="%_volume%" get deviceid/Value') do @set "_letter=%G"
@echo letter of volume "%_volume%" is "%_letter%"    

请注意 wmic 重定向到文件的输出是 UTF-16-BOM:

WMIC LOGICALDISK where volumename="%_volume%" get deviceid>%temp%\path71753240.txt
hexdump.exe -H %temp%\path71753240.txt
000000  ff fe 44 00 65 00 76 00 69 00 63 00 65 00 49 00  ..D.e.v.i.c.e.I.
000010  44 00 20 00 20 00 0d 00 0a 00 46 00 3a 00 20 00  D. . .....F.:. .
000020  20 00 20 00 20 00 20 00 20 00 20 00 20 00 0d 00   . . . . . . ...
000030  0a 00