Или попробуйте с помощью
@echo off
set "dir=C:\temp"
set "file=%dir%\a.txt"
call :CheckEmpty "%file%"
goto :eof
:CheckEmpty
if %~z1 == 0 exit
ftp -s:"%dir%\ftp.action"
goto :eof
Основное отличие состоит в том, что я использую вызов функции и использую% ~ z1, поскольку модификаторы работают только для параметров, таких как% 1,% 2 ..% 9или параметры цикла for, такие как %% a ...