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";
}