Pessoalmente, eu preferiria o XCOPY aqui, pois ele tem mais opções que podem ser úteis, especialmente se você alterar o arquivo de lote e, em seguida, remover o diretório e os arquivos antigos usando um comutador.
Eu também daria as aspas, a menos que haja um espaço real no local ou nome do arquivo. Em seu último lance, você realmente descartou uma cotação e isso provavelmente produziria um erro. Sua última declaração também está incorreta: você só coloca aspas ao redor do comando INTEIRO antes das opções, não das partes dele. Eu adicionei os switches que considero potencialmente úteis: Você pode ver o que cada um faz ao fazer um xcopy /? em um prompt de comando. Eu também questionaria se o seu, em sua última cópia, se abc.htm está realmente no diretório raiz ... verifique isso e edite de acordo, se necessário. Por fim, edite a parte do usuário para refletir seu nome de usuário. Não sei mais nada sobre sua última linha, já que isso é específico do aplicativo.
Y:
xcopy Y:\ABC_files\*.js "C:\Documents and Settings\user\Desktop\ABC_Stage\ABC_files\"
xcopy Y:\ABC_files\*.css "C:\Documents and Settings\user\Desktop\ABC_Stage\ABC_files\"
xcopy Y:\ABC_files\*.png "C:\Documents and Settings\user\Desktop\ABC_Stage\ABC_files\"
xcopy Y:\ABC_files\*.htm "C:\Documents and Settings\user\Desktop\ABC_Stage\ABC_files\"
xcopy Y:\ABC_files\*.gif "C:\Documents and Settings\user\Desktop\ABC_Stage\ABC_files\"
xcopy Y:\ABC.htm "C:\Documents and Settings\user\Desktop\ABC_Stage\"
rd Y:\ABC_files /s /q
del Y:\ABC.htm
"C:\Program Files\App X\App-IDE.exe" -r ABC4.run