2016-04-28 5 views
0

ich die folgende Batch-Skript haben in vielen Dateien enthalten SQL-Skripte für die Ausführung, mit sqlcmd Dienstprogramm:Batch-Skript SQL-Dateien für die Ausführung, das tut nichts

@echo off 
setlocal enabledelayedexpansion 
set /p servername=Enter DB Servername : 
set /p dbname=Enter Database Name : 
set /p spath=Enter Script Path : 
set /p usr=Enter the username : 
set /p pw=Enter the password : 
set hr=%time:~0,2% 
if "%hr:~0,1%" equ " " set hr=0%hr:~1,1% 
set logfilepath= %spath%\output_%date:~-4,4%%date:~-10,2%%date:~-7,2%_%hr%%time:~3,2%%time:~6,2%.log 
set cmd='dir "%spath%\*.sql" /b' 
FOR /f "delims=" %%f IN (%cmd%) DO (
    echo ******PROCESSING %%f FILE****** 
    echo ******PROCESSING %%f FILE****** >> %logfilepath% 
    SQLCMD -S%servername% -U%usr% -P%pw% -d%dbname% -s" -i%%f -b >> %logfilepath% 
    IF !ERRORLEVEL! NEQ 0 GOTO :OnError 
) 
GOTO :Success 

Wenn ich dieses Skript eine Eingabeaufforderung mit "1>" wartet auf den Befehl. Ich kann verstehen, was falsch läuft.

Vielen Dank

Antwort

2

Sie erhalten SQLCMD gestartet und nicht tun, was Sie gewünscht. Für den Anfang würde ich diese Zeile ändern

SQLCMD -S%servername% -U%usr% -P%pw% -d%dbname% -s" -i%%f -b >> %logfilepath% 

zu

SQLCMD -S %servername% -U %usr% -P "%pw%" -d%dbname% -s ^" -i "%%f" -b >> "%logfilepath%" 
  1. Nicht sicher, ob Räume I benötigt hinzugefügt, aber einfacher
  2. Verwenden Sie Anführungszeichen, falls lesen Sie dort Gift Zeichen oder Leerzeichen sind in Passwort, Dateiname und Pfad
  3. Escape die Spaltentrennzeichen ("). Dies ist wahrscheinlich, was Ihr Problem verursacht.
+0

Vielen Dank Ihre Lösung funktioniert – zappasan

+1

Gern geschehen. Zu Ihrer Information, ich wollte ein Leerzeichen nach -d% hinzufügen. Beachten Sie auch, dass das Überprüfen der Fehlerstufe nach SQLCMD nicht viel für Sie bedeutet. Es überprüft nur, dass Sie SQLCMD starten konnten ... es gibt kein Ergebnis in Bezug auf den Status der SQL-Befehle, die von SQLCMD ausgeführt werden. Dazu müssen Sie den Inhalt der Protokolldatei analysieren, an die Sie die Ergebnisse weitergeleitet haben. – RGuggisberg