Cmd: не оцениваются переменные внутри цикла

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

Это то, что у меня есть на данный момент

@echo off
for /r %%i in (*.csv) do (
set str=%%i
set str=%str:csv=rar%
echo %%i
echo.%str%
)

Скажем, у меня это работает в C: \, и получил 5 csv, 1.csv, 2.csv ... 5.csv

В первый раз, когда я запустил его, я получил вывод:

C:\1.csv

C:\2.csv

C:\3.csv

C:\4.csv

C:\5.csv

Второй раз я получил:

C:\1.csv
csv=rar
C:\2.csv
csv=rar
C:\3.csv
csv=rar
C:\4.csv
csv=rar
C:\5.csv

Затем все последующие вызовы я получаю :

C:\1.csv
rar=rar
C:\2.csv
rar=rar
C:\3.csv
rar=rar
C:\4.csv
rar=rar
C:\5.csv

Когда то, что я ожидал получить, будет прямым:

C:\1.csv
C:\1.rar
C:\2.csv
C:\2.rar
C:\3.csv
C:\3.rar
C:\4.csv
C:\4.rar
C:\5.csv
C:\5.rar

Итак, я удаляю замену:

@echo off
for /r %%i in (*.csv) do (
echo %%i
set str=%%i
echo.%str%
)

Первый запуск:

C:\1.csv

C:\2.csv

C:\3.csv

C:\4.csv

C:\5.csv

Второй запуск:

C:\1.csv
C:\5.csv
C:\2.csv
C:\5.csv
C:\3.csv
C:\5.csv
C:\4.csv
C:\5.csv
C:\5.csv
C:\5.csv

Это похоже на то, что переменная str не устанавливается до тех пор, пока последний запуск цикла, даже если он пытается вывести переменную, строка которой появляется после настройки, а затем сохранить это для следующего цикла? Есть что-то, что я? m отсутствует в способе обработки циклов?

Спасибо

6
задан Benoit 21 October 2010 в 12:58
поделиться