Your main mistake is assigning the string entered by the user of the batch file to environment variable input
but referencing on command copy
the environment variable data
which is not defined at all and therefore %data%
is replaced twice before execution of the command line by nothing.
What about using this batch code?
@echo off
rem The next 2 commands are commented out as not needed for this task.
rem cd \
rem dir /s *.doc *.docx *.xlsx *.ppt
setlocal EnableExtensions EnableDelayedExpansion
:UserPrompt
echo/
echo Enter the file name with complete path or drag and drop
echo the file to copy from Windows Explorer over this window.
echo/
set "FileName=""
set /p "FileName=Enter file name: "
echo/
rem Remove all double quotes from entered string.
set "FileName=!FileName:"=!"
rem Has the user entered any file name at all?
if "!FileName!" == "" goto UserPrompt
rem Does the file really exist?
if exist "!FileName!" goto CopyFile
echo Error: The specified file does not exist.
echo/
goto UserPrompt
:CopyFile
copy "!FileName!" C:\abc\
echo/
endlocal
pause
Read the answer on Why is string comparison after prompting user for a string/option not working as expected? for an explanation on all the extra code used here.
For understanding the used commands and how they work, open a command prompt window, execute there the following commands, and read entirely all help pages displayed for each command very carefully.
copy /?
echo /?
endlocal /?
goto /?
if /?
pause /?
rem /?
set /?
setlocal /?