本帖最后由 lonron 于 2023-3-22 18:33 编辑
- if exist "%Tmp%\Test\test.lock" (
- for /f "delims=" %%a in ('powershell "(new-timespan (gc '%Tmp%\Test\test.lock') (date -format 'yyyy.MM.dd HH:mm:ss')).totalseconds"') do (
- if %%a geq 60 (
- :Cleaning
- tasklist | find "XXX.exe" >nul && (
- taskkill /im "XXX.exe" /t /f >nul
- goto Cleaning
- )
- rd /s /q "%Tmp%\Test"
- ) else (
- goto tag2
- )
- )
- )
- :tag1
- cls
- echo.
- echo tag1 ...
- pause
- :tag2
- cls
- echo.
- echo tag2 ...
- pause
复制代码 当 "%Tmp%\Test\test.lock" 存在时,如果 "XXX.exe" 是未启动状态,且 %%a 大或等于 60,那么最终测试结果是:关闭了"XXX.exe"、删除了"%Tmp%\Test"、跳转到 tag1 标签。
当 "%Tmp%\Test\test.lock" 存在时,如果 "XXX.exe" 是已启动状态,且 %%a 大或等于 60,那么最终测试结果是:关闭了"XXX.exe"、删除了"%Tmp%\Test"、跳转到 tag2 标签。
这是为什么?
还有就是如果将 geq 换成 lss 然后将 两个返回值调换下也就是:- if exist "%Tmp%\Test\test.lock" (
- for /f "delims=" %%a in ('powershell "(new-timespan (gc '%Tmp%\Test\test.lock') (date -format 'yyyy.MM.dd HH:mm:ss')).totalseconds"') do (
- if %%a lss 60 (
- goto tag2
- ) else (
- :Cleaning
- tasklist | find "XXX.exe" >nul && (
- taskkill /im "XXX.exe" /t /f >nul
- goto Cleaning
- )
- rd /s /q "%Tmp%\Test"
- )
- )
- )
- :tag1
- cls
- echo.
- echo tag1 ...
- pause
- :tag2
- cls
- echo.
- echo tag2 ...
- pause
复制代码 同样是 "%Tmp%\Test\test.lock" 存在时,无论 "XXX.exe" 是否启动,只要 %%a 大或等于 60,结果都是 关闭了"XXX.exe"、删除了"%Tmp%\Test"、跳转到 tag1 标签。
为什么会出现这种情况?没有找到其中的原因,只感觉是不是和判断中的标签 Cleaning 有关? |