Проблема с использованием инструкции SET в DO для массива - PullRequest
0 голосов
/ 22 января 2020

Я использую Windows 10 64 бит и пытаюсь записать BAT-файл. У меня есть следующий код, который не является полностью функциональным.

@Echo off
SETLOCAL enabledelayedexpansion
SET value1=2020_01_19_17_00_01
SET Arr1[0]=_f104.sql
SET Arr1[1]=_f105.sql
SET Arr1[2]=_f106.sql
SET Arr1[3]=_f107.sql
SET Arr1[4]=_f108.sql
SET Arr1[5]=_f109.sql
REM ::read it using a FOR /L statement
For /l %%n in (0,1,5) do (
Echo The value of the concatinated values is now: C:\SS_Library_Backups\%value1%!Arr1[%%n]!
SET filename=C:\SS_Library_Backups\%value1%!Arr1[%%n]!
Echo The value of the variable filename is now: %filename%
)

Это приводит к результатам

C:\SS_Library_Backups>test4
The value of the concatinated values is now: C:\SS_Library_Backups\2020_01_19_17_00_01_f104.sql
The value of the variable filename is now: ""
The value of the concatinated values is now: C:\SS_Library_Backups\2020_01_19_17_00_01_f105.sql
The value of the variable filename is now: ""
The value of the concatinated values is now: C:\SS_Library_Backups\2020_01_19_17_00_01_f106.sql
The value of the variable filename is now: ""
The value of the concatinated values is now: C:\SS_Library_Backups\2020_01_19_17_00_01_f107.sql
The value of the variable filename is now: ""
The value of the concatinated values is now: C:\SS_Library_Backups\2020_01_19_17_00_01_f108.sql
The value of the variable filename is now: ""
The value of the concatinated values is now: C:\SS_Library_Backups\2020_01_19_17_00_01_f109.sql
The value of the variable filename is now: ""

Кажется, я не могу использовать оператор SET в скобках. Я не знаю, почему «Эхо» работает, а «Set» - нет. Мне нужно обработать несколько операторов для l oop, таких как "If", "Goto" и др. c. Есть ли что-то, что я должен сделать, чтобы включить операторы, кроме "Эхо" в скобках? Спасибо, что посмотрели на это.

1 Ответ

0 голосов
/ 23 января 2020

Я нашел ответ. Это связано с утверждением:

SETLOCAL enabledelayedexpansion

См. Ссылку Как установить переменную внутри al oop для / F

Прочитав этот пост, я изменил способ обращения к переменным, которые были созданы или изменены внутри FOR / DO l oop. В частности, когда я использовал восклицательные знаки (!) Вместо процента (%), код работал нормально. Изменение последнего оператора на:

Echo The value of the variable filename is now: !filename!

привело к ожидаемым результатам.

...