windows - hvis der ikke fungerer i .BAT-fil

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg forsøger at oprette en .Bat-fil, der kun kører og kopierer s ting, hvis filen Startapp.bat udgår. Denne startapp-fil oprettes, når en bruger forpligter kode på github.


Jeg har følgende script.


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 "\%~dp0WebshopinDebug" "\%dest\%"
    SET webDest="\%dest\%/webContent"

    if not exist \%webDest\% mkdir \%webDest\% 
    xcopy /Y /s "\%~dp0WebshopwebContentweb" \%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"
)


Men det virker ikke. Nogle gange ekkoer det både den slettede besked og filen, der ikke er fundet besked, mens det ikke burde være muligt. Det bør ekko en af ​​disse meddelelser, men ikke begge. Derfor er der en hvis ellers.


Hjælp venligst!

Bedste reference


Her er det samme med de fremadrettede skråstreger fast og det unødvendige, hvis blokken ændres:


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 "\%~dp0WebshopinDebug" "\%dest\%" /Y /S
If Not Exist "\%webDest\%" MD "\%webDest\%"
XCopy "\%~dp0WebshopwebContentweb" "\%webDest\%" /Y /S
Copy /Y "\%~dp0startApp.bat" "\%dest\%"
Call "\%dest\%startApp.bat"
Del "\%~dp0startApp.bat"
Echo= Deleted startApp.bat

:Next

Andre referencer 1


Jeg er ikke sikker på, om der er flere fejl i koden, men jeg har fundet mindst en:


SET webDest="\%dest\%/webContent"

if not exist \%webDest\% mkdir \%webDest\%


Så hvis mappen ikke eksisterer, udfører du denne linje:


mkdir \%webDest\%


hvor \%webDest\% er "\%dest\%/webContent" betyder \%~dp0productionEnv/webContent.


Denne linje forårsager en fejl. Du har to mulige afgrænsere i stierstrenger i Windows: den rigtige er og den forkerte (endnu understøttet) /. kommer fra DOS og Windows og / fra UNIX. Mens vinduer ofte er kloge nok til at analysere dine kommandoer og endda tillader dig at blande op og /, tillader kommandoen mkdir ikke dette.


Dette betyder: mkdir C:somefolder vil arbejde, men mkdir C:/some/folder eller mkdir C:some/folder vandt 't.


EDIT: Samme hold for xcopy. Alt efter / betragtes som parametre og ikke som en del af stien.