Я написал командный файл, который принимает входной параметр. Первоначально я написал его для выполнения операции над %1 предполагая, что это имя файла, но затем преобразовал его, чтобы ожидать, что %1 является папкой, и он перебирает все элементы в этой папке и запускает на них операцию, используя цикл for следующим образом:

for %%f in (%1/*.mkv) do (
    ffmpeg -y -i "%%f" -vcodec copy -acodec aac -b:a 192k "e:\temp\%%~nxf"
)

Но теперь я понимаю, что было бы здорово обрабатывать как папки, так и файлы с одним входным параметром. Я не могу справиться с этим, используя разные входные флаги, потому что я хочу иметь возможность запустить этот скрипт из меню отправки правой кнопкой мыши.

Как я могу отличить файл и папку от одного входного параметра (и, очевидно, выполнять различные действия на основе каждого)?

1 ответ1

1

Для аргументов и для переменных есть модификатор ~a возвращающий атрибуты.
См. Https://ss64.com/nt/syntax-args.html.
Если атрибуты содержат букву d , это каталог.

@Echo off
Echo %~a1|findstr "d" >nul 2>&1 && (
    echo %1 is a directory
) || (
    echo %1 is a file
)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .