0

次のバットファイル mybat.bat があります。

1) サービスを停止する

2) いくつかのログファイルを削除します

3) サービスを再開します。

@echo off

net stop "myservice"
if ERRORLEVEL 1 goto error
exit
:error
echo There was a problem...maybe it was alreay stopped

rem sometimes the terminal simply closes when trying to delete the logfiles :-(
set folder="C:\stuff\logs"
del %folder%\*.*   /s /f  /q


net start "myservice"
if %errorlevel% == 2 echo Could not start service.
if %errorlevel% == 0 echo Service started successfully.
echo Errorlevel: %errorlevel%

cmd.exe インスタンスを手動で開いて mybat.bat を実行しましたが、ログファイルを削除しようとすると、stuff\logs の内容が削除されずに単に閉じてしまうことがあります。なぜこれが起こっているのか、削除が失敗しても cmd インスタンスを維持する方法についてのアイデアはありますか?

しばらく待って mybat を再度実行すると、通常は機能します。

4

1 に答える 1

2

いくつか問題があります。最大の問題は、exitサービスを停止する場所のすぐ下にあることを知っていますか? おそらく、goto :label代わりにそこにいるつもりでしたか?

また、次のように引用符をset folder=行から行に移動してみてくださいdel %folder%

set folder=C:\stuff\logs
del /s /f /q "%folder%\*.*"

または、サブフォルダーも削除するには、

set folder=C:\stuff\logs
rmdir /q /s "%folder%" && md "%folder%"

ほら、これやってみる。

@echo off

net stop "myservice" || echo There was a problem...maybe it was alreay stopped

:: Now that "exit" is gone, the console probably won't close any more.

set folder=C:\stuff\logs
rmdir /q /s "%folder%" && md "%folder%"

net start "myservice"

:: "if ERRORLEVEL x" checks if %errorlevel% is greater than or equal to x

if ERRORLEVEL 1 (
    echo Could not start service.
) else (
    echo Service started successfully.
)

echo Errorlevel: %errorlevel%

注:net start "myservice"コードは次のように要約できます。

:: (leave the carat in the emoticon.  It escapes the parenthesis.)
(net start "myservice" && echo Great success.) || echo Fail. :^(

echo Errorlevel: %errorlevel%

詳細については、条件付き実行を参照してください。

于 2013-04-16T19:34:11.433 に答える