Пользовательский ввод нескольких значений, назначенных 1 переменной BATCH

МОЙ ПАКЕТНЫЙ ФАЙЛ ВЫГЛЯДИТ ТАК

ECHO OFF

SET /P colu= Enter column name:
SET /P sn= Enter ID (Press enter when finished): 

 if %sn%={ENTER}
  GOTO START

  :START
sqlcmd -U USER -P PWORD -S  SERVER -d DBNAME-i sqlSCRIPT.sql -o LOG.txt 
-v delete=colu d_id=sn

Я хочу, чтобы пользователь мог вводить несколько идентификаторов в одной строке. Эти идентификаторы будут удалены из БД с помощью sqlScript.sql, однако этот код не позволяет мне вводить несколько идентификаторов.

Он рассматривает значения, которые я ввожу, как 1 целое значение.

Например, если я ввожу 1,2,3 (как отдельные значения), он видит это как «1,2,3» как 1 целое значение.


person royalblue    schedule 09.10.2015    source источник
comment
Ну, вы можете создать массив на основе разделителя и пройтись по нему.   -  person Hozikimaru    schedule 09.10.2015
comment
Я не понимаю цели оператора if, для чего он предназначен?   -  person aschipfl    schedule 09.10.2015


Ответы (2)


В вашем коде есть несколько проблем:

  • переменные colu и sn должны быть очищены в начале, чтобы не использовать какое-то прежнее значение;
  • предложение if не имеет смысла, а синтаксис неверен;
  • чтобы использовать значения переменной, вам нужно расширить их как %colu%;
  • чтобы использовать одно значение за другим, используйте цикл for;
  • в середине командной строки sqlcmd есть разрыв строки;

Следующее должно делать то, что вы хотите:

@ECHO OFF

SET colu=
SET sn=
SET /P colu= Enter column name:
SET /P sn= Enter ID (Press enter when finished): 

FOR %%I IN (%sn%) DO (
  sqlcmd -U USER -P PWORD -S SERVER -d DBNAME-i sqlSCRIPT.sql -o LOG.txt -v delete=%colu% d_id=%%I
)
person aschipfl    schedule 09.10.2015
comment
разделять введенные значения столбцами или пробелами? Когда я попробовал пробелы, программа по-прежнему смотрела на оба значения как на 1 целое значение. - person royalblue; 09.10.2015
comment
должны работать следующие разделители: пробел , ; = - person aschipfl; 09.10.2015
comment
Согласно FOR /?, набор разделителей по умолчанию — пробел и табуляция. - person lit; 10.10.2015
comment
@Liturgist, вы путаете for /F и обычный for: for %%I in (set) do ... -- параметр set использует стандартные разделители cmd... - person aschipfl; 10.10.2015

Используйте цикл FOR, установите запятую (,) в качестве разделителя, затем используйте другой цикл FOR для обработки команд SQL для каждого идентификатора.

person Rick Dee    schedule 10.10.2015