Arquivo em lote que pode aceitar um arquivo ou uma pasta do mesmo parâmetro de entrada

0

Eu escrevi um arquivo em lotes que leva um parâmetro de entrada. Eu escrevi originalmente para realizar uma operação em %1 supondo que era um nome de arquivo, mas depois convertido para esperar %1 é uma pasta e itera em todos os itens nessa pasta e executa a operação neles usando um loop for da seguinte forma:

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

Mas agora estou percebendo que seria ótimo lidar com pastas e arquivos no mesmo parâmetro de entrada. Não consigo lidar com isso usando diferentes sinalizadores de entrada porque quero poder executar esse script a partir de um menu Enviar com botão direito do mouse para.

Como posso diferenciar entre um arquivo e uma pasta de um único parâmetro de entrada (e obviamente executar ações diferentes com base em cada)?

Mordred
fonte

Respostas:

1

Para argumentos e para variáveis ​​existe o modificador ~a retornando os atributos.
Vejo https://ss64.com/nt/syntax-args.html
Se os atributos contiverem a letra d é um diretório.

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