Код:
@Echo Off
:: Проверяем, передан ли параметр. Если не передан - выходим с errorlevel 1 и сообщением с примером использования
If "%1"=="" Echo USAGE: %~nx0 ^<path^>&Exit /B 1
:: Для начала проверяем существование файла\папки по пути из переданного параметра
If Exist "%~1" (
:: Пробуем сделать pushd, если сработает - то очевидно, что это папка. 2>nul гасит сообщение о ошибке, если это файл
PushD "%~1" 2>nul&&(
:: Если вышло, используем popd для смены рабочего каталога обратно и копируем через xcopy, дописывая к имени папки .copy
PopD
Xcopy /E /I "%~1" "%~1.copy"
)||(
:: Если pushd не прошел, копируем как обычный файл, точно так же добавляя .copy к имени
Copy "%~1" "%~1.copy"
)
)