Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Shift (http://forum.oszone.net/showthread.php?t=191813)

Hardip 21-11-2010 10:41 1547687

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 аргумента, что нужно сделать?

gora 21-11-2010 11:47 1547726

Цитата:

Цитата 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"


Hardip 21-11-2010 12:06 1547738

Цитата:

Цитата gora
просто вывести на экран все аргументы можно так: »

Да, это я уже прочитал)) Я неверно выразился - они должны быть не только видны, но и ещё используемы! Это реально?
Ещё я вот нашёл:
Цитата:

Работа более чем с 10 пакетными параметрами Команда shift также может быть использована для создания пакетных программ, воспринимающих более 10 параметров. В командной строке такой программы можно задать более 10-ти параметров, при этом все параметры, следующие за десятым (то есть за переменной%9) будут последовательно помещены в эту переменную %9.
Но не понял, её ведь не просто надо ввести, она определяет именно сдвиг..

gora 21-11-2010 12:10 1547742

Цитата:

Цитата Hardip
они должны быть не только видны, но и ещё используемы! Это реально? »

Реально.
Напишите, как Вы хотите их использовать? Присвоить переменным, запустить по очереди некий файл с каждым из 12-ти параметров?

Hardip 21-11-2010 12:16 1547748

Допустим хочу сделать так, копировать файл с параметрами. Делаю:
Код:

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/

gora 21-11-2010 12:20 1547753

А так?
Код:

xcopy test.bat test2.bat %*

Hardip 21-11-2010 12:24 1547755

Да! Спасибо огромное! А символы %* получается выводят все команды?
А допустим, если нужно ввести только опреденное число команд от ( ну там от 4 до 11), а свыше чтобы выдал ошибку?
Код:

IF NOT ERRORLEVEL 1 ECHO Успешно!
Так вот для ошибок? А вот с параметрами как?

gora 21-11-2010 12:27 1547758

Цитата:

Цитата 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


Hardip 21-11-2010 12:40 1547768

А вот для провери, что параметров более 11? Ведь я читал, что как то можно взять результат выполнения предыдущей команды?
Вида
Код:

FOR /L %переменная IN (начало,шаг,конец) DO
for /l %1 in 1,1,11 do

Как-то так..

gora 21-11-2010 13:06 1547778

Цитата:

Цитата 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


Hardip 21-11-2010 13:19 1547786

Цитата:

Цитата 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 его уже нету.

gora 21-11-2010 14:15 1547815

Цитата:

Цитата 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

Hardip 21-11-2010 14:37 1547828

Цитата:

Цитата gora
Если нужно передавать с 1-го по 11-й »

Именно так как нужно! Огромная благодарность Вам! Теперь неделю разбираться буду)) А вот -
Код:

%var4_11% %9
Устанавливает, что переменной var4_11 будет установлен Shift, назад на одну позицию? И If Defined t - превышено количество введенного?

gora 21-11-2010 15:02 1547856

Цитата:

Цитата 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.

Время: 01:31.
© OSzone.net 2001-