每当我收到符合条件的电子邮件时,我都会运行一个批处理文件,该批处理文件接收一部分信息并将其与一个文件进行比较,然后将该信息写入两个文件并播放声音。

我想做的是,如果自上次文件更新(new_follower.txt)至今还没有过去20秒钟,请不要播放声音。 (反复播放会很烦人。)

这是我的档案。

@ECHO OFF
SET "str=%1%,"
SET str=%str: is now following you on Twitch=%
SET str=%str:"=%

find /c "%str%" "D:\~MY STUFF\Live Stream!\keep_listr.txt"
if %errorlevel% equ 1 goto notfound
goto done

:notfound

ECHO %str% >> "D:\~MY STUFF\Live Stream!\new_follower.txt"
ECHO %str% >> "D:\~MY STUFF\Live Stream!\keep_listr.txt"

"C:\Program Files (x86)\VideoLAN\VLC\vlc.exe" --play-and-exit "D:\~MY STUFF\Live Stream!\Donation Alerts\surf.wav"

echo %str%

goto done
:done

另外,在Windows 7中,是否有一种方法可以播放声音而无需像我当前正在运行的那样启动应用程序?

提前致谢

===============>>#1 票数:1 已采纳

由于目标操作系统是Windows 7,因此该代码利用了forfiles以秒为单位检索文件时间。 其余代码来自我正在使用的“运行时间表”。 它会处理午夜的翻转,但不会测试多天的时差。 根据需要进行调整。 这仅返回当前批处理文件的秒数(以美分为单位),并且该值的格式设置为通常的时间字符串。

@echo off

    setlocal enableextensions disabledelayedexpansion

    call :getFileTime "%~f0" fileTime
    call :getElapsedTime "%fileTime%" "%time%" fileAge fileAgeFormatted
    echo %fileAge% %fileAgeFormatted%

    endlocal
    exit /b

:getFileTime file returnVariable
    for /f "tokens=*" %%a in ('forfiles /p "%~dp1." /m "%~nx1" /c "cmd /c echo @ftime"') do set "%~2=%%~a"
    exit /b

:getElapsedTime time1 time2 returnVariableCent returnVariableTimeFormat
    setlocal enableextensions
    call :time2timestamp "%~1" t1
    call :time2timestamp "%~2" t2
    if %t2% gtr %t1% ( set /a "t=t2-t1" ) else ( set /a "t=8640000-t1+t2" )
    if not "%~4"=="" set /a "h=100+ (t/360000)", "m=100+ (t-(h-100)*360000)/6000", "s=100+ (t-(h-100)*360000-(m-100)*6000)/100", "c=100+ (t %% 100)"
    endlocal & (if not "%~3"=="" set "%~3=%t%") & (if not "%~4"=="" set "%~4=%h:~-2%:%m:~-2%:%s:~-2%,%c:~-2%") & exit /b 0

:time2timestamp timeValue returnVariable
    setlocal enableextensions
    if "%~1"=="" ( set "ts=%time%" ) else ( set "ts=%~1" )
    if "%ts:pm=%"=="%ts%" ( set "adjust=0" ) else ( set "adjust=12" )
    for /f "tokens=1-4 delims=:-.,apm " %%a in ("%ts%") do ( set "h=00%%a" & set "m=00%%b" & set "s=00%%c" & set "c=00%%d")
    set /a "ts=(1%h:~-2%-100+adjust)*360000+(1%m:~-2%-100)*6000+(1%s:~-2%-100)*100+(1%c:~-2%-100)"
    endlocal & set "%~2=%ts%" & exit /b 0

据我所知,对于播放声音部分,没有办法在不产生另一个进程的情况下直接从命令行播放自定义的wav。 通常的工具是VLC,wmplayer,一个VBS文件实例化的wmplayer OCX,录音机,PowerShell的,......这一切选项都在以前的问题记录(仅仅是第一) 这里的计算器或这里的超级用户。

如果可以访问某些C编译器(使用mingw测试),则扩展其中一种替代方法,此代码将生成控制台工具,该控制台工具调用PlaySound API函数并将第一个参数作为要播放的文件。

#include <windows.h>
int main(int argc, char **argv)
{
    if (argc < 2) return 1;
    if (!PlaySound( 
            argv[1], 
            NULL, 
            SND_FILENAME | SND_NODEFAULT | SND_SYNC
       )
    ) return 2;
    return 0;
}

根据您的配置,您将需要在链接器中包括对Winmm库的引用。

===============>>#2 票数:0

检查它已过去20秒的最佳方法是使用命令timeout 超时的语法为:

timeout [TIME]

我建议像这样使用它:

timeout 20 >nul

  ask by Adam Hyubusa translate from so

未解决问题?本站智能推荐: