Отложенные расширения

Оцените статью

windows711273 Отложенные расширенияПеременные среды окружения и аргументы командной строки, помеченные символом %, заменяются соответствующими значениями, когда CMD читает каждую командную строку. Но при написании циклов fon и составлении операторов if это может привести к некоторым неожиданным результатам. Например, нужно запустить вторичный пакетный файл несколько раз с несколькими файлами, и при этом с первым файлом, обработанным по-другому, как в данном примере:

Call anothenbatch finstfile. txt FIRST call anothenbatch secondfile. txt MORE call anothenbatch xfiles. txt MORE

При этом может понадобиться, чтобы первый вызов приводил к созданию нового файла вывода, а последующие вызовы добавляли данные в уже существующий файл. В этом случае можно поддаться искушению автоматизировать этот процесс с помощью команды for, используя следующие команды: set isfinst=FIRST fon %%f in (*.txt) do (

Идея здесь состоит в том, что в случае обработки первого файла вторым аргументом для anothenbatch будет FIRST, а для всех последующих файлов этим аргументом будет MORE. Но такой код работать не будет. Оболочка CMD заменит %isfinst% xfiles. txt FIRST что не соответствует вашему замыслу. Но есть способ, позволяющий решить эту проблему: отложенное расширение позволяет использовать для обозначения переменных среды окружения не знаки процента, а восклицательные знаки, что будет служить индикатором потребности в их расширении только когда CMD действительно вознамерится выполнить команду. Поскольку традиционно восклицательный знак (!) не входил в перечень специальных символов, по умолчанию это свойство отключено. Для включения отложенного расширения нужно в командной строке запуска CMD указать ключ /V: ON или для включения этого свойства внутри пакетного файла воспользоваться командой SETLOCAL. Операторы setlocal enabledelayedexpansion set isfinst=FIRST fon %%f in (*.txt) do ( будут работать в соответствии с первоначальным замыслом. Отложенные расширения могут также пригодиться для сбора информации в переменной среды окружения внутри цикла for. В качестве примера того, как это может работать, следующий пакетный файл добавляет c:mystuff и каждую содержащуюся там папку к переменной среды окружения по имени dins: setlocal ENABLEDELAYEDEXPANSION set Оператор fon в рекурсивном режиме добирается до каждой папки, начиная с с: mystuff, а переменная %%d по очереди принимает в качестве значения имя каждой папки. Оператор set добавляет имя каждой папки к концу содержимого переменной dins.

Комментирование закрыто.

Вверх страницы