Предназначена для изменения соответствия параметров аргументам командного файла (сдвиг параметров относительно аргументов на одну позицию вправо).
Синтаксис:
SHIFT
Команда SHIFT полезна в тех случаях, когда в командном файле требуется обеспечить, по крайней мере, одну из следующих возможностей:
1) обработку неопределенного числа аргументов;
2) обработку более девяти аргументов;
3) однообразную циклическую обработку аргументов.
При каждом выполнении команды SHIFT i-й (i = 1,...,8) параметр командного файла принимает значение (i+l)-ro параметра. Значение параметра %0 теряется, а параметр %9 связывается с первым слева из еще свободных аргументов. Таким образом, по SHIFT осуществляется сдвиг параметров относительно аргументов в сторону увеличения на единицу номеров аргументов.
1. Командный файл Q1.BAT для демонстрации работы команды SHIFT:
@ECHO OFF
ECHO %0
:BEGIN
IF /%1==/ GOTO END
ECHO %1 %2 %3 %4 %5 %6 %7 %8 %9
SHIFT
GOTO BEGIN
:END
Пример использования
Q1.BAT A B C D E F G H I J K
Будет выдано
Q1.BAT выводится спецификация командного файла, взятая из командной
REM Пример использования: M ТЕМР.ТХТ, *.ВАК, TEST.PAS
:LOOP
DEL %1
SHIFT
IF NOT .%1.==.. GOTO LOOP
Для диалога с пользователем можно использовать команду: SET /P [имя переменной = [текст]] при выполнении которой, на экран выдается текстовое сообщение <текст> и ожидается ввод ответного текста. Пример - выполним запрос пароля и присвоим его значение переменной pset:
cls
@set /p pset="Введите пароль - "
@echo Пароль - %pset%
Недостатком данного способа является невозможность продолжения выполнения командного файла при отсутствии ответа пользователя, поэтому очень часто вместо set используются сторонние программы. Одна из них - CHOICE.COM в ХP нет, но есть в Vista CHOICE выдает пользователю текстовое сообщение и ожидает выбора одного из заданных вариантов ответа (нажатия клавиш на клавиатуре). По результатам выбора формируется переменная ERRORLEVEL, значение которой равно порядковому номеру выбора. По умолчанию вариантов выбора два - Y или N. Если ответ равен Y - то ERRORLEVEL=1, если N - то ERRORLEVEL=2. Можно использовать более 2-х вариантов выбора и есть возможность задать выбор по умолчанию, когда пользователь за определенное время не нажал ни одной клавиши. Формат командной строки:
CHOICE [/C[:]клавиши] [/N] [/S] [/T[:]c,nn] [text] /C[:]клавиши - определяет допустимые варианты выбора. Если не задано, то по умолчанию YN. При выводе на экран клавиши будут разделяться запятыми, заключаться в квадратные скобки ([]) и сопровождаться вопросительным знаком. Двоеточие (:) не обязательно. /N - не выдавать варианты выбора. /S - строчные и заглавные буквы отличаются. /T[:]c,nn - Выбор по умолчанию равен "c" через "nn" секунд
Если задан параметр /T[:]c,nn, то перед использованием заданной клавиши по умолчанию делается паузу в течении заданного числа секунд. В /T указываются следующие значения: c определяет символ, который спустя nn секунд будет задаваться по умолчанию (этот символ должен быть в наборе символов, заданном в параметре /C); nn - задает продолжительность паузы в секундах (допустимые значения лежат в диапазоне от 0 до 99 - если задается 0, то перед назначением по умолчанию будет пауза). text - Строка текста, выводимая в качестве запроса(подсказки)
Создадим командный файл, демонстрирующий использование CHOICE. Он будет реагировать на нажатие клавиш "1","2",3" и "0" . При нажатии "0" выполняется завершение, а при нажатии остальных - сообщение пользователю. Если в течении 10 секунд ничего не нажато - завершение. CLS @ECHO OFF :CHOICE CHOICE /C:1230 /T:0,10 Ваш вариант IF %ERRORLEVEL% EQU 4 GOTO EXIT echo Ваш выбор=%ERRORLEVEL% GOTO CHOICE :EXIT
Теперь, используя CHOICE вы можете создавать командные файлы, логика работы которых может определяться пользователем.