当满足if条件时,我们需要传递ctrl+;在shell脚本中停止当前项并启动下一项?
我面临的真实情况如下:当满足if条件时,我们需要传递ctrl+;在shell脚本中停止当前项并启动下一项?,shell,batch-file,Shell,Batch File,我面临的真实情况如下: 我有一个bat文件来根据上次修改的时间监控上次更新的文件,它会告诉用户文件在过去1分钟内是否没有更新 2.但我的情况是,我们使用上次修改的bat文件来监视日志文件更新。如果日志文件在最近1分钟内未更新,则脚本必须通过脚本本身发送Ctrl+C以停止当前测试 当前,当文件在1分钟内未更新时,我们将手动执行Ctrl+C,然后系统将询问我们是否需要退出?我们将说不,然后它将继续下一个测试套件 目前,我有脚本来监控基于上次修改日期和时间的日志文件更新。但是我需要自动化我在3中提供的
@echo off
:: Wmic removes regional differences
:: XP Pro can have some filename errors due to the short filename bug
setlocal
:: set the number of minutes in the following line
set minutes=1
for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do set "dt=%%a"
set "YY=%dt:~2,2%" & set "YYYY=%dt:~0,4%" & set "MM=%dt:~4,2%" & set "DD=%dt:~6,2%"
set "HH=%dt:~8,2%" & set "Min=%dt:~10,2%" & set "Sec=%dt:~12,2%"
set "stamp=%YYYY% %MM% %DD% %HH% %Min%"
call :DateToMinutes %stamp% NowMins
set "name="
for /f "delims=" %%a in ('dir * /a-d /b /od ^|find /v /i "%~nx0"') do set "name=%%a"
if defined name call :CheckMins "%name%"
if %MinsOld% gtr %minutes% echo Folder hasn't been modified in %minutes% minutes & pause
goto :EOF
:CheckMins
set "filestamp="
set "filemins="
set "MinsOld="
set "YY=" & set "YYYY=" & set "MM=" & set "DD="
set "HH=" & set "Min=" & set "Sec=" & set "dt="
set "file=%~sf1"
:: can use CreationDate instead of lastmodified
WMIC DATAFILE WHERE name="%file:\=\\%" get lastmodified | find "." >test.txt
for /f %%a in (rh5.log) do set "dt=%%a"
set "YY=%dt:~2,2%" & set "YYYY=%dt:~0,4%" & set "MM=%dt:~4,2%" & set "DD=%dt:~6,2%"
set "HH=%dt:~8,2%" & set "Min=%dt:~10,2%" & set "Sec=%dt:~12,2%"
set "filestamp=%YYYY% %MM% %DD% %HH% %Min%"
del test.txt 2>nul
if not defined yyyy goto :EOF
call :DateToMinutes %filestamp% FileMins
set /a MinsOld=%NowMins%-%FileMins%
goto :EOF
:DateToMinutes
setlocal
set yy=%1&set mm=%2&set dd=%3&set hh=%4&set nn=%5
if 1%yy% LSS 200 if 1%yy% LSS 170 (set yy=20%yy%) else (set yy=19%yy%)
set /a dd=100%dd%%%100,mm=100%mm%%%100
set /a z=14-mm,z/=12,y=yy+4800-z,m=mm+12*z-3,j=153*m+2
set /a j=j/5+dd+y*365+y/4-y/100+y/400-2472633
if 1%hh% LSS 20 set hh=0%hh%
if /i {%nn:~2,1%} EQU {p} if "%hh%" NEQ "12" set hh=1%hh%&set/a hh-=88
if /i {%nn:~2,1%} EQU {a} if "%hh%" EQU "12" set hh=00
if /i {%nn:~2,1%} GEQ {a} set nn=%nn:~0,2%
set /a hh=100%hh%%%100,nn=100%nn%%%100,j=j*1440+hh*60+nn
endlocal&set %6=%j%&goto :EOF
复制下面的文件并将其另存为filechecker.bat
@echo off
:loop
call "checkfolder.bat"
timeout /t 60 /nobreak
goto :loop
然后创建名为test.txt的txt文件。将这三个文件放在同一个文件夹中,然后单击checkfolder.bat进行验证
我的问题是,
在这里,我得到的响应是file not modified,之后我需要通过脚本传递ctrl+c,我必须将值传递为'n'并点击enter
如果(文件未更新)
ctrl+c,然后提供n作为输入以启动下一个套件
请帮我解决这个问题。请参见
此外,您可以使用批处理和vb混合发送关键点到任何您想要的窗口。。。在此示例中,键被发送到当前cmd
窗口。您可能需要调整计时,以避免在Ctrl+C
和s
@echo off
for /L %%a in (1,1,100) do (
echo(Test waiting for Ctrl+C, loop %%a
ping 1.1.1.1 -w 500 -n 1 > NUL
if %%a equ 6 call :sendCTRLC_WAIT
)
echo(This is never reached.
exit/B
rem wait for a second until ctrl-c is sent to this cmd session
:sendCTRLC_WAIT
SetLocal
set "_file1_=%TEMP%\after.vbs"
set "_file2_=%TEMP%\ctrlc.vbs"
>"%_file1_%" (
echo(wScript.Sleep 1300
echo(set oWS = CreateObject("wScript.Shell"^)
echo(oWS.SendKeys "s"
echo(wScript.Sleep 50
echo(oWS.SendKeys "{ENTER}"
)
>"%_file2_%" (
echo(wScript.Sleep 1000
echo(set oWS = CreateObject("wScript.Shell"^)
echo(oWS.SendKeys "^{c}"
)
start /B cmd /C ""%_file1_%"" & rem del /F /Q "%_file1_%" 2>NUL"
start /B cmd /C ""%_file2_%"" & rem del /F /Q "%_file2_%" 2>NUL"
exit/B 0
:sendCTRLC_TESTED
SetLocal
set "_file1_=%TEMP%\after.vbs"
set "_file2_=%TEMP%\ctrlc.vbs"
>"%_file1_%" (
echo(wScript.Sleep 300
echo(set oWS = CreateObject("wScript.Shell"^)
echo(oWS.SendKeys "s"
echo(wScript.Sleep 50
echo(oWS.SendKeys "{ENTER}"
)
>"%_file2_%" (
echo(set oWS = CreateObject("wScript.Shell"^)
echo(oWS.SendKeys "^{c}"
)
start /B cmd /C ""%_file1_%"" & rem del /F /Q "%_file1_%" 2>NUL"
start /B cmd /C ""%_file2_%"" & rem del /F /Q "%_file2_%" 2>NUL"
exit/B 0
“批处理”,而不是“bash”,是吗?我还以为是linux…是的…是批处理文件…看到了吗