Используйте двойное отложенное расширение для установки переменной в пакетном файле

Итак, я пытаюсь использовать расширение с двойной задержкой для переименования файлов в каталоге. Проблема, с которой я сталкиваюсь, заключается в использовании расширения с двойной задержкой с помощью команды 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!. Затем вы можете увидеть текущее значение переменной или использовать знаки двойного процента.

jeb 22.05.2019 13:24
call echo newNewValue = %%newValue%% или без правильного метода без вызова echo newNewValue = !newValue!
Gerhard 22.05.2019 13:26

Вы также можете запустить все это без delayedexpansion..

Gerhard 22.05.2019 13:27

Аааа, дерьмо, да, извините, что я тупой, ха-ха @jeb правильно понял, я использовал % вместо ! вокруг эха newNewValue. Спасибо за помощь, ребята :)

jamesD 22.05.2019 14:25
3 метода стилизации элементов HTML
3 метода стилизации элементов HTML
Когда дело доходит до применения какого-либо стиля к нашему HTML, существует три подхода: встроенный, внутренний и внешний. Предпочтительным обычно...
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
0
4
121
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

У @jeb был ответ, поэтому я решил опубликовать его как официальный ответ, чтобы закрыть вопрос.

Изменить эхо вызова newNewValue = %newValue% на echo newNewValue = !newValue!

Другие вопросы по теме