Вам нужно поставить:
@setlocal enableextensions enabledelayedexpansion
вверху вашего файла и
endlocal
в конце.
Тогда вам нужно использовать символы подстановки с отложенным расширением.
@setlocal enableextensions enabledelayedexpansion
@echo off
for /f "tokens=*" %%a in ('dir *.txt /b') do (
echo ---------------
set file_variable=%%a
echo file_variable=!file_variable!
echo filename=%%a
)
endlocal
C:\Documents and Settings\Pax\My Documents> qq.cmd
---------------
file_variable=1.txt
filename=1.txt
---------------
file_variable=2.txt
filename=2.txt
То, что вы видите без отложенного расширения, - это то, что весь цикл for
проверяется перед запуском. Это включает подстановку, так что %file_variable%
будет заменено значением, которое он удерживал до цикла. Использование отложенного расширения откладывает оценку до тех пор, пока не будет выполнена фактическая строка.
На сайте есть множество замечательных трюков для сценариев Windows Роба ван дер Вуде, содержащих множество различных способов работы с Windows с помощью различных инструментов.