Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Pętla w batch (polecenia cmd)...

Eufor 15 Cze 2011 18:39 42777 17
  • #1 15 Cze 2011 18:39
    Eufor
    Poziom 17  

    Napisałem krótki skrypt tzw. MATRIX czyli pętla zielonych cyferek lecących z góry na dół w oknie wiersza poleceń:

    Code:
    @echo off
    
    title MATRIX
    color a
    :start
    echo %random% %random% %random% %random% %random% %random% %random% %random% %random% %random% %random% %random% %random% %random%
    goto start

    Jest to bardzo łatwe do napisania lecz w samym pleceniu jest już zastosowana pętla która zapewnia powtarzanie się polecenia echo %random%
    A ja potrzebowałbym zastosować drugą pętlę której zadaniem byłoby powtarzanie samego uruchomienia aplikacji w nieskończoność... :)
    Próbowałem już kliku sposobów ale nic nie działa bo zawadza pętla która już jest wprowadzona w kodzie, czy ktoś może wie jak poprawnie wprowadzić to polecenie?

    Od razu mówię że nie robię tego w celu jakiś zniszczeń innych użytkowników sieci ale na cele zabezpieczenia własnego komputera przed ciekawskimi ;]

    Zapomniałem dodać ta pętla to:
    Code:
    :start
    
    tutaj jakieś wartości
    goto start


    Dodano po 1 [godziny] 30 [minuty]:

    Jeszcze jedno pytanko co do batch...
    Napisałem dwa krótkie skrypty ten wyżej i jeszcze jeden podobny a do tego napisałem trzeci który pełni zadanie uruchomienia dwóch powyższych na raz za pomocą jednego skrótu tylko teraz mam problem chciałbym aby te skrypty uruchamiały się w trybie pełno ekranowym dlatego też utworzyłem skróty i w nich zaznaczyłem opcję pełnego ekranu wszystko działa niestety tylko wtedy gdy uruchamiam jej ręcznie a kiedy uruchamia je mój skrypt uruchamiają sie w trybie okienkowym ;/ Oczywiści mój skrypt uruchamia skróty do danych aplikacji a nie je same.
    Wie ktoś jak temu zaradzić?
    Dość pilne...

    Dobra jakoś sobie poradziłem:
    Code:
    @echo off
    
    cd\
    cd Documents and Settings\xp\Pulpit
    start matrix2
    title MATRIX
    color a
    :start
    echo %random% %random% %random% %random% %random% %random% %random% %random% %random% %random% %random% %random% %random% %random%
    goto start


    Ten skrypt ma za zadanie udawać matrixa i włączac samego siebie w nieskończoność :D
    Tylko dalej mam problem z tym trybem pełnoekranowym pomoże ktoś? ;d

    0 17
  • #2 15 Cze 2011 19:31
    GrivIN
    Poziom 11  

    Prawy przycisk na pliku bat, właściwości, zakładka wyświetlanie i tam gdzieś jest "Uruchom na całym ekranie". ew. żeby przełączyć program na pełen ekran/okno należy użyć kombinacji ALT+Enter

    1
  • #3 15 Cze 2011 19:46
    Eufor
    Poziom 17  

    Tak wiem o tym tylko chodzi mi o to że kiedy aplikacja uruchamia się automatycznie czyli wywołuje samą siebie bez przerwy to w trybie full screen jest tylko pierwsze okienko które uruchamiam ręcznie a reszta jest w okienku chodź uruchamia to samo co ja ręcznie :(

    Może trochę to uproszcze bo dość skomplikowane jest...
    Załóżmy że mamy plik matrix.bat którego zadaniem jest pokazać tekst: matrix i włączyć samego siebie jeszcze raz, kiedy się już sam włączy robi to znów i znów..
    Jednak kiedy włanczam go ręcznie po raz pierwszy uruchamia sie w full screen a kiedy robi to sam i uruchamia siebie po raz kolejny i kolejny to już w trybie okienkowym, dlaczego?

    2
  • #4 15 Cze 2011 23:51
    iagre
    Poziom 35  

    Pokaż te wszystkie skrypty to będzie wiadomo jak się do tego zabrać.

    2
  • Pomocny post
    #5 16 Cze 2011 09:10
    marek003
    Poziom 40  

    Wszystko masz dobre tylko ...
    wyrmuj na chwilę start bat'a czyli
    "rem start matrix"
    Uruchom plik [w okienku]
    prawoklik na pasek tytułu okienka i zaznacz opcję zgodnie z poniższą fotką.

    Pętla w batch (polecenia cmd)...

    Wyłącz działanie skryptu.

    Wyedytuj i "odremuj" start matrix.

    Uruchom jeszcze raz i ... wszystkie działają na pełnym ekranie (przełączanie alt+tab otwiera kolejny ekran nie okno z "matrixem".

    Przy czym w moim przypadku mam w opcjach confignt możliwość otworzenia 250 plików. Włączenie tego skryptu strasznie obciąża procesor nie wspominając o diametralnym zwolnieniu "latania" cyferek. (Na marginesie w matrixie znaczki leciały z góry do dołu a nie w bok ale ...) Dodam że cyferki przy na raz otwartych tylu plikach pojawiają się dopiero po jakiejś minucie. Wcześniej czarny ekran zanim komp się zdecyduje coś pokazać.

    Jak dla mnie nie widzę sensu otwierania kolejnych okien z tym samym zadaniem ale niezbadane są pragnienia ludzi :)

    Nadmieniam dla próbujących mniej doświadczonych by jak już im się znudzi patrzenie na cyferki wcisnęli alt+spacja lub ctrl+break a potem przez menadżer zadań (Ctrl+alt+del) grupowo usunęli działające skrypty.

    1
  • #6 16 Cze 2011 14:45
    Eufor
    Poziom 17  

    marek003 Dzięki właśnie o to mi chodziło ;]

    Dodano po 5 [minuty]:

    Ale idąc za ciosem...
    Tak wiem uruchamianie samego siebie w nieskończoność zamula kompa i przy otwartych około 30 plikach już nic nie widać, tylko czarny ekran.
    Jak więc nałożyć polecenie aby pętla powtarzała swoje polecenie np. tylko 10 razy?

    0
  • Pomocny post
    #7 16 Cze 2011 19:39
    marek003
    Poziom 40  

    Spróbuj tak:

    Code:
    @echo off 
    
    break on

    title MATRIX
    color a

    if "%1" == "" FOR %%A IN (1 2 3 4 5 6 7 8 9) DO start C:\Docume~1\xp\Pulpit\matrix.bat %%A

    :petla
    echo %random% %random% %random% %random% %random% %random% %random% %random% %random% %random% %random% %random% %random% %random%
    goto petla


    To trochę przewrotne. Pętla FOR wykona się wtedy gdy matrix nie ma parametru (czyli za pierwszym razem). Pętla uruchamia za każdym obrotem plik matrix z parametrem licznika pętli więc kolejne uruchomienia matrix'a nie włączają pętli. Równie dobrze na końcu zamiast %%A może być jakakolwiek liczba czy litera np

    Code:
    if "%1" == "" FOR %%A IN (1 2 3 4 5 6 7 8 9) DO start C:\Docume~1\xp\Pulpit\matrix.bat 1


    Przy pełnym ekranie na pentium 4 2,4GHz i 2Gb cyfry pojawiają się na ekranie po ok 10sek.

    0
  • #8 16 Cze 2011 21:47
    Eufor
    Poziom 17  

    Po raz kolejny wielkie dzięki ;] Działa ale z tą drugą komendą ;]

    0
  • #9 17 Cze 2011 06:34
    WojtasJD
    VIP Zasłużony dla elektroda

    marek003 napisał:
    "rem start matrix"
    Uruchom plik [w okienku]
    prawoklik na pasek tytułu okienka i zaznacz opcję zgodnie z poniższą fotką.
    [...]

    Efektem ubocznym tego jest otwieranie na pełny ekran wszystkich okien "C:\WINDOWS\system32\cmd.exe" a jest możliwość tylko tych z określonym w .bat tytułem (np. "MATRIX")


    Inna wersja :wink: bez odwoływania się do pliku .bat
    Code:
    FOR /L %%a IN (1,1,10) DO start "MATRIX RELOADED" cmd /V:ON /Q /T:0A /K "for /l %%b in (0,0,0) do echo !random! !random! !random! !random! !random! !random! !random! !random! !random! !random! !random! !random! !random! !random!


    Przydałoby się pokombinować jeszcze w miejscu gdzie jest polecenie echo, które niestety dodaje do liczb znaki nowej linii.

    0
  • #10 20 Cze 2011 20:32
    Eufor
    Poziom 17  

    Code:
    @echo off
    
    color 9f
    title Nowe konto admina
    net user Matrix matrix /add
    net localgroup administratorzy /add Matrix
    pause
    echo Konto Matrix (administrator) zostało dodane! Hasło: matrix
    @echo on
    pause
    exit


    Teraz takie coś :) Ale chciałbym aby ten tekst:Konto Matrix (administrator) zostało dodane! Hasło: matrix
    Był wyświetlany tylko w przypadku kiedy poprzednie polecenia net* zostaną wykonane poprawnie :) Kombinowałem trochę ale jakoś nie mogę tego zastosować ;/

    0
  • #11 20 Cze 2011 20:35
    Atreyu Makiavel
    Poziom 34  

    Jeśli poprzednie polecenia zwracają jakieś error code'y to można użyć if'a.

    0
  • #12 20 Cze 2011 20:51
    WojtasJD
    VIP Zasłużony dla elektroda

    Code:
    net user Matrix matrix /add && net localgroup Administratorzy /add Matrix && echo Konto Matrix (administrator) zostało dodane! Hasło: matrix


    komenda1 && komenda2 && ... - komenda2 będzie wykonana jeśli komenda1 zakończy się sukcesem ...

    edit:
    aby komendy 'wyciszyć' (nie chcemy informacji na ekranie o błędach):

    Code:
    net user Matrix matrix /add > nul 2>&1 && net localgroup Administratorzy /add Matrix > nul 2>&1 && echo Konto Matrix (administrator) zostało dodane! Hasło: matrix

    0
  • #14 21 Cze 2011 10:38
    Eufor
    Poziom 17  

    Dobra jeżeli polecenia net* są dobrze wykonane wyświetla się tekst że jest ok :)
    A można dodać do tego drugi tekst który będzie się wyświetlał kiedy wystąpi błąd? :)

    0
  • #15 21 Cze 2011 21:59
    Eufor
    Poziom 17  

    Chodzi mi o coś podobnego jak funkcja "jeżeli" w exelu :)

    0
  • #16 21 Cze 2011 22:10
    Atreyu Makiavel
    Poziom 34  

    Eufor napisał:
    Chodzi mi o coś podobnego jak funkcja "jeżeli" w exelu
    Czyli zwykły "if".

    1
  • Pomocny post
    #17 21 Cze 2011 22:22
    WojtasJD
    VIP Zasłużony dla elektroda

    Można z if kombinować a prościej:

    Code:
    net user Matrix matrix /add > nul 2>&1 && net localgroup Administratorzy /add Matrix > nul 2>&1 && echo Konto Matrix (administrator) zostało dodane! Hasło: matrix || echo Wystapil jakis blad

    0
  • #18 21 Cze 2011 22:30
    Eufor
    Poziom 17  

    Dzięki bardzo WojatasJD Ty jako jeden z niewielu dajesz konkrety :)

    0