2014-09-29 3 views
0

Я пытаюсь написать пакетный скрипт, который выполняет следующие действия:Windows, партия: Sequence Number Generator в CSV файл

  1. Читать аргументы, вставленные в «startCounter» & «endCounter» переменная
  2. Имея значение шага 1
  3. Запись в параллельные файлы CSV в несколько каталогов. Весь файл CSV содержит одни и те же данные, только для записи в разные каталоги.

Я успешно проверил следующий код. По некоторым причинам, когда я изменяю значение «1006000» на некоторые другие значения, такие как «00000001» и т. Д., Сценарий не работает.

@ECHO OFF 

for /l %%x in (1006000,1,1007000) do (
    echo %%x 
    echo %%x>>C:\apache-jmeter-2.11\script\testdata1\ORDER_ID5.csv 
    echo %%x>>C:\apache-jmeter-2.11\script\ASAP\testdata2\ORDER_ID5.csv 
    echo %%x>>C:\apache-jmeter-2.11\script\ASAP\testdata3\ORDER_ID5.csv 
    echo %%x>>C:\apache-jmeter-2.11\script\ASAP\testdata4\ORDER_ID5.csv 
    echo %%x>>C:\apache-jmeter-2.11\script\ASAP\testdata5\ORDER_ID5.csv 
    echo %%x>>C:\apache-jmeter-2.11\script\ASAP\testdata6\ORDER_ID5.csv 
    echo %%x>>C:\apache-jmeter-2.11\script\ASAP\testdata7\ORDER_ID5.csv 
    echo %%x>>C:\apache-jmeter-2.11\script\ASAP\testdata8\ORDER_ID5.csv 

) 

Таким образом, я пытаюсь сделать более гибкий скрипт, который генерирует CSV файл, и имя файла CSV отображает общие записи, созданные с помощью пакетного сценария.

@ECHO OFF 

set startCounter = 1000000 
set endCounter = 1050000 

set totalRecords = %endCounter%-%startCounter% 
set name = NewDataGen_%startCounter%_to_%endCounter%_%totalRecords%.csv 


for /l %%x in (%startCounter%,1,%endCounter%) do (
    echo %%x 
    echo %%x>>%name% 
) 

Благодарим за помощь!

+2

Какая это мерзость? Конечно, не баш! Это похоже на ... Windows, но вы говорите bash несколько раз. –

+0

К сожалению, это пакетный скриптинг в Windows. – user2948219

+0

Тогда почему на самом деле код говорит '#!/Bin/bash' вверху? –

ответ

1

Ваши проблемы просты в решении и последовательны в природе.

set startCounter = 1000000 
set endCounter = 1050000 

в качестве примеров.

Синтаксис set "var=value" гарантирует, что любые конечные пробелы в строке партии не включены в значение, назначенное для var.

Пакет чувствителен к пробелам в инструкции SET. SET FLAG = N устанавливает переменную с именем «FLAG Space» на значение «Space

Но синтаксис set/a действует менее особенно и должны быть использованы для расчетов. Он только работает для целочисленных значений.

set startCounter=1000000 

будет работать счастливо, если нет НИКАКИХ завершающие пробелы на линии

set /a startCounter=1000000 

будет работать счастливо, независимо завершающих пространств

set /a startCounter = 1000000 

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

set /a totalRecords = %endCounter%-%startCounter% 
set /a totalRecords=%endCounter%-%startCounter% 
set /a totalRecords = endCounter-startCounter 
set /a totalRecords=endCounter-startCounter 

(и другие конструкции) Все будет рассчитать totalrecords (корпус в значительной степени не имеет значения в партии.) /a означает «процесс в арифметическом режиме».

(Личные предпочтения для второго формата. YMMV)

+1

Очень важное наблюдение: периодическая переменная ** всегда ** строка. Кулачок работает как целое **, если ** содержит целую строку. Ведущие нули усложняют ситуацию. Ведущий нуль интерпретирует значение как ** Octal **, поэтому '0123' и' 123' - разные значения. Чтобы получить начальные нули, добавьте 1000000000 к значению, а затем получите доступ к '% var: ~ -n%', что означает «последние n символов переменной« var ». Это еще не вся история, конечно. быть с партией! – Magoo

0

Ok получил уже. Сценарий выглядит следующим образом. Большое спасибо Magoo!

@ECHO OFF 

set /a startCounter=1000000 
set /a endCounter=1000100 

set /a totalRecords=%endCounter%-%startCounter% 
set name=NewDataGen_%startCounter%_%endCounter%_%totalRecords%.csv 

for /l %%x in (%startCounter%,1,%endCounter%) do (
    echo %%x 
    echo %%x>>%name% 
) 
Смежные вопросы