Ao comparar as extensões de arquivo, coloque a extensão do arquivo atual entre aspas, assim:
for %%i in (D:\test\*.*) do if "%%~xi" == ".zip" move /Y "D:\test\%%~ni%%~xi" "D:\test\complete"
Eu testei e funciona bem.
Para usar uma sub-rotina, tente isto:
for %%i in (D:\test\*.*) do call :checkextension %%i
:checkextension
if "%~x1" == ".zip" move /Y "%~1" "D:\test\complete"
goto:eof
Observe como o caminho de cada arquivo ( %%i
) é passado como um parâmetro para a sub-rotina :checkextension
, que então acessa como %~1
(ou %~x1
quando somente a extensão é necessária).