O CMD não fará variáveis iguais

1

Estou tentando fazer um script em lote que levará os nomes de todas as subpastas de um diretório como variáveis para uso em outro lugar.

A seção de código que está me confundindo é:

 for /d %%D in (C:\Users\tcsupport\Desktop\Test\*) ^
 do (SET test=%%D
 echo %%D
 echo %test%
 echo %test:~32%)

As subpastas no diretório 'Test' são: 1, 2 #, 3, ads e ghf.
Estes são apenas nomes aleatórios para testes.

A saída que estou recebendo é:

C:\Users\tcsupport\Desktop\Test  
C:\Users\tcsupport\Desktop\Test\ghf  
ghf  
C:\Users\tcsupport\Desktop\Test#  
C:\Users\tcsupport\Desktop\Test\ghf  
ghf  
C:\Users\tcsupport\Desktop\Test  
C:\Users\tcsupport\Desktop\Test\ghf  
ghf  
C:\Users\tcsupport\Desktop\Test\ads  
C:\Users\tcsupport\Desktop\Test\ghf  
ghf  
C:\Users\tcsupport\Desktop\Test\ghf  
C:\Users\tcsupport\Desktop\Test\ghf  
ghf 

mas eu estava esperando:

C:\Users\tcsupport\Desktop\Test  
C:\Users\tcsupport\Desktop\Test  
1  
C:\Users\tcsupport\Desktop\Test#  
C:\Users\tcsupport\Desktop\Test#  
2#  
C:\Users\tcsupport\Desktop\Test  
C:\Users\tcsupport\Desktop\Test  
3  
C:\Users\tcsupport\Desktop\Test\ads  
C:\Users\tcsupport\Desktop\Test\ads  
ads  
C:\Users\tcsupport\Desktop\Test\ghf  
C:\Users\tcsupport\Desktop\Test\ghf  
ghf  

Alguém pode explicar por que isso está acontecendo ou pensar em uma maneira de contornar isso?

    
por Cathal O Dwyer 08.07.2016 / 16:12

1 resposta

1

Olhando as informações nos links fornecidos por Techie007, encontrei minha resposta.

Expansão atrasada foi o problema. Alterar o código para o seguinte resolveu o problema.

 Setlocal EnableDelayedExpansion  
 for /d %%D in
 (C:\Users\tcsupport\Desktop\Test\*) ^  
 do (SET test=%%D  
 echo %%D  
 echo !test!  
 echo !test:~32!)

Lamentamos a duplicação da pergunta.

    
por 08.07.2016 / 17:30