2017-01-25 2 views
1

Ich versuche, eine .Bat-Datei zu erstellen, die nur ausgeführt und die Dinge kopiert, wenn die Datei Startapp.bat beendet wird. Diese startapp-Datei wird erstellt, wenn ein Benutzer Code auf github festschreibt.wenn vorhanden funktioniert nicht in .BAT-Datei

Ich habe das folgende Skript.

taskkill /F /IM Webshop.exe 

::%~dp0 means the current folder where this .bat is executed from 
SET dest=%~dp0productionEnv 

IF EXIST "%~dp0startApp.bat" (
    if not exist "%dest%" mkdir "%dest%" 
    xcopy /Y /s "%~dp0Webshop\bin\Debug" "%dest%" 
    SET webDest="%dest%/webContent" 

    if not exist %webDest% mkdir %webDest% 
    xcopy /Y /s "%~dp0Webshop\webContent\web" %webDest% 
    copy /Y "%~dp0startApp.bat" "%dest%/startApp.bat" 
    START "" "%dest%/startApp.bat" 
    del "%~dp0startApp.bat" 
    echo "Deleted startApp.bat" 

) ELSE (
    echo "startApp.bat file not found" 
) 

Aber es funktioniert nicht. Manchmal werden sowohl die gelöschte Nachricht als auch die Nachricht "Datei nicht gefunden" angezeigt, obwohl dies nicht möglich sein sollte. Es sollte eine dieser Meldungen enthalten, aber nicht beide. Deshalb gibt es ein wenn ich sonst.

Bitte helfen!

+0

Sie eine Variable innerhalb eines Codeblocks Einstellung und Dateipfade verwenden in der Regel einen Backslash in Windows – Compo

+0

Was ist das Ergebnis 'echo"% ~ dp0startApp.bat "'? – Dominique

+0

In welcher Umgebung arbeiten Sie? Pre-XP OS haben eine andere Handhabung von "IF EXIST". – MichaelS

Antwort

1

Hier ist die gleiche Sache mit dem vorderen Schrägstriche fest und die nicht erforderlich, wenn Block geändert:

Taskkill /F /IM Webshop.exe 

If Not Exist "%~dp0startApp.bat" (
    Echo= startApp.bat file not found 
    GoTo Next 
) 

Rem %~dp0 means the current folder where this .bat is executed from 
Set "dest=%~dp0productionEnv" 
Set "webDest=%dest%\webContent" 

If Not Exist "%dest%" MD "%dest%" 
XCopy "%~dp0Webshop\bin\Debug" "%dest%" /Y /S 
If Not Exist "%webDest%" MD "%webDest%" 
XCopy "%~dp0Webshop\webContent\web" "%webDest%" /Y /S 
Copy /Y "%~dp0startApp.bat" "%dest%" 
Call "%dest%\startApp.bat" 
Del "%~dp0startApp.bat" 
Echo= Deleted startApp.bat 

:Next 
+0

Das funktioniert perfekt, danke! – Dilan

1

Ich bin mir nicht sicher, ob es mehr Fehler im Code sind, aber ich habe zumindest einen gefunden:

SET webDest="%dest%/webContent" 

if not exist %webDest% mkdir %webDest% 

Also, wenn der Ordner nicht vorhanden ist, werden Sie Ausführung dieser Zeile:

mkdir %webDest% 

wobei %webDest%"%dest%/webContent" bedeutet %~dp0productionEnv/webContent.

Diese Zeile verursacht einen Fehler. Sie haben zwei mögliche Trennzeichen in Pfadzeichenfolgen in Windows: das richtige ist \ und das falsche (noch unterstützt) /. \ kommt von DOS und Windows und / von UNIX. Während Windows ist oft schlau genug, um Ihre Befehle zu analysieren und sogar ermöglicht es Ihnen, \ und / verwechseln die mkdir Befehl dies nicht erlaubt.

Das bedeutet: mkdir C:\some\folder funktioniert aber mkdir C:/some/folder oder mkdir C:\some/folder wird nicht funktionieren.

EDIT: Gleiches gilt für xcopy. Alles nach / wird als Parameter und nicht als Teil des Pfades betrachtet.

Verwandte Themen