2016-04-19 11 views
1

Ich kombinierte ein paar Lösungen, die ich online gefunden habe, um zu versuchen, dies zu erreichen.Führen Sie alle SQL-Dateien in mehreren Verzeichnissen

https://stackoverflow.com/a/6504317/2471473

https://sqlandme.com/2013/03/25/sql-server-executing-multiple-script-files-using-sqlcmd/

Ich versuche, einen einzigen .cmd-Skript (Script1.cmd) mit Ordnern von SQL-Dateien ausführen. Dieses einzelne Skript führt ein anderes Skript (Script2.cmd) aus, um sqlcmd zum Ausführen aller .sql-Dateien an diesem Speicherort zu verwenden. Es funktioniert meistens, aber es bleibt ein Befehlsfenster offen, das ich für jeden Ordnerstandort verlassen muss.

Script1.cmd

start Script2.cmd "C:\Location1" 
start Script2.cmd "C:\Location2" 

Script2.cmd

@Echo Off 
FOR /f %%i IN ('DIR %1\*.Sql /B') do call :RunScript %1 %%i 
GOTO :END 

:RunScript 
Echo Executing Script: %2 
cd %1 
SQLCMD -S Server123 -d Database456 -E -i %2 
Echo Completed Script: %2 

:END 
+1

Haben Sie wirklich beide 'Script2.cmd' wollen Befehlszeilen gleichzeitig laufen zu lassen? – aschipfl

+0

@aschipfl könnte ich sie seriell von Scrip1 ausführen? – Kennah

+1

Ja: Um nacheinander zu laufen, benutzen Sie einfach 'call Script2.cmd *' ... Sie können auch 'start" "/ WAIT cmd/C Script2.cmd *' verwenden, wenn Sie ein neues Fenster öffnen möchten Jeder Lauf ... – aschipfl

Antwort

2

Offizielle Befehlszeilenreferenz für Windows XP oder für Windows Server 2003, Windows Vista (and above) scheint zu kurz zu sein. Lesen this (extended) start command documentation:

Syntax: START "title" [/D path] [options] "command" [parameters]

immer ein TITLE um diesen kann eine einfache Zeichenfolge sein wie "My Script" oder nur ein paar leeren Anführungszeichen "". Laut der Microsoft Dokumentation ist der Titel optional, aber abhängig von den anderen Optionen können Sie Probleme haben, wenn es weggelassen wird.

Wenn Befehl ein interner cmd-Befehl oder eine Batch-Datei ist, wird der Befehl Prozessor mit -Switch auf cmd.exe ausgeführt. Das bedeutet, dass das Fenster nach dem Ausführen des Befehls bleibt.

Weiter Script1.cmd funktionieren sollte und in der Nähe gestartet Befehl Fenster:

start "" cmd /C Script2.cmd "C:\Location1" 
start "" cmd /C Script2.cmd "C:\Location2" 
+0

Huzzah! Das war die Lösung! – Kennah

Verwandte Themen