Возможно, вы могли бы немного изменить свой код, (а пока посмотрите, решит ли он вашу проблему) :
@Echo Off & SetLocal EnableExtensions DisableDelayedExpansion
If "%~4"=="" (Call :StartMove %* "*") Else Call :StartMove %*
Pause & GoTo :EOF
:StartMove
Set "Moved=0" & For /R "%~1" %%A In ("%~4") Do (SetLocal EnableDelayedExpansion
If !Moved! Equ %3 (EndLocal & Set "Moved=%Moved%" & GoTo EndMessage)
Echo ...Moving "%%A" & Move /Y "%%A" "%~2" >Nul 2>&1 && Set /A Moved +=1)
:EndMessage
Echo Done, %Moved% files were copied successfully & EndLocal & Exit /B
Обратите внимание, что этот код похожваш , не проверяет входные параметры, (независимо от того, существуют ли они, имеют ли они правильный тип, в правильном ли порядке и т. д.) , я бы посоветовал вам реализовать что-то для этого, двигаясь вперед.Даже добавление чего-то простого, как показано ниже, будет началом:
If Not Exist "%~1\" Exit /B
If Not Exist "%~2\" Exit /B
If "%~3"=="" Exit /B