Shift
Доброго времени суток всем! Выполняю bat-ник, его старт происходит с 11 аргументами. Почитал по поводу Shift. но не до конца понял.
Код:
cls
SHIFT start %1 %2 %3 %4 %5 %6 %7 %8 %9 cmd.exe
echo File %0 with param %1 %2 %3 %4 %5 %6 %7 %8 %9
Мне для того чтобы вывести на экран ещё 2 аргумента, что нужно сделать?
|
Цитата:
Цитата Hardip
вывести на экран ещё 2 аргумента »
|
просто вывести на экран все аргументы можно так:
Файл Hardip.bat :
Код:
@Echo Off
Echo %*
Pause>Nul
Файл для проверки запуска HardipStart.bat:
Код:
@Echo Off
Hardip.bat "1 param" "2 param" "3 param" "4 param" "5 param" "6 param" "7 param" "8 param" "9 param" "10 param" "11 param" "12 param"
|
Цитата:
Цитата gora
просто вывести на экран все аргументы можно так: »
|
Да, это я уже прочитал)) Я неверно выразился - они должны быть не только видны, но и ещё используемы! Это реально?
Ещё я вот нашёл:
Цитата:
Работа более чем с 10 пакетными параметрами Команда shift также может быть использована для создания пакетных программ, воспринимающих более 10 параметров. В командной строке такой программы можно задать более 10-ти параметров, при этом все параметры, следующие за десятым (то есть за переменной%9) будут последовательно помещены в эту переменную %9.
|
Но не понял, её ведь не просто надо ввести, она определяет именно сдвиг..
|
Цитата:
Цитата Hardip
они должны быть не только видны, но и ещё используемы! Это реально? »
|
Реально.
Напишите, как Вы хотите их использовать? Присвоить переменным, запустить по очереди некий файл с каждым из 12-ти параметров?
|
Допустим хочу сделать так, копировать файл с параметрами. Делаю:
Код:
test.bat /a /p /v /c /f /l /h /k /j /w /y
- для запуска из командной строки
Код:
xcopy test.bat test2.bat %1 %2 %3 %4 %5 %6 %7 %8 %9 Echo %*
- а вот что написано в самом файле. Он соответсвенно после 9 обрезает..
Грубо - надо чтобы делал действия с параметрами более 11, и выводил на экран. Читал тут
HTML код:
http://www.windowsfaq.ru/content/view/77/57/
|
А так?
Код:
xcopy test.bat test2.bat %*
|
Да! Спасибо огромное! А символы %* получается выводят все команды?
А допустим, если нужно ввести только опреденное число команд от ( ну там от 4 до 11), а свыше чтобы выдал ошибку?
Код:
IF NOT ERRORLEVEL 1 ECHO Успешно!
Так вот для ошибок? А вот с параметрами как?
|
Цитата:
Цитата Hardip
А символы %* получается выводят все команды? »
|
%* - все параметры командной строки.
Пример Hardip.bat для вывода 12-ти параметров с использованием Shift
Код:
@Echo Off
Echo %1
Echo %2
Echo %3
Echo %4
Echo %5
Echo %6
Echo %7
Echo %8
Echo %9
Shift
Echo %9
Shift
Echo %9
Shift
Echo %9
Pause>Nul
|
А вот для провери, что параметров более 11? Ведь я читал, что как то можно взять результат выполнения предыдущей команды?
Вида
Код:
FOR /L %переменная IN (начало,шаг,конец) DO
for /l %1 in 1,1,11 do
Как-то так..
|
Цитата:
Цитата Hardip
нужно ввести только опреденное число команд от ( ну там от 4 до 11), а свыше чтобы выдал ошибку? »
|
Код:
@Echo Off
Echo %4
Echo %5
Echo %6
Echo %7
Echo %8
Echo %9
Shift
Echo %9
Shift
Echo %9
Shift
Set t=%9
If Defined t Echo Error. Param 12 exist
Pause>Nul
|
Цитата:
Цитата gora
свыше чтобы выдал ошибку? »
|
Свыше и ниже Т.е. от 2 до 14 ил как я выше писал от 4 до 11.
Может я что-то не понимаю? Делаю так - Hardip.bat
Код:
@Echo Off
xcopy test.bat test2.bat
Echo %1 %2 %3 %4 %5 %6 %7 %8 %9
Shift
Echo %9
Shift
Echo %9
Shift
Set t=%9
If Defined t Echo Error. Param 11 exist
Pause>Nul
И запускаю в строке
Код:
test.bat /a /p /v /c /f /l /h /k /j /w /y
Но он явно не выполнеят команд несколько, т.к. допустим тут
Код:
xcopy test.bat test2.bat %*
он выполняет приглашение - /p, а в Hardip.bat его уже нету.
|
Цитата:
Цитата Hardip
как я выше писал от 4 до 11 »
|
Код:
@Echo Off
Set t=%4
If Not Defined t Echo Ошибка, параметров менее 4-х& Pause>Nul& Exit
Set var4_11=%4 %5 %6 %7 %8 %9
Shift
Set var4_11=%var4_11% %9
Shift
Set var4_11=%var4_11% %9
Shift
Set t=%9
If Defined t Echo Ошибка, параметров более 11-ти& Pause>Nul& Exit
Echo Запуск с параметрами %var4_11%
xcopy test.bat test2.bat %var4_11%
Pause>Nul
Будут переданы параметры начиная с 4-го до 11-й включительно.
Если нужно передавать с 1-го по 11-й , но запускать копирование только когда параметров от 4-х до 11-ти, то измените одну строку:
Код:
Set var4_11=%1 %2 %3 %4 %5 %6 %7 %8 %9
|
Цитата:
Цитата gora
Если нужно передавать с 1-го по 11-й »
|
Именно так как нужно! Огромная благодарность Вам! Теперь неделю разбираться буду)) А вот -
Устанавливает, что переменной var4_11 будет установлен Shift, назад на одну позицию? И I f Defined t - превышено количество введенного?
|
Цитата:
Цитата Hardip
Код:
%var4_11% %9Устанавливает, что переменной var4_11 будет установлен Shift »
|
Нет.
Команда Set var4_11=%1 %2 %3 %4 %5 %6 %7 %8 %9 задает переменную var4_11 равной первым 9-ти параметрам ком. строки записанными через пробел.
Команда Shift сдвигает все переменные (%2 %3 %4 %5 %6 %7 %8 %9) и в переменной %9 оказывается 10-й параметр ком. строки.
Далее команда Set var4_11=%var4_11% %9 добавляет к переменной var4_11 этот 10-й параметр через пробел. И т.д...
Цитата:
Цитата Hardip
И If Defined t - превышено количество введенного? »
|
Проверяет, определена ли переменная t, которая ранее была получена из последовательно сдвинутой переменной %9 и должна быть равна 12-му параметру ком. строки. Фактически проверяется наличие 12-го параметра, есть он - ошибка, нет - значит параметров менее 12-ти.
|
Время: 01:31.
© OSzone.net 2001-