用于检查前 5 个字符与 MM-DD 的批处理脚本



我正在尝试为我们的一个远程媒体播放器构建一个脚本,并试图在文件出现在保管箱中后对其进行更新。我需要它来检查标题的前 5 个与 MM-DD,如果它们匹配,则播放有问题的视频。播放视频不是问题,档案也不是。我现在的问题是,当我尝试为该位置中的文件制作 for 循环时,我得到命令的语法不正确或此时没有预期的"x"。另外,我的日期格式是这样的:05 -02,我不知道为什么。

:::::::::::::::::::::::::::::::::::::::::::::: Get Date :::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Use WMIC to retrieve date and time
FOR /F "skip=1 tokens=1-6" %%G IN ('WMIC Path Win32_LocalTime Get Day^,Hour^,Minute^,Month^,Second^,Year /Format:table') DO (
IF "%%~L"=="" goto s_done
Set _mm=00%%J
Set _dd=00%%G
)
:s_done
:: Pad digits with leading zeros    
Set _mm=%_mm:~-2%   
Set _dd=%_dd:~-2%
::Finalize Date
Set date=%_mm%-%_dd%
echo %date%

::::::::::::::::::::::::::: Check the downloads folder for completed video files :::::::::::::::::::::::::::::::
:: Loop through all files
:loop
for %%a IN ("dir DropboxTrailer") DO (

::IF the name is not blank, get the first 5 characters of the video name
set first5=%a:~0,5%
::Compare those characters to the date
IF "%first5%" == "%date%" (
taskkill /im wmplayer.exe /t
::::::::::::::: Archive all previous Videos :::::::::::::
for /r %%i in ("dir DropboxTrailer") do (
xcopy /s (%%i) "dir Archived_Shows"
)
ping localhost
"C:Program FilesWindows Media Playerwmplayer.exe" "C:DropboxTrailer%%a" /fullscreen
:::::::::::::::::::::::::::::::: Exit if new video is running ::::::::::::::::::::::::::::::::::::::
exit
)
)
goto :loop

我不确定您的脚本应该做什么,但这是一个基于我的理解的示例。

@Echo Off
CD "DropboxTrailer" 2>Nul || Exit /B
For /F "Tokens=1-2" %%A In (
'WMIC Path Win32_LocalTime Get Day^,Month^|FindStr [1-9]'
) Do Set /A _dd=10%%A,_MM=10%%B
Set "DString=%_MM:~-2%-%_dd:~-2%"
:Loop
If Not Exist "%DString%*" (
Timeout 300 /NoBreak
GoTo Loop
)
TaskKill /IM WMPlayer.exe /T 2>Nul
Timeout 10 /NoBreak >Nul
XCopy "." "%~dp0Archived_Shows" /S /D /I
For %%A In ("%DString%*") Do (
"%ProgramFiles%Windows Media Playerwmplayer.exe" "%%A" /FullScreen
)
GoTo Loop

如果未找到匹配的文件,则当前每300(5 分钟(检查一次新文件。如果找到匹配的文件,则循环仅在您关闭WMPlayer后恢复。您可以根据自己的喜好在线11更改该时间跨度。

您正在设置变量%date%,这是一个系统动态变量。尝试修改内容是不建议的行为,因此请改用其他名称。

此外,我还简化了获取和修剪 MM-DD 部分,它对我来说工作正常。

for /F "skip=1 tokens=1-6" %%G IN ('WMIC Path Win32_LocalTime Get Day^,Hour^,Minute^,Month^,Second^,Year /Format:table') DO (
IF "%%~L"=="" goto s_done
Set _mm=00%%~J
Set _dd=00%%~G
)
:s_done
::Finalize Date
Set titleDate=%_mm:~-2%-%_dd:~-2%
echo %titleDate%
pause

相关内容

  • 没有找到相关文章

最新更新