PDA

Показать полную графическую версию : [решено] Shift


Hardip
21-11-2010, 10:41
Доброго времени суток всем! Выполняю 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 аргумента, что нужно сделать?

gora
21-11-2010, 11:47
вывести на экран ещё 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"

Hardip
21-11-2010, 12:06
просто вывести на экран все аргументы можно так: »
Да, это я уже прочитал)) Я неверно выразился - они должны быть не только видны, но и ещё используемы! Это реально?
Ещё я вот нашёл:
Работа более чем с 10 пакетными параметрами Команда shift также может быть использована для создания пакетных программ, воспринимающих более 10 параметров. В командной строке такой программы можно задать более 10-ти параметров, при этом все параметры, следующие за десятым (то есть за переменной%9) будут последовательно помещены в эту переменную %9.
Но не понял, её ведь не просто надо ввести, она определяет именно сдвиг..

gora
21-11-2010, 12:10
они должны быть не только видны, но и ещё используемы! Это реально? »
Реально.
Напишите, как Вы хотите их использовать? Присвоить переменным, запустить по очереди некий файл с каждым из 12-ти параметров?

Hardip
21-11-2010, 12:16
Допустим хочу сделать так, копировать файл с параметрами. Делаю:
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, и выводил на экран. Читал тут http://www.windowsfaq.ru/content/view/77/57/

gora
21-11-2010, 12:20
А так?xcopy test.bat test2.bat %*

Hardip
21-11-2010, 12:24
Да! Спасибо огромное! А символы %* получается выводят все команды?
А допустим, если нужно ввести только опреденное число команд от ( ну там от 4 до 11), а свыше чтобы выдал ошибку?
IF NOT ERRORLEVEL 1 ECHO Успешно! Так вот для ошибок? А вот с параметрами как?

gora
21-11-2010, 12:27
А символы %* получается выводят все команды? »
%* - все параметры командной строки.
Пример 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

Hardip
21-11-2010, 12:40
А вот для провери, что параметров более 11? Ведь я читал, что как то можно взять результат выполнения предыдущей команды?
Вида FOR /L %переменная IN (начало,шаг,конец) DO
for /l %1 in 1,1,11 do

Как-то так..

gora
21-11-2010, 13:06
нужно ввести только опреденное число команд от ( ну там от 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

Hardip
21-11-2010, 13:19
свыше чтобы выдал ошибку? »
Свыше и ниже Т.е. от 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 его уже нету.

gora
21-11-2010, 14:15
как я выше писал от 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

Hardip
21-11-2010, 14:37
Если нужно передавать с 1-го по 11-й »
Именно так как нужно! Огромная благодарность Вам! Теперь неделю разбираться буду)) А вот -
%var4_11% %9
Устанавливает, что переменной var4_11 будет установлен Shift, назад на одну позицию? И If Defined t - превышено количество введенного?

gora
21-11-2010, 15:02
Код:
%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-й параметр через пробел. И т.д...И If Defined t - превышено количество введенного? »
Проверяет, определена ли переменная t, которая ранее была получена из последовательно сдвинутой переменной %9 и должна быть равна 12-му параметру ком. строки. Фактически проверяется наличие 12-го параметра, есть он - ошибка, нет - значит параметров менее 12-ти.




© OSzone.net 2001-2012