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

0

Eu escrevi um arquivo em lote que recebe um parâmetro de entrada. Eu originalmente escrevi para executar uma operação em %1 assumindo que era um nome de arquivo, mas depois converti para esperar %1 é uma pasta e itera em todos os itens nessa pasta e executa a operação neles usando um loop for como então:

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. Eu não posso lidar com isso usando diferentes sinalizadores de entrada, porque eu quero ser capaz de executar este script a partir de um menu de clique com o botão direito do mouse para enviar.

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 um)?

    
por Mordred 20.09.2017 / 22:53

1 resposta

1

Para argumentos e para variáveis, há o modificador ~a retornando os atributos.
Consulte o link
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
)
    
por 20.09.2017 / 23:35