Zrobiłem plik wsadowy Main z poniższymi liniami:

@echo off
color 1e
title  ------ Just a Test ------
start "C:\Users\%USERNAME%\Desktop\Check.bat"
:START
echo Welcome to the Game!
...

I Check.bat zawiera:

@echo off
if not exist "C:\Users\%USERNAME%\Desktop\Batch_System\importantFile.dll" goto ERROR
if exist "C:\Users\%USERNAME%\Desktop\Batch_System\importantFile.dll" goto CONTINUE
:ERROR
cls
echo        ERROR :
echo   Important file not found. please reinstall the program 
pause
exit /b
:CONTINUE
cls
exit /b

Gdy używam polecenia start, uruchomi się tylko wiersz polecenia za pomocą katalogu {X1}}, a główny plik wsadowy kontynuuje wykonanie gry. Chcę wymusić główny plik wsadowy, jeśli importantFile.dll nie istnieje.

Dobra, pozwól mi wyjaśnić: gdy główny plik wsadowy zostanie wykonany i uruchomić polecenie start, aby rozpocząć inny plik wsadowy o nazwie Check.bat, plik Check.bat sprawdza, czy plik importantFile.dll Istnieje, a jeśli nie, Check.bat wyświetla komunikat o błędzie.

Czy ktoś wie, jak pisać Check.bat w taki sposób, że gdy plik .dll nie istnieje, zmusić głównego pliku wsadowego do wyjścia?

2
Sheep1Man 2 czerwiec 2018, 00:08

2 odpowiedzi

start jest domyślnie asynchroniczny. Użyj start /wait, aby main.bat może przetestować kod wyjścia check.bat. Robić check.bat Zwróć odpowiedni kod wyjścia.

Na przykład...

main.bat

@echo off
start /b /wait check.bat
if not %errorlevel% == 0 exit /b
echo "Welcome to the game!"
...

check.bat

@echo off
if exist "importantfile.dll" exit 0
echo ERROR: Important file not found. Please reinstall the program.
pause
exit 1

notatki

Dodano /b do start, aby uniknąć otwarcia innego okna. Zmień to preferencje.

Możesz użyć call zamiast start, ale call, ale call daje zwanym dostępym do kodu dostępu do zmiennych {x3}}, więc enkapsulację jest poprawiona, jeśli używasz start, jak zrobiłeś .

Logika w check.bat jest uproszczona powyżej. Po zidentyfikowaniu ścieżki sukcesu na początku skryptu i wyjścia, reszta skryptu może przyjmować ścieżkę awarii. Oszczędza to kilka if, i etykiety, które mogą okazać, że upraszcza pisanie i czytanie podobnych skryptów. Uważaj, że potencjalnie myląc wiele punktów wyjścia w dłuższych skryptach!

Wybierając kody wyjścia, 0 jest wspólną konwencją sukcesu.

Powyższy kod to tylko jedna technika - istnieje kilka innych opcji (takich jak checksomething && dosomethingifok). Niektóre przydatne informacje na temat kodów zwrotnych i sprawdzanie ich, można je znaleźć w http://steve-jansen.github.io/guides/Windows-batch-scripting/part-3-reTurn-codes.html

0
simaos 2 czerwiec 2018, 11:33

Dzięki odpowiedzi z mofi. Mam mój przykład i exp. na to. Aby być krótki, chodzi o ustawienie formatu daty dziennika. Możesz zmienić format czasu, daty i dziennika. Możesz mieć wynik.

dlaczego-batch-file-run-with-aved-in-windows-server

0
Dulaj Kulathunga 5 październik 2019, 10:53