Итак, я пытаюсь использовать расширение с двойной задержкой для переименования файлов в каталоге. Проблема, с которой я сталкиваюсь, заключается в использовании расширения с двойной задержкой с помощью команды SET. Этот метод работает, как и ожидалось, с командой ECHO. Почему это не работает с SET?
Ниже приведен фрагмент моего кода, переписанного для работы в автономном сценарии. Этот скрипт имеет тот же вывод, что и мой основной код, и использует аналогичные значения.
@echo off
TITLE Bug In File Renaming
SETLOCAL enableextensions enabledelayedexpansion
:: The directory 'C:\Users\admin\Desktop\testFolder\Images'
:: contains 7 .png files named
:: Game-Prize-BANOFFEE_PIE.png
:: Game-Prize-BLUEBERRY_PIE.png
:: Game-Prize-BRANDY_BUTTER.png
:: Game-Prize-BUTTER_CREAM_CUP_CAKE.png
:: Game-Prize-CANDIED_NUTS.png
:: Game-Prize-CARAMELS.png
:: Game-Prize-CARROT_CAKE.png
SET renameFileDirectory=C:\Users\admin\Desktop\testFolder\Images
SET renameFilePrefix=Game-Prize-
SET renameFileType=.png
SET newValuesList[0]=VALUE1
SET newValuesList[1]=VALUE2
SET newValuesList[2]=VALUE3
SET newValuesList[3]=VALUE4
SET newValuesList[4]=VALUE5
SET newValuesList[5]=VALUE6
SET newValuesList[6]=VALUE7
echo. newValuesList & echo [%newValuesList[0]%, %newValuesList[1]%, %newValuesList[2]%, %newValuesList[3]%, %newValuesList[4]%, %newValuesList[5]%, %newValuesList[6]%]
SET /a i=0
FOR %%G IN (%renameFileDirectory%\%renameFilePrefix%*%renameFileType%) DO (
call echo newValue = %%newValuesList[!i!]%%
call SET newValue=%%newValuesList[!i!]%%
call echo newNewValue = %newValue%
SET /a i+=1
)
PAUSE
----OUTPUT----
newValuesList
[VALUE1, VALUE2, VALUE3, VALUE4, VALUE5, VALUE6, VALUE7]
newValue = VALUE1
newNewValue =
newValue = VALUE2
newNewValue =
newValue = VALUE3
newNewValue =
newValue = VALUE4
newNewValue =
newValue = VALUE5
newNewValue =
newValue = VALUE6
newNewValue =
newValue = VALUE7
newNewValue =
Press any key to continue . . .
Основная линия, по моему мнению, имеет проблему call SET newValue=%%newValuesList[!i!]%%
Возможна ли эта линия? Насколько я понимаю, это расширение с двойной задержкой, и для переменной 'newValue' должно быть установлено то же значение, что и для 'newValuesList[0]' (когда i=0), которое должно быть VALUE1.
call echo newNewValue = %%newValue%%
или без правильного метода без вызова echo newNewValue = !newValue!
Вы также можете запустить все это без delayedexpansion
..
Аааа, дерьмо, да, извините, что я тупой, ха-ха @jeb правильно понял, я использовал % вместо ! вокруг эха newNewValue. Спасибо за помощь, ребята :)
У @jeb был ответ, поэтому я решил опубликовать его как официальный ответ, чтобы закрыть вопрос.
Изменить эхо вызова newNewValue = %newValue%
на echo newNewValue = !newValue!
Ваш код работает идеально! Но, возможно, вы хотите изменить
call echo newNewValue = %newValue%
наecho newNewValue = !newValue!
. Затем вы можете увидеть текущее значение переменной или использовать знаки двойного процента.