Это то, что я до сих пор

@echo off
for /f "tokens=2 delims==" %%d in ('wmic logicaldisk where "drivetype=3" get name format:value') do echo %%d

вывод правильный

@echo off
FORFILES /P C:\ /S /M *.* /C "cmd /c echo @path"

вывод правильный

@echo off
for /f "tokens=2 delims==" %%d in ('wmic logicaldisk where "drivetype=3" get name format:value') do FORFILES /P %%d\ /S /M *.* /C "cmd /c echo @path"

выводит сообщение о недопустимом диске для каждого диска в системе, но я не могу заставить его обработать %% d как C:\ D:\ etc,

какие-либо предложения

1 ответ1

1

WMIC производит вывод Unicode, а FOR /F неправильно преобразует вывод в ANSI, так что в конце каждой строки вывода имеется дополнительный возврат каретки (<CR>).

Таким образом, ваш диск становится C:<CR>\ - возврат каретки запутывает команду.

Одним из способов устранения нежелательного символа является добавление дополнительного цикла FOR, который обрезает ровно один завершающий <CR> от конца строки, если он существует.

Кроме того, если Windows 8 не отличается от всех более ранних версий, WMIC требует косой черты перед параметром FORMAT, как в /format:value

@echo off
for /f "tokens=2 delims==" %%A in (
  'wmic logicaldisk where "drivetype=3" get name /format:value'
) do for %%B in (%%A) do forfiles /p %%B\ /s /m *.* /c "cmd /c echo @path"

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .