Не обробляти змінну в рядку відразу в пакетному сценарії


0

Я хотів би знати, чи можна обробляти змінну, що містить змінну, не відразу, а лише коли її запитають. Наприклад, цей пакет:

 @echo off
 setlocal EnableDelayedExpansion
 set VA=Two
 set VAR=!VA! people
 set VA=Three
 ECHO !VAR!

Друкує "Дві людини". Чи можна зробити розбір тільки в кінці з ехо, щоб "Три людини", як вихід?

Відповіді:


1

Це неможливо. Як тільки змінна присвоюється значення, вона більше не залежить від змінної або тексту, який був використаний при призначенні.

Найпростіший спосіб досягти бажаного результату - просто відлучити змінну VA і текст в кінці. В основному, виконайте всі ваші обчислення, а потім, наприкінці, складіть свій висновок.

@echo off
setlocal EnableDelayedExpansion
set VA=Two
set VA=Three
ECHO !VA! people
pause

0

Просто встановіть VAR в кінці. Немає обмежень щодо того, як часто ви можете встановити змінну.

Пам'ятайте, що пакетний файл - це лише список команд, які можна ввести в командному рядку. Кожен рядок в основному є однією командою, виконаною в хронологічному порядку.

Так що якщо вам потрібно мати VAR підняті з потрібними умовами, встановіть його тільки до цього моменту. Приклад:

@echo off
setlocal EnableDelayedExpansion
set VA=Two
set VAR=%VA% people
echo %VAR%

set VA=Three
::We want to update VAR, so lets set it again:
set VAR=%VA% people
echo %VAR%

pause

:: у пакетному файлі те ж саме, що і REM

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.