To answer your question simply:
The commands that you enter in assembly events (whether before or after) are the same as you type in the command line field.
In your example:
copy /Y "$(TargetDir)$(ProjectName).dll" "$(SolutionDir)lib\$(ProjectName).dll"
copy is a valid DOS copy command.
/ Y is a normal parameter that prohibits confirmation requests.
"$ (TargetDir) $ (ProjectName) .dll" is the source file to copy.
"$ (SolutionDir) lib \ $ (ProjectName) .dll" is the place where you want to copy the file.
You can contact here for more information on batch file commands: List of batch commands
$ ({Identifier}) are macros that can be used in the Visual Studio Pre / Post Build Event Designer.
You can refer to the MSDN online help for more information about macros: MSDN Macro List
The line provided to you will not do what you want. It is usually used to copy DLL files to the library folder used by some other projects or solutions.
The solution you found to create a new build event is the right one.
All you have to do is write down a command that will actually copy the files.
It will look something like this:
XCOPY "$(SolutionDir)TestProject\Reports\*.*" "$(SolutionDir)TestSetup1\SSRS_Repor" /Q /E /I
/ Q: Quiet | Do not display backup files
/ E: Recursive (copy subfolder structure and files)
/ I: assume that the destination is a folder if it does not already exist (if necessary, create a new folder)