CMD не сделает переменные равными


1

Я пытаюсь сделать пакетный сценарий, который будет принимать имена всех подпапок в каталоге в качестве переменных для использования в другом месте.

Часть кода, которая смущает меня:

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

Подпапки в каталоге «Test»: 1, 2 #, 3, ads и ghf.
Это просто случайные имена для тестирования.

Вывод, который я получаю:

C:\Users\tcsupport\Desktop\Test\1  
C:\Users\tcsupport\Desktop\Test\ghf  
ghf  
C:\Users\tcsupport\Desktop\Test\2#  
C:\Users\tcsupport\Desktop\Test\ghf  
ghf  
C:\Users\tcsupport\Desktop\Test\3  
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 

но я ожидал

C:\Users\tcsupport\Desktop\Test\1  
C:\Users\tcsupport\Desktop\Test\1  
1  
C:\Users\tcsupport\Desktop\Test\2#  
C:\Users\tcsupport\Desktop\Test\2#  
2#  
C:\Users\tcsupport\Desktop\Test\3  
C:\Users\tcsupport\Desktop\Test\3  
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  

Кто-нибудь может объяснить, почему это происходит, или придумать способ обойти это?


1
Это связано с задержкой продлений. К сожалению, я не могу написать ответ прямо сейчас.
LPChip

Ответы:


1

Просматривая информацию в ссылках, предоставленных Techie007, я нашел свой ответ.

Задержка расширения была проблемой. Изменение кода на следующее решило проблему.

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

Извините за дублирование вопроса.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.