Ваша проблема связана со строкой DeviceID
, содержащей запятую, которую можно легко решить, используя переменную для ее хранения.Чтобы не возвращать Echo
сообщения о состоянии, вам необходимо добавить непустой символ после Echo
, для этого лучше всего использовать (
, =
и /
.
.this!
@Echo Off
Set "InputFile=abc.txt"
Set "SearchStr=Disk #0, Partition #1"
If Exist "%InputFile%" Del /F "%InputFile%"
For /F Tokens^=* %%A In ('
"WMIC Partition Where (DeviceID="%%SearchStr%%") Assoc:List /AssocClass:Win32_LogicalDiskToPartition 2>NUL"
')Do >>"%InputFile%" Echo(%%A
Если вы не хотите, чтобы в выводе файла были пустые строки, используйте другой вложенный цикл For
:
@Echo Off
Set "InputFile=abc.txt"
Set "SearchStr=Disk #0, Partition #1"
If Exist "%InputFile%" Del /F "%InputFile%"
For /F Tokens^=* %%A In ('
"WMIC Partition Where (DeviceID="%%SearchStr%%") Assoc:List /AssocClass:Win32_LogicalDiskToPartition 2>NUL"
')Do For /F Tokens^=* %%B In ("%%A")Do >>"%InputFile%" Echo(%%B
Однако, поскольку вы выводите всенет необходимости в цикле For
:
@Set "InputFile=abc.txt"
@Set "SearchStr=Disk #0, Partition #1"
@If Exist "%InputFile%" Del /F "%InputFile%"
@WMIC /Output:"%InputFile%" Partition Where (DeviceID="%SearchStr%") Assoc:List /AssocClass:Win32_LogicalDiskToPartition 2>NUL
[Edit /]
Поскольку это один из многих вопросов, которые, по-видимому, основаны ната же задача, если вы только пытаетесь определить букву диска, связанную с Disk #0, Partition #1
, вы можете сделать это аналогично:
@Set "SearchStr=Disk #0, Partition #1"
@For /F Skip^=2Tokens^=2Delims^=^" %%A In ('"WMIC Partition Where (DeviceID="%%SearchStr%%") Assoc /AssocClass:Win32_LogicalDiskToPartition 2>NUL"')Do @Echo %SearchStr% = %%A