Przekierowanie wyniku polecenia z CMD do pliku lub schowka oraz wyświetlanie wyniku porcjami


 

Dzisiaj podzielę się z Wami kilkoma drobnymi sztuczkami, które często wykorzystuję w wierszu poleceń (CMD), gdy wynik jest długi i nieczytelny (czasem przekraczający bufor okna CMD): będzie to przekierowanie wyniku do pliku, przekierowanie do schowka i wyświetlanie porcjami. Przekierowanie do pliku będzie szczególnie przydatne  w skryptach .bat, których wynik chciałbym mieć zachowany w pliku w celu dalszego opracowania lub archiwizacji.

Z CMD do pliku

Czasami zachodzi potrzeba, aby wynik polecenia został zapisany w zewnętrznym pliku. Aby to osiągnąć, w linii poleceń możemy dodać znak „>” oraz nazwę pliku do którego mają trafić dane.

Dla przykładu poniższy skrypt zrzuci nam wartość ipconfig do pliku c:\moj_IP.txt

ipconfig > c:\moj_IP.txt

Ponowne uruchomienie tego polecenia nadpisze dotychczasową zawartość pliku.  Zamiast nadpisywać możemy dopisywać dane do istniejącego pliku zamieniając  znak > na >>

ipconfig >> c:\moj_IP.txt

Problem polskich znaków
Przekierowując do pliku treści z polskimi znakami (na przykład listę katalogów (polecenie „DIR”) lub zawartość polecenia „systeminfo”) na pewno zauważymy, że polskie znaki w pliku tekstowym zamieniają się w „krzaczki”. Dzieje się tak, gdyż kodowanie znaków w konsoli CMD jest inne, niż w GUI.
Możemy rozwiązać ten problem wpisując przed wykonaniem przekierowania polecenie:

chcp 1250

Zadziała to w danej sesji CMD do czasu otwarcia nowego okna.

Z CMD do schowka

Jeśli chcemy, aby rezultat komendy trafił do schowka dodajemy komendę clip:

ipconfig | clip

Teraz możemy nasz wynik wkleić tam, gdzie trzeba (stare dobre Ctrl+V lub PPM i „Wklej” (Jak ja śmiałem o tym wspominać :))).

Wyświetlane porcjami

Wynik polecenia możemy wyświetlać  fragmentami, tak, aby następną zobaczyć po wciśnięciu spacji lub klawisza „Enter”. Wystarczy do polecenia dodać  „| more”.  Spróbujcie sami:

ipconfig /all | more

Od razu podpowiem, że polecenie „more” daje możliwość podejrzenia zawartości pliku tekstowego. Oczywiście, jeśli plik ma wiele linii, to wyświetli się porcjami:

more c:\katalog\plik.txt

Jeśli według Was coś jeszcze warto dodać, zachęcam do komentowania.


Podobne Tematy:

  • Daniellos

    Tekst, który zwraca komenda ipconfig zawiera polskie znaki, które w utworzonym pliku tekstowym pokazują się jako krzaczki. Czy jest możliwość zmiany kodowania utworzonego pliku tekstowego tak, aby polskie znaki wyświetlały się poprawnie?

  • Daniellos

    Ani przy ręcznym wpisywaniu w konsoli poleceń „chcp 1250”, a później „ipconfig > wynik.txt” ani przy uruchomieniu pliku .cmd o takiej treści:
    chcp 1250
    ipconfig > wynik.txt

    nie pomaga. Dalej są krzaczki.

    • Przetestowałem to sobie na polskim Windowsie i sam zdziwiłem się z rezultatu: wpisanie komendy chcp 1250 działa dla większości poleceń np. dir (podaje nazwy katalogów z polskimi literami), systeminfo, netstat i innych… ale nie działa w ipconfig :) Spróbuję się dowiedzieć dlaczego tak jest.

      W międzyczasie dodałem to powyższego wpisu wzmiankę o kodowaniu. Dziękuję za poruszenie tego wątku :)

  • Benko

    Wpisałem:
    ipconfig > c:\moj_IP.txt
    i pojawił mi się tylko komunikat – Odmowa dostępu…

    • maja

      uruchom wiersz polecenia jako administrator i będzie OK

    • majksl

      Najprościej daj wynik na inną partycję niż c ;)

  • Anonim

    jak zrobić, aby wyniki komendy „ping -t 8.8.8.8” zapisywały się w sposób ciagły z CDM do pliku dodatkowo wraz z datą. Wpisywałem rózne kombinacje i nic nie działa! proszę o pomoc pzdr

  • majksl

    @echo off
    :start
    for /f „usebackq tokens=*” %%a in (`date /t`) do (
    set data=%%a
    )

    for /f „usebackq tokens=* delims= ” %%a in (`ping 8.8.8.8 -n 1 ^| find „Reply”`) do (
    set wynik_pingu=%%a
    )
    echo %data% %wynik_pingu%
    echo %data% %wynik_pingu% >>pingowanie.txt
    goto start

  • jan

    Jak z CMD zapisać do pliku tekstowego treść wydanej komendy wraz z jej wynikiem? user12@op.pl

  • Artur Zgadzaj

    Pomocna może być funkcja do zamiany polskich liter pomiędzy zmiennymi z Batch lub z plików tekstowych, a wierszem polecenia CMD, a także do wyniki poleceń CMD eksportowanych do plików tekstowych. jest to funkcja uniwersalna i zależnie od parametru zamienia w jedną lub drugą stronę.

    Funkcja działa na zmiennych systemowych Batch, zatem cokolwiek ma być zamieniane w jedna lub drugą stronę, to najpierw musi być przypisane jakiejś zmiennej. Funkcja po wywołaniu zmienia bezpośrednio zawartość tej samej zmiennej.

    Funkcja za jednym wywołaniem może zmieniać polskie litery od razu w kilku zmiennych (do 30 zmiennych), np. w dwóch, jak w przykładzie poniżej.

    Funkcję trzeba wkleić do własnego skryptu Batch, np. na końcu, jak w poniższym przykładzie

    Powiedzmy, że jest zmienna Test będzie z tekstem: ĄĆĘŁŃÓŚŹŻ ąćęłńóść i coś tam jeszcze

    SET Test=ĄĆĘŁŃÓŚŹŻ ąćęłńóść i coś tam jeszcze
    SET Inna_zmienna=Cokolwiek – np. żdżbło trawy

    Wywołanie funkcji dla tych dwóch zmiennych (zamiana z trybu tekstowego Batch na wiersz poleceń CMD):

    CALL:Zamien_polskie_litery /TXT Test Inna_zmienna

    Pozdrawiam.

    Przykładowy cały skrypt Batch wraz z omawianą Funkcją na końcu:
    —————————————————————-

    @echo off

    REM # # # # Włączenie spowolnionego rozwijania zmiennych – konieczne dla funkcji zamiany polskich liter # # # # #

    setlocal EnableDelayedExpansion

    REM # # # # Przypisanie zmiennych z polskimi literami, pochodzące z trybu TXT (gdyż nadane wewnątrz Batch) # # # # #

    SET Test=ĄĆĘŁŃÓŚŹŻ ąćęłńóść i coś tam jeszcze
    SET Inna_zmienna=Cokolwiek – np. żdżbło trawy

    REM # # # # Pokazanie zawartości zmiennych przed zmianami # # # # #

    echo Test = !Test!
    echo Inna_zmienna = !Inna_zmienna!

    REM # # # # Wywołanie funkcji do zamiany polskich liter (pochodzące z trybu tekstowego, zatem parametr /TXT ) # # # # #

    CALL:Zamien_polskie_litery /TXT Test Inna_zmienna

    REM # # # # Pokazanie zawartości zmiennych po zmianach # # # # #

    echo Test = !Test!
    echo Inna_zmienna = !Inna_zmienna!

    REM # # # # Zakończenie skryptu # # # # #

    goto:eof

    REM ********************************************************************
    REM # # # # F U N K C J E P O M O C N I C Z E # # # #
    REM ********************************************************************

    :Zamien_polskie_litery – Parametr pierwszy określa typ źródła: /TXT lub /CMD Parametry kolejne: nazwa_zmiennej_1 [ nazwa_zmiennej_2 … nazwa_zmiennej_30 ]
    REM /TXT – zamienia z formatu plików tekstowych TXT, w tym Batch (BAT) >>> na tryn poleceń CMD
    REM /CMD – zamienia z trybu poleceń CMD >>> na format plików tekstowych TXT, w tym Batch (BAT)
    REM Dla /CMD trzeba najpierw wczytać wynik polecenia do zmiennej i dopiero wtedy podać nazwę tej zmiennej
    REM Podajemy tylko nazwy zmiennych, a nie ich zawartość, zaś rezulat zamiany uzyskujemy w tej samej zmiennej
    REM Uwaga: Musi być wcześniej włączone opóźnione rozwijanie zmiennych poleceniem: setlocal EnableDelayedExpansion
    REM Opracowanie: Artur Zgadzaj Zainteresowania dodatkowe: http://www.widzenia.com

    SET CMD_PL=165,198,202,163,209,211,140,143,175,185,230,234,179,241,243,156,159,191
    SET TXT_PL=164,143,168,157,227,224,151,141,189,165,134,169,136,228,162,152,171,190

    SET Pol_From=
    if /I „%~1″==”/TXT” SET Pol_From=%TXT_PL%&SET Pol_To=%CMD_PL%&shift
    if /I „%~1″==”/CMD” SET Pol_From=%CMD_PL%&SET Pol_To=%TXT_PL%&shift
    if „%Pol_From%”==”” (echo.&echo Funkcja: Zamien_polskie_litery&echo.&echo Bledny pierwszy parametr /CMD lub /TXT&TIMEOUT /T 15>nul&goto:eof)
    if „%~1″==”” (echo.&echo Funkcja: Zamien_polskie_litery&echo.&echo Brak nazwy pierwszej zmiennej zawierajacej tekst&TIMEOUT /T 15>nul&goto:eof)

    SET Rozwijanie_PL=TAK&if not „!Rozwijanie_PL!”==”TAK” (echo.&echo Funkcja: Zamien_polskie_litery&echo.&echo Musi byc wczesniej w tym skrypcie Batch wlaczone opoznione rozwijanie&echo zmiennych poleceniem:&echo.&echo setlocal EnableDelayedExpansion&TIMEOUT /T 60>nul&goto:eof)

    if not exist CHARLIB.BAT (FOR /F %%I IN („CHARLIB.BAT”) DO (if „%%~$PATH:I”==”” echo.&echo Funkcja: Zamien_polskie_litery&echo.&echo Brak CHARLIB.BAT, znajdz w Google lub na http:^/^/tiny.pl^/mjvrt&echo.&TIMEOUT /T 60>nul&goto:eof))
    CALL CHARLIB initLib

    :nastepna_zmienna_PL
    if „%~1″==”” goto:eof
    if „!%~1!”==”” (shift&if not „%~1″==”” goto nastepna_zmienna_PL)

    SET „str_PL=!%~1!”&SET /A L_PL=0&SET Wynik_PL=

    :kolejny_znak_PL
    SET Y_PL=!str_PL:~%L_PL%,1!&if „!Y_PL!”==”” goto pomin_kolejny_znak_PL

    CALL CHARLIB asc str_PL !L_PL! Kod_PL

    FOR /F „tokens=1-18 delims=,” %%A IN („!Pol_To!”) DO (
    FOR /F „tokens=1-18 delims=,” %%a IN („!Pol_From!”) DO (
    if %Kod_PL%==%%A CALL CHARLIB chr %%a Y_PL
    if %Kod_PL%==%%B CALL CHARLIB chr %%b Y_PL
    if %Kod_PL%==%%C CALL CHARLIB chr %%c Y_PL
    if %Kod_PL%==%%D CALL CHARLIB chr %%d Y_PL
    if %Kod_PL%==%%E CALL CHARLIB chr %%e Y_PL
    if %Kod_PL%==%%F CALL CHARLIB chr %%f Y_PL
    if %Kod_PL%==%%G CALL CHARLIB chr %%g Y_PL
    if %Kod_PL%==%%H CALL CHARLIB chr %%h Y_PL
    if %Kod_PL%==%%I CALL CHARLIB chr %%i Y_PL
    if %Kod_PL%==%%J CALL CHARLIB chr %%j Y_PL
    if %Kod_PL%==%%K CALL CHARLIB chr %%k Y_PL
    if %Kod_PL%==%%L CALL CHARLIB chr %%l Y_PL
    if %Kod_PL%==%%M CALL CHARLIB chr %%m Y_PL
    if %Kod_PL%==%%N CALL CHARLIB chr %%n Y_PL
    if %Kod_PL%==%%O CALL CHARLIB chr %%o Y_PL
    if %Kod_PL%==%%P CALL CHARLIB chr %%p Y_PL
    if %Kod_PL%==%%Q CALL CHARLIB chr %%q Y_PL
    if %Kod_PL%==%%R CALL CHARLIB chr %%r Y_PL
    ))

    SET Wynik_PL=!Wynik_PL!!Y_PL!&SET /A L_PL+=1&if not „!str_PL:~%L_PL%,1!”==”” goto kolejny_znak_PL

    :pomin_kolejny_znak_PL
    SET „%~1=!Wynik_PL!”

    shift&if not „%~1″==”” goto nastepna_zmienna_PL
    goto:eof

  • Patryk Romańczuk

    Witam, mógłby mi ktoś pomóc ?
    Mam problem. Otóż chciałbym, abym mógł utworzyć skrót do wiersza poleceń wraz z zapisaną komendą, dokładnie : ping 104.160.142.3 -t
    Jakby ktoś mógł mi pomóc dziękuję.

    • Warg

      Utwórz skrót na pulpicie z tą komendą.

      • Patryk Romańczuk

        A jak ? :/

        • Patryk, zapisz sobie tą komendę w pliku z rozszerzeniem .bat (dodaj „pause” w ostatniej lini) i uruchamiaj sobie tenże plik z pulpitu.

        • Patryk Romańczuk

          Dziękuję:)