2014-01-13 4 views
-1

У меня есть команда, которая должна быть запущена в тысячи раз, то естьЗапуск тысячи команд

command.exe -X="AAA" 
command.exe -X="AAB" 
... 
command.exe -X="ZZZ" 

Было бы идти от AAA-> ZZZ

Каждая команда возвращает «Успех» или «Неудача ». Что является наиболее эффективным способом, чтобы сделать программу, которая будет запускать все эти команды в формате, как

AAA: Success 
AAB: Failure 
... 

Моя первая мысль была, чтобы создать список всех заглавных возможностей альфа, а затем объединить его с помощью команды и вставить его в пакетный файл, но должен быть более простой способ запустить это.

ответ

4

Почти идентичный Miller's answer кроме того, что это будет на самом деле выполнить команду и распечатать соответствующий вывод:

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

Ах, это то, что мне нужно! Я изменяю его, чтобы перейти от 000 к ZZZ? – Bijan

4
for my $i ('AAA'..'ZZZ') { 
    print qq{command.exe -X="$i"} 
} 
+0

Это половина уравнения, но OP также хочет запустить команды и распечатать статус. – ThisSuitIsBlackNot

+0

@ThisSuitIsBlackNot OP в первую очередь касается генерации параметров. –

+0

@mpapec OP говорит: «Какой самый эффективный способ сделать программу **, которая будет запускать все эти команды ** ...» – ThisSuitIsBlackNot

3

Для чистого пакетного варианта

@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 
     ) 
    ) 
0

Другой чистый пакетное решение:

@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 
2

Как мне изменить его, чтобы перейти от 000 к ZZZ?

Вы nedd Number::AnyBase от cpan,

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"; 
} 
Смежные вопросы