Starting the cmd windows as you are, it is difficult to kill them as you don't have a handle or PID for them.
If your commands are unique enough, you might use taskkill to kill the processes.
You could use Win32::Process to start the command processes then terminate them, something like:
my $cmd = 'dir';
#system("start cmd.exe /k $cmd");
"cmd.exe /k $cmd",
NORMAL_PRIORITY_CLASS | CREATE_NEW_CONSOLE,
sleep(10); # do other stuff