2010-06-03 5 views
1

Как я могу настроить команду FOR ниже для прокрутки файлов внутри папки базы данных, следуя порядку номера, префиксного в имени файла?sql deploy with dos

FOR/R ../Database %% f IN (* .sql) DO sqlcmd -S% 1 -d% 2 -U% 4 -P% 5 -i "%% ~ f" >> Журналы/% 2_DBInstall.log || GOTO ошибки

папка

База данных содержит: 001_usp_procedure1.sql 002_ups_procedure2.sql

Большое спасибо,

+0

Выполняют ли ваши процедуры не в ожидаемом порядке? Запуск быстрого теста файлов 000.sql через 006.sql выполнялся в числовом порядке для меня. У вас есть подпапки, которые вы хотите обрабатывать в одном и том же числовом порядке? – LittleBobbyTables

+0

@LittleBobby Переключатель/R в FOR указывает на рекурсию, так что, вероятно, это так. –

ответ

0

Пожалуйста, попробуйте следующее

del temp.txt 
del temp1.txt 
for /F "usebackq " %%F IN (`dir /b /s /o:n "../Database/*.sql"`) DO (
echo %%~nF/%%F >> temp.txt 
) 
sort temp.text temp1.text 
for /F "tokens=1,2 delims=/" %%i IN (temp1.txt) DO sqlcmd -S %1 -d %2 -U %4 -P %5 -i "%%j" >> Logs/%2_DBInstall.log || goto errors 

Он должен работать для рекурсивных каталогов тоже (процесс сортируется по глобальному имени файла без учета пути ... я понял проблему?) Обратите внимание, что два файла temp являются bein г. Будьте осторожны с именами (или используйте реальные временные файлы)

+0

Спасибо миллиону belisarius. Это именно то, что мне нужно. – Marcelo