2015-03-02 4 views
1

Мой пакетный скрипт используется для обработки списка строк, и я хотел бы его параметризовать, чтобы он принимал этот список в качестве параметра от пользователя.Как передать список строк в пакетный скрипт в качестве параметра?

Это как мой код обрабатывает этот список в настоящее время:

set QUEUES=cars plans others 
FOR %%q IN (%QUEUES%) DO Call :defineQueues %%q 

Как я должен передать этот список на QUEUES varibale в качестве параметра?

Например, как я должен передать его в этот сценарий:

myScript.bat ? 

ответ

3

Вы должны заключите строку в кавычки:

myScript.bat "cars plans others" 

Тогда %1 будет равна "cars plans others"

Или %~1% удалить котировки и только получить cars plans others

В противном случае, вы получите 3 различных значений параметров:

myScript.bat cars plans others 

%1 => cars 
%2 => plans 
%3 => others 
+0

Correct , Спасибо! –

0

В качестве альтернативы, если вы только передать свои значения QUEUES в командной строке, вы можете использовать оператор% * пакетный файл, который является ссылкой подстановочного всем аргументы на линии.

@echo off 
FOR %%q IN (%*) DO echo %%q 

Выполнение пакетного файла следующим образом:

x.bat cars plans others 

дает выход:

C:\junk>x.bat cars plans others 
cars 
plans 
others 

C:\junk> 

Если передать любые другие аргументы команды вместе с элементами Очереди it is not that simple to 'shift' the other arguments out.

+0

Спасибо, но я передаю несколько параметров. Хорошо знать, так или иначе! –

2

Извините. Я прочитал этот вопрос, и я не могу удержаться от соблазна разъяснить пару моментов.

пакетный файл, как правило, получают несколько слова в качестве параметров, как эти из них:

myScript.bat cars plans others 

предыдущий файл Пакетный получить 3 параметра, которые могут быть обработаны с помощью% 1,% 2 и% 3 обычным способом , Если вы хотите, чтобы один параметр получить несколько слов, все они должны быть заключены в кавычки:

myScript.bat "cars plans others" 

Предыдущий файл Batch получить один параметр, которые содержат несколько слов, которые могут быть обработаны с помощью% 1.Обратите внимание, что следующие строки точно так же, по сравнению с предыдущими примерами:

set QUEUES=cars plans others 
myScript.bat %QUEUES% 

Предыдущий файл Batch получить 3 параметров и:

myScript.bat "%QUEUES%" 

... предыдущий файл Batch получить один параметр.


список является переменной, которая содержит несколько значений, разделенных пробелами, как этот:

set QUEUES=cars plans others 

Вы можете передать этот список для пакетного файла в качестве параметра таким образом:

myScript.bat QUEUES 

Предыдущий пакетный файл принимает один параметр, который является списком переменной. Для обработки значений списка в myScript.bat, использовать этот метод:

setlocal EnableDelayedExpansion 
FOR %%q in (!%1!) DO echo %%q 

массив является переменной состоит из нескольких элементов, определенных числовым нижним индексом, как этот:

set NAMES[1]=cars 
set NAMES[2]=plans 
set NAMES[3]=others 

Массив, как правило, имеет простой способ узнать количество элементов в нем; например:

set NAMES.length=3 

Вы можете передать этот массив строк в пакетном файле в качестве параметра таким образом:

myScript.bat NAMES 

Предыдущий файл Batch получить один параметр, который является массив. Для обработки элементов массива в myScript.bat, используйте этот метод:

setlocal EnableDelayedExpansion 
FOR /L %%i in (1,1,!%1.length!) DO echo !%1[%%i]! 
+0

Спасибо за точное разъяснение. –

0

Вы можете назвать его как myScript.bat %QUEUES% и вы можете использовать ниже код, чтобы принести его в ваш myScript.bat:

setlocal EnableDelayedExpansion 
FOR %%q in (!%1!) DO echo %%q 
+1

При публикации кода подумайте об использовании правильного форматирования: код должен быть отступом на 4 пробела, код в строке должен быть заключен в "' ". – Ivan

+0

@Ivan Спасибо за исправление форматирования. Я новичок здесь, только начал помогать другим –