Your main problem, I think, is your use of \ after $mircdir. $mircdir and $scriptdir automatically come with a \ at the end. So, c:\mirc\testing\test.txt would be $mircdirtesting\test.txt (notice no \ between $mircdir and testing). It looks weird, but it is correct. If you prefer not to see it look like that, you can combine them with $+()... $+($mircdir,testing\test.txt). If that makes it easier for you to read your script, go for it.
The best way to make /play stop after X lines would be to play it through an alias...
on 666:text:!readlog *:#: {
unset %playlog.cnt
var %starting.position = 1
var %starting.position = $3
play -af $+ %starting.position playlog $nick $mircdirlogs\ $+ $2 1500
}
alias playlog {
inc %playlog.cnt
msg $1-
if (%playlog.cnt >= [color:red]20[/color]) { play stop | unset %playlog.cnt }
}
That will do what you wanted. Change the red 20 to however many lines you want it to display.
USE:
!readlog filename starting_line_number
EXAMPLE:
!readlog recent.log 15
Note that the starting line number is optional. It will default to 1 if left blank.
==========
Oh, and Emilo... You have an extra ). You also don't need to use $chr for the \.