Isso deve ajudá-lo ...
@echo off
::Save passed parameter to a variable...
set _loc=%~1
::Check if passed parameter is a file/folder and process accordingly...
if exist "%~s1\*" (echo Processing all files in folder %_loc% && echo. && goto :ProcFolders) else (echo Processing files && echo. && goto :ProcFile)
goto :exit
::When passed parameter is a folder...
:ProcFolders
::Check if folder is empty...
dir /b /a:-d "%_loc%" >nul 2>&1 && (echo Non-empty folder!) || (echo Checking for sub-folders... && goto :CheckSubDir)
:CheckSubDir
dir /b /a:-d /s "%_loc%\*">nul 2>&1 && (echo. && echo Subfolders/files exist) || (echo. && echo No file or subfolders found && goto :exit)
::If folder has files or subfolders with files, continue here.
for /f %%g in ('dir /b /a:-d /s "%_loc%\*.*"') do echo Processing %%g && echo.
goto :exit
::When passed parameter is a file...
:ProcFile
if "%~1"=="" goto :exit
echo Processing %~1 && echo.
shift
goto :ProcFile
goto :exit
:exit
pause
exit /b
O script verifica se o parâmetro passado é uma pasta ou arquivos individuais. Se arquivos, ele shift
passará pelos parâmetros passados e processará cada arquivo individualmente. Esteja ciente de que você pode encontrar uma limitação no número de caracteres que podem ser passados como um argumento no prompt de comando ou arrastar e soltar, portanto, se muitos arquivos precisarem ser processados, basta processar a pasta inteira. Eu consegui passar mais de 50 arquivos sem problemas, mas os nomes deles eram relativamente curtos. Eu modifiquei o script ainda mais para verificar se há subdiretórios também.
Espero que ajude!