Perl 运行数千条命令

Perl 运行数千条命令,perl,shell,batch-file,Perl,Shell,Batch File,我有一个命令必须运行数千次,即 command.exe -X="AAA" command.exe -X="AAB" ... command.exe -X="ZZZ" 它将从AAA->ZZZ开始 每个命令将返回“成功”或“失败”。制作一个以如下格式运行所有这些命令的程序最有效的方法是什么 AAA: Success AAB: Failure ... 我的第一个想法是生成每个大写字母可能性的列表,然后将其与命令连接并粘贴到批处理文件中,但必须有一种更简单的方法来运行它。对于纯批处理选项 for m

我有一个命令必须运行数千次,即

command.exe -X="AAA"
command.exe -X="AAB"
...
command.exe -X="ZZZ"
它将从AAA->ZZZ开始

每个命令将返回“成功”或“失败”。制作一个以如下格式运行所有这些命令的程序最有效的方法是什么

AAA: Success
AAB: Failure
...

我的第一个想法是生成每个大写字母可能性的列表,然后将其与命令连接并粘贴到批处理文件中,但必须有一种更简单的方法来运行它。

对于纯批处理选项

for my $i ('AAA'..'ZZZ') {
    print qq{command.exe -X="$i"}
}
@echo off
    setlocal enableextensions enabledelayedexpansion
    set "r=ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    for /l %%n in (0 1 17575) do (
        set /a "a=%%n/676", "b=(%%n %% 676)/26", "c=%%n %% 26"
        for %%a in (!a!) do for %%b in (!b!) do for %%c in (!c!) do (
            set "X=!r:~%%a,1!!r:~%%b,1!!r:~%%c,1!"
            for /f %%x in ('command.exe -X="!X!"') do echo(!X!:%%x
        )
    )
除了实际运行命令并打印相应输出外,几乎与相同:

for my $i ('AAA'..'ZZZ') {
    my $output = `command.exe -X="$i"`;
    print "$i: $output\n";
}

另一种纯批量解决方案:

@echo off
setlocal EnableDelayedExpansion

for /l %%a in (65,1,90) do for /l %%b in (65,1,90) do for /l %%c in (65,1,90) do call:# %%a %%b %%c
exit/b
:#
set $#=
for %%* in (%1 %2 %3) do (cmd /c exit %%*
                          set $#=!$#!!=exitcodeascii!)  
echo Treating : !$#!
for /f "delims=" %%z in ('command.exe -X="!$#!"') do echo !$#! : %%z
如何将其从000修改为ZZZ

您将从


这是等式的一半,但OP也希望运行命令并打印出状态。@ThisSuitesBlackNot OP主要关注参数生成。@mpapec OP说“制作运行所有这些命令的程序的最有效方法是什么…”然后他写了
我的第一个想法是生成每个大写字母可能性的列表。
(在
$i
之前有一个缺少的
)啊,太好了,这就是我需要的!我如何将它从000修改为ZZZ?
sub iter {
  my ($len, $start) = @_;
  $len   ||= 3;
  $start ||= 0;

  use Number::AnyBase;
  my $c = Number::AnyBase->new([ 0..9, 'A'..'Z' ]);
  my $end = $c->to_dec("Z" x $len);

  return sub {
    return if $start>$end;
    my $s = sprintf("%${len}s", $c->to_base( $start++ ));

    $s =~ s/ /0/g;
    return $s;
  };
}

my $it = iter();
while (my $i = $it->()) {
  my $output = `command.exe -X="$i"`;
  print "$i: $output\n";
}