Whoot!
Thanks a million for all your help! It's working, and here's the code! I've got a few minor issues to figure out with quotes because of long file names, but otherwise it's great!
# Program: Q-Robo.pl
# Purpose: Qeue and run multiple Robocopies at a time
# Operating system: Windows XP
# Enter a directory (eg. D:\Users\)
# Read in directories beneath and queue them up (eg. D:\Users\a, D:\Users\b, D:\Users\c)
# Process queue
system(cls); # clear the screen
use POSIX ':sys_wait_h'; # load posix module
my @queued = (); # initialize @queued to null
my $maxqueue = 3; # number of concurrent processes allowed in queue
print "> Enter soucre and destination, include final backslash\n";
# Get source tree for processing
print "> Enter source root directory to start Robocopies from: ";
$tree = uc(<STDIN>); # input search directory; must put a / at the end of the directory
# Get destination for copy
print "> Enter destination directory: ";
$to = uc(<STDIN>); # input destination
chomp($to);
chomp $tree;
opendir (TREE, $tree) || die "ERROR! Unable to open $tree :$!"; # open the directory entered
@alf=readdir TREE; # read the directory into a list
# print "DirTree: @alf\n\n"; # display contents of directory
undef @dir;
foreach $item (@alf)
{
if (-d "$tree$item" &&!(-l "$tree$item"

)
{
if ($item eq ".."

{ next} # Keep directory markers out of array
if ($item eq "."

{ next}
push (@dir,$item);# add directories to @dir array with comma seperation
}
}
print "Directory start: $tree\n";
print "Directories: @dir\n\n"; #print the directories only
my @todo = @dir;
while (@todo or @queued) {
# print "ToDo: @todo\n";
my $lasttodo = pop(@todo) if @todo;
if ( defined($lasttodo) and my $pid = fork ) { # parent process
push @queued, $pid;
} elsif (defined $pid) { # child process
print LOG "TaskN on $lasttodo \n";
TaskN ($lasttodo);
exit;
}
next if @todo and @queued < $maxqueue;
while (1) {
my $nextpid = shift @queued;
last if waitpid($nextpid, WNOHANG);
push @queued, $nextpid;
sleep 1;
}
}
sub TaskN {
my $from = shift; # Get directory passed as argument
print "* Copying $tree$from to $to$from \n";
$syscom = "Robocopy $tree$from $to$from /E /NP /Z /V /R:5 /w:3 /LOG+:$from.log";
print "$syscom\n"; # Generate command line to pass to system
system ($syscom); # execute command
}