The whole concept of what you're doing is dangerous, because someone could use this to embed very nasty commands into your bot. You should NEVER evaluate a string created by someone who's not trusted. That includes putting it inside square braces, using $read without the n switch, putting it into a timer command, etc.

$read(additionalcommands.txt,w,*[ $+ [ $2 ] ]*) .msg # $readn

This shows you what you're trying to do:

//tokenize 32 a foobar | echo -a *[ $+ [ $2 ] ]*

result: *[foobar ]*

Since your diskfile doesn't contain any literal square braces, there's no match

If your intent is to do something like this:

//tokenize 32 a foobar | echo -a * [ $+ [ $2 ] ] *

result: *foobar *

... you might get a false match where trying to delete the FOO command could incorrectly match xyzfoo if that's encountered first.

You might want instead the s switch's scan, which scans a line where the 1st word is a case-insensitive match for $2, and it returns the remainder of the line excluding your match:

var %a $read(additionalcommands.txt,s,$2)
if (%a != $null) write -dl $+ $readn additionalcommands.txt

If your .txt is being kept in the same folder as the mirc.ini, you don't need to include the path, because by default that's the folder looked into when not using a path. To avoid nasty exploits, here's some other examples of things to avoid:

https://en.wikichip.org/wiki/mirc/msl_injection