Пакетный скрипт для проверки первых 5 символов против MM-DD - PullRequest
0 голосов
/ 02 мая 2018

Я пытаюсь создать скрипт для одного из наших удаленных медиаплееров и пытаюсь обновить его, как только файл появится в выпадающем списке. Мне нужно проверить первые 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 \Dropbox\Trailer") 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 \Dropbox\Trailer") do (
        xcopy /s (%%i) "dir \Archived_Shows\"
    )

    ping localhost

    "C:\Program Files\Windows Media Player\wmplayer.exe" "C:\Dropbox\Trailer\%%a" /fullscreen

:::::::::::::::::::::::::::::::: Exit if new video is running ::::::::::::::::::::::::::::::::::::::

    exit
    )
)

goto :loop

Ответы [ 2 ]

0 голосов
/ 05 мая 2018

Я точно не знаю, что должен делать ваш скрипт, но вот пример, основанный на моем понимании.

@Echo Off
CD "Dropbox\Trailer" 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 Player\wmplayer.exe" "%%A" /FullScreen
)

GoTo Loop

Если соответствующий файл не найден, он проверяет наличие новых каждые 300 секунд, (5 минут) . Если соответствующий файл найден, цикл возобновляется только после закрытия WMPlayer. Вы можете изменить это время в строке 11 в соответствии с вашими предпочтениями.

0 голосов
/ 04 мая 2018

Вы устанавливаете переменную %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
...