Почему вы добавляете do
в этом месте? If Exist "%%A\*.mkv" ( Do something )
будет запускать команду с именем do
, если файл существует, но, поскольку эта команда не существует, выполнение завершится с сообщением выше
В цикле for
слово do
является ключевым словом, которое является частью синтаксиса, поэтому оно должно быть перед командой, которую вы хотите выполнить в каждом цикле. Запустите for /?
, чтобы получить справку о синтаксисе
Кроме того, ваше описание неясно. Вы хотите позвонить S1, если
- существует (* .mkv и * .ttf) или (* .otf), или
- существует (* .mkv) и (* .ttf или * .otf)?
Ваш код делает первое. Трудно увидеть, потому что ваши отступления ужасны. Вот это после исправления
For /F Delims^=^ EOL^= %%A In ('Dir/B/AD 2^>Nul^|FindStr/IVXC:"Revised"') Do (
If Exist "%%A\*.mkv" (
If Exist "%%A\*.ttf" (
If Not Exist "Revised\" MD "Revised" 2>Nul||Exit /B
Call :S1 "%%A"
)
) else (
If Exist "%%A\*.otf" (
If Not Exist "Revised\" MD "Revised" 2>Nul||Exit /B
Call :S1 "%%A"
)
)
)
Но почему вы используете 2 противоречивых варианта (/V
и /X
) в findstr
? И люди часто используют все строчные или заглавные буквы для команд / ключевых слов, а не CamelCase, как это. Таким образом, чтобы проверить последнее условие, вы можете использовать это
for /f delims^=^ eol^= %%a in ('dir /b /ad 2^>nul ^| findstr /IVXC:"Revised"') do (
if exist "%%a\*.mkv" (
if exist "%%a\*.ttf" (
if not exist "Revised\" md "Revised" 2>nul || exit /b
Call :S1 "%%a"
)
if exist "%%a\*.otf" (
if not exist "Revised\" md "Revised" 2>nul || exit /b
call :S1 "%%a"
)
)
)