El problema está en que el intérprete de comandos considera todo ese código como una sola línea. Como la expansión de variables se realiza línea a línea, el intérprete reemplaza el valor de %ERRORLEVEL% incluso antes de que se ejecuten los comandos que hay dentro del IF.
Más o menos el proceso que seguiría sería el siguiente:
1) Código inicial
IF 1 == 1 (
MOVE c:\prueba.txt c:\prueba\
ECHO %ERRORLEVEL%
)
2) Compresión en una sola línea
IF 1 == 1 (MOVE c:\prueba.txt c:\prueba\ && ECHO %ERRORLEVEL%)
3) Expansión de variables de entorno (suponiendo que el valor actual de %ERRORLEVEL% sea 0)
IF 1 == 1 (MOVE c:\prueba.txt c:\prueba\ && ECHO 0)
4) Ejecución
El sistema no puede encontrar la ruta especificada.
Se han movido 0 archivos.
0
Como ves, no importa cuál sea el resultado del comando MOVE, ya que el valor que se va a mostrar por pantalla queda definido de antemano.