O Windows 8 localizou todas as unidades e executou o comando em cada

0

Isto é o que eu tenho até agora

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

a saída está correta

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

a saída está correta

@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"

saída parece relatar uma unidade inválida para cada unidade no sistema, mas eu não posso obtê-lo para processar o %% d como C: \ D: \ etc,

alguma sugestão

    
por Donald 28.03.2014 / 02:10

1 resposta

1

WMIC produz saída unicode, e FOR / F converte a saída para ANSI indevidamente, de modo que haja um retorno de carro extra ( <CR> ) no final de cada linha de saída.

Portanto, sua unidade se torna C:<CR>\ - o retorno de carro está atrapalhando o comando.

Uma maneira de eliminar o caracter indesejado é adicionar um loop FOR extra, que apara exatamente um <CR> do final de uma linha, se existir.

Além disso, a menos que o Windows 8 seja diferente de todas as versões anteriores, o WMIC requer uma barra antes da opção FORMAT, como em /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"
    
por 28.03.2014 / 04:45