Показать полную графическую версию : [решено] 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 аргумента, что нужно сделать?
вывести на экран ещё 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"
просто вывести на экран все аргументы можно так: »
Да, это я уже прочитал)) Я неверно выразился - они должны быть не только видны, но и ещё используемы! Это реально?
Ещё я вот нашёл:
Работа более чем с 10 пакетными параметрами Команда shift также может быть использована для создания пакетных программ, воспринимающих более 10 параметров. В командной строке такой программы можно задать более 10-ти параметров, при этом все параметры, следующие за десятым (то есть за переменной%9) будут последовательно помещены в эту переменную %9.
Но не понял, её ведь не просто надо ввести, она определяет именно сдвиг..
они должны быть не только видны, но и ещё используемы! Это реально? »
Реально.
Напишите, как Вы хотите их использовать? Присвоить переменным, запустить по очереди некий файл с каждым из 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, и выводил на экран. Читал тут http://www.windowsfaq.ru/content/view/77/57/
А так?xcopy test.bat test2.bat %*
Да! Спасибо огромное! А символы %* получается выводят все команды?
А допустим, если нужно ввести только опреденное число команд от ( ну там от 4 до 11), а свыше чтобы выдал ошибку?
IF NOT ERRORLEVEL 1 ECHO Успешно! Так вот для ошибок? А вот с параметрами как?
А символы %* получается выводят все команды? »
%* - все параметры командной строки.
Пример 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
Как-то так..
нужно ввести только опреденное число команд от ( ну там от 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
свыше чтобы выдал ошибку? »
Свыше и ниже Т.е. от 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 его уже нету.
как я выше писал от 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
Если нужно передавать с 1-го по 11-й »
Именно так как нужно! Огромная благодарность Вам! Теперь неделю разбираться буду)) А вот -
%var4_11% %9
Устанавливает, что переменной var4_11 будет установлен Shift, назад на одну позицию? И If Defined t - превышено количество введенного?
Код:
%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
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC