2013-03-09 1 views
1

Мне нужно выполнить большое количество скриптов на сервере sql server 2008r2.Эти скрипты присутствуют во многих папках и вложенных папках. Я создал командный файл для выполнения этих скриптов, но моя проблема в том, что я должен поместить этот файл bat в папку, чтобы выполнить скрипты соответствующей папки. Так что, если есть более 10 папок, поэтому я должен поместить этот файл bat 10 раз в папку. Есть ли способ, чтобы я могу поместить мой файл bat только один раз, где захочу (например, на рабочем столе) и выполнить файлы папки?способ выполнения скриптов разных папок с использованием одного файла bat из одного места

.bat файл: -

for %%G in (*.sql) do sqlcmd /S %1 /d %2 -E -i"%%G" pause 

Передача имя сервера и имя базы данных с помощью командной строки.

+0

ли эти папки изменить или они постоянно? – rud3y

ответ

1

Добавьте опцию /R в FOR искать рекурсивно:

FOR /R . %%G IN (*.sql) DO ... etc ... 

Это будет искать * .sql файлы в любом месте ниже текущей директории (.). Или сделайте это FOR /R C:\Folder %%G IN (*.sql) DO ..., если вы хотите, чтобы определенная папка была корневой.

1

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

@ECHO OFF 
SETLOCAL 
FOR /f "delims=" %%i IN (folderlist.txt) DO (
PUSHD "%%i" 
CALL yourbatasposted %* 
POPD 
) 

где folderlist.txt простой текстовый файл, содержащие имена каталогов мишеней, в одну линию.

Если вы хотите, чтобы контролировать, какие серверы/базы данных/каталоги выполняются индивидуально, а затем создать ControlList, TXT, отформатированный в виде линий

каталог базы данных имя_сервера

@ECHO OFF 
SETLOCAL 
FOR /f "tokens=1,2*delims=Q" %%i IN (controllist.txt) DO (
PUSHD "%%k" 
CALL yourbatasposted %%i %%j 
POPD 
) 

Где «Q» является разделителем между столбцы в файле controllist.txt. Опустите предложение delims =, если вы решите использовать пробелы.

Естественно, yourbatchasposted.bat должен быть расположен в любом каталоге, указанной в переменной% PATH% ...