What OS are you using? How do you want to handle duplicate files? And why are you changing the attributes of the files? I based this code off what I think you want to do assuming Windows XP, but have excluded the commands that I didn't see the purpose of, or added the functionality into existing commands.
You probably want something like
@echo off
title Pic Rip v0.1.4
if not exist C:\picrip md C:\picrip
if exist C:\picrip\picrip.log del C:\picrip\picrip.log
for /f %%a in ('dir "C:\Documents and Settings\%username%" /a /s /b) do (
echo %%a >>C:\picrip\picrip.log
xcopy "%%a" C:\picrip /h
)
echo All done. Have a good day! >>C:\picrip\picrip.log
Since you are copying files from all subdirectories of C:\Documents and Settings\%username% (which will include IE temporary internet files), you may encounter duplicate file names. In the case of the above script, I believe it will only keep the first copy.
The dir /a /s /b will list all files including hidden and system files, which I think is why you used attrib on the files? The xcopy with /h will copy hidden and system files. The for /f will allow you do do what I think you were building the log file for.