🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

1 total messages Started by Artur Zgadzaj Sun, 17 Jan 2016 03:42
Skrypt Batch do zamiany polskich liter z Notatnika na CMD i odwrotnie lub usuwanie polskich liter
#18697
Author: Artur Zgadzaj
Date: Sun, 17 Jan 2016 03:42
580 lines
23160 bytes
Przedstawiam w³asn± uniwersaln± funkcjê  Zamien_polskie_litery do zastosowania w dowolnym skrypcie Batch bez potrzeby zmiany kodowania ¶rodowiska, zmiany czcionek, czy u¿ywania innego edytora tekstów. Funkcja ta zapewnia pracê na standardowym ¶rodowisku, ze standardowymi narzêdziami i w taki sam sposób w ró¿nych systemach Windows. 

Funkcja zamienia lub usuwa polskie litery w zawarto¶ci zmiennej podanej w parametrze. Dzia³a w zale¿no¶ci od parametru pomocniczego /TXT lub /CMD pomiêdzy oboma ¶rodowiskami, czyli tekstowym, a wierszem polecenia. zatem raz mo¿e zamieniæ polskie litery z trybu tekstowego TXT na tryb poleceñ CMD, a je¶li potrzebujemy, to odwrotnie, czyli z trybu poleceñ CMD na tryb plików tekstowych TXT.  Ten pomocniczy parametr /TXT lub /CMD ma tylko wskazywaæ z jakiego ¼ród³a pochodzi tekst, czyli jaki tryb bêdzie ¼ród³em. Wtedy zamienia na odpowiednio przeciwny. 

Funkcja mo¿e te¿ usuwaæ polskie litery, czyli zamieniaæ "ogonki" na odpowiedniki angielskie:
   /ANGT  - usuwa polskie litery, gdy ¼ród³em ma byæ tekst pochodz±cy z trybu tekstowego, jak pliki TXT, w tym z Batch (BAT)
   /ANGC  - usuwa polskie litery, gdy ¼ród³em ma byæ tekst pochodz±cy z trybu wiersza poleceñ CMD

Funkcjê trzeba wkleiæ do swego skryptu Batch, np. na jego koñcu, a wówczas wywo³uje siê j± podaj±c CALL z dwukropkiem i etykietê skoku do funkcji, czyli generalnie tak:

     CALL:Zamien_polskie_litery /TXT nazwa_zmiennej

Mo¿na te¿ j± zapisaæ jako osobny plik Batch, jako:     Zamien_polskie_litery.bat
Wtedy wywo³anie bêdzie nieco inne, to znaczy bez dwukropka :  po s³owie CALL. Poza tym nie trzeba wtedy funkcji wklejaæ do w³asnego skryptu.

     CALL Zamien_polskie_litery /TXT nazwa_zmiennej

Zatem w parametrze podawana jest nazwa zmiennej, a zawarto¶æ tej zmiennej funkcja sama sobie pobierze, za¶ wynik umie¶ci w tej samej zmiennej, czyli po wykonaniu tej funkcji zawarto¶æ tej zmiennej ulegnie zmianie.

Funkcja operuje na praktycznie dowolnej liczbie zmiennych (³±cznie 256 znaków tego polecenia), przyk³adowo:

      CALL:Zamien_polskie_litery /TXT nazwa_zmiennej_1 nazwa_zmiennej_2 nazwa_zmiennej_3

Je¶li u¿yjemy parametru /CMD do zamiany z trybu komend wiersza poleceñ CMD na tryb tekstowy plików tekstowych, np. do eksportu wyników jakiego¶ polecenia do plików tekstowych, które potem maj± zawieraæ prawid³owe polskie litery, to najpierw trzeba z takiego polecenia CMD wynik zaimportowaæ do jakiej¶ zmiennej, gdy¿ funkcja ta dzia³a tylko na zmiennych. Czyli najpierw przypisujemy wynik z CMD do jakiej¶ zmiennej, potem wywo³ujemy funkcjê do zamiany polskich liter dla tej zmiennej i po tej zamianie mo¿emy wyeksportowaæ wynik zamiany z tej zmiennej do jakiego¶ pliku tekstowego, np. raportu, czy pliku typu LOG. Przyk³adowo chcemy uzyskaæ w pliku tekstowym Wykaz_CMD.txt prawid³owy wykaz plików i katalogów z dobrymi polskimi literami, aby nie by³o krzaczków. Utworzymy rêcznie przyk³adowy plik lub podfolder z polskimi literami w jakim¶ folderze. We¼miemy pierwsze trzy linie wykazu z tego folderu i wczytamy je do numerowanych zmiennych typu wykaz1. Zamienimy znaki i wyeksportujemy prawid³owy wynik do pliku tekstowego Wykaz_TXT.txt

        DIR /B>Wykaz_CMD.txt
        (
        set /p wykaz1=
        set /p wykaz2=
        set /p wykaz3=
        )< Wykaz_CMD.txt

       CALL:Zamien_polskie_litery /CMD wykaz1 wykaz2 wykaz3      

       echo %wykaz1%>Wykaz_TXT.txt
       echo %wykaz2%>>Wykaz_TXT.txt
       echo %wykaz3%>>Wykaz_TXT.txt

Uwagi techniczne:
1.	Funkcja u¿ywa zewnêtrznej biblioteki CHARLIB.BAT i znajd¼ j± w Google lub na  https://sites.google.com/site/dbenhamfiles/  oraz umie¶æ w folderze przeszukiwania Windows %PATH%
2.	Funkcja jest odporna, czyli odpowiednio uwzglêdnia u¿ycie w tek¶cie znaku wykrzyknika ! lub kombinacji znaków ^! oraz ^^!
Wymaga to jednak od niej dodatkowych czynno¶ci, co jest zwarte w podfunkcjach "znaczniki_transformuj" do zamiany "przed" i przywróceniu "po"
Wszelkie wykrzykniki ! i nawiasy okr±g³e () na koniec ustawia zale¿nie od ¶rodowiska, jako typ znaku specjalnego, czyli ^! ^( ^) lub odpowiednio ^^! ^^( ^^)
Poza tym, funkcja usuwa inne wyst±pienia znaku daszka ^ (Kod=94) je¶li nie jest on po³±czony z wykrzyknikiem ! lub nawiasami (). Je¶li kto¶ zatem u¿yje w zawarto¶ci zmiennej znak ^ w innym specjalnym celu, to bêdzie musia³ sam to przywróciæ po wywo³aniu funkcji lub zmodyfikowaæ podfunkcjê "znaczniki_transformuj_wynik", aby i to uwzglêdnia³y.
 

Poni¿ej kod tej funkcji  Zamien_polskie_litery do wklejenia i u¿ycia w dowolnym innym w³asnym skrypcie lub zapisania jako osobny plik Batch.
Potem bêd± podane pe³ne przyk³ady u¿ycia w zewnêtrznym kompletnym skrypcie
==============================================================================


@echo off 

:Zamien_polskie_litery     - Parametr pierwszy okre¶la typ zamiany:  /TXT lub /CMD lub /ANGT lub /ANGC  
REM                          Parametry kolejne to nazwy zmiennych:   nazwa_zmiennej_1   [ nazwa_zmiennej_2 ... nazwa_zmiennej_60 ]
REM                          /TXT  - zamienia z formatu plików tekstowych TXT, w tym Batch (BAT)  >>>  na tryb poleceñ CMD
REM                          /CMD  - zamienia z trybu poleceñ CMD  >>>  na format plików tekstowych TXT, w tym Batch (BAT)
REM                                  Uwaga: trzeba najpierw wczytaæ wynik polecenia CMD do zmiennej i dopiero wtedy podaæ nazwê tej zmiennej
REM                          /ANGT - usuwanie polskich znaków z trybu tekstowego TXT, czyli zamiana na odpowiedniki angielskie (ANG)
REM                          /ANGC - usuwanie polskich znaków z trybu poleceñ    CMD, czyli zamiana na odpowiedniki angielskie (ANG)
REM                          Podawaæ tylko nazwy zmiennych, a nie ich warto¶ci, za¶ rezultat zamiany uzyskujemy do tej samej zmiennej
REM                          Ver.1.4   Opracowanie:  Artur Zgadzaj  (Wroc³aw)  artur.zgadzaj(at)wp.pl

SET /A LICZ_PL=%RANDOM% * 1000 / 32768 + 1
setlocal
set "Rozwijanie=!"
setlocal EnableDelayedExpansion

SET CMD=165,198,202,163,209,211,140,143,175,185,230,234,179,241,243,156,159,191
SET TXT=164,143,168,157,227,224,151,141,189,165,134,169,136,228,162,152,171,190
SET ANG=65,67,69,76,78,79,83,90,90,97,99,101,108,110,111,115,122,122

SET "Zestaw_1="
if /I "%~1"=="/TXT"  SET Zestaw_1=%TXT%&SET Zestaw_2=%CMD%&shift
if /I "%~1"=="/CMD"  SET Zestaw_1=%CMD%&SET Zestaw_2=%TXT%&shift
if /I "%~1"=="/ANGT" SET Zestaw_1=%ANG%&SET Zestaw_2=%CMD%&shift
if /I "%~1"=="/ANGC" SET Zestaw_1=%ANG%&SET Zestaw_2=%TXT%&shift
if "%Zestaw_1%"=="" (echo.&echo Funkcja:  Zamien_polskie_litery&echo.&echo    Bledny pierwszy parametr /CMD lub /TXT lub /ANGT lub /ANGC&TIMEOUT /T 15>nul&exit /b)
if "%~1"==""        (echo.&echo Funkcja:  Zamien_polskie_litery&echo.&echo    Brak nazwy pierwszej zmiennej zawierajacej tekst&TIMEOUT /T 15>nul&exit /b)

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:&echo    https://sites.google.com/site/dbenhamfiles&echo.&TIMEOUT /T 60>nul&exit /b))
CALL CHARLIB initLib

if exist "%TEMP%\%LICZ_PL%_Wyniki_PL.BAT"  del "%TEMP%\%LICZ_PL%_Wyniki_PL.BAT"

:nastepna_zmienna
if "%~1"==""    goto koniec_PL
if "!%~1!"==""  (shift&if not "%~1"=="" goto nastepna_zmienna)
SET /A L=0&SET Wynik=

CALL:znaczniki_transformuj "%~1"

:kolejny_znak
SET Y=!str:~%L%,1!&if "!Y!"==""  goto pomin_kolejny_znak

CALL CHARLIB asc str !L! Kod>nul

if "%Kod%"=="94"   SET "Y="

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

SET Wynik=!Wynik!!Y!&SET /A L+=1&if not "!str:~%L%,1!"==""  goto kolejny_znak

:pomin_kolejny_znak
CALL:znaczniki_transformuj_wynik Wynik "%~1"

shift&if not "%~1"=="" goto nastepna_zmienna

:koniec_PL
endlocal
endlocal
if exist "%TEMP%\%LICZ_PL%_Wyniki_PL.BAT"  (CALL "%TEMP%\%LICZ_PL%_Wyniki_PL.BAT") else (echo.&echo Funkcja:  Zamien_polskie_litery&echo.&echo    Blad wykonania, nie mozna uzyskac wynikow&TIMEOUT /T 60>nul&exit /b)
if exist "%TEMP%\%LICZ_PL%_*.BAT"          DEL  "%TEMP%\%LICZ_PL%_*.BAT"
SET "LICZ_PL="
exit /b


:znaczniki_transformuj
  setlocal
  setlocal DisableDelayedExpansion
  echo SET "str=%%%~1%%">"%TEMP%\%LICZ_PL%_Zamien_znaczniki.bat"
  CALL "%TEMP%\%LICZ_PL%_Zamien_znaczniki.bat"
  SET "str=%str:^^^!=!%"
  SET "str=%str:^^!=!%"
  SET "str=%str:^!=!%"
  SET "str=%str:!=^^^^^!%"
  echo SET "str=%str%">"%TEMP%\%LICZ_PL%_Zamien_znaczniki.bat"
  endlocal
  endlocal
  CALL "%TEMP%\%LICZ_PL%_Zamien_znaczniki.bat"
goto:eof

:znaczniki_transformuj_wynik
  setlocal
  setlocal DisableDelayedExpansion
  echo SET "str=%%%~1%%">"%TEMP%\%LICZ_PL%_Zamien_znaczniki.bat"
  CALL "%TEMP%\%LICZ_PL%_Zamien_znaczniki.bat"
  SET "str=%str:^^!=!%"
  SET "str=%str:^!=!%"
  if not defined Rozwijanie (
     SET "str=%str:(=^^^(%"
     SET "str=%str:)=^^^)%"
     SET "str=%str:!=^^^!%"
  ) else (
     SET "str=%str:(=^(%"
     SET "str=%str:)=^)%"
     SET "str=%str:!=^!%")
  echo SET "%~2=%str%">>"%TEMP%\%LICZ_PL%_Wyniki_PL.BAT"
exit /b


Teraz przyk³ad kompletnego skryptu Batch, wraz z przyk³adowym u¿yciem tej funkcji wewn±trz:
===========================================================================================


@echo off
REM Przypisanie zmiennych z polskimi literami, pochodz±ce z trybu TXT (gdy¿ nadane Notatnikiem wewn±trz Batch)
SET Test=¡ÆÊ£ÑÓ¦¬¯ ±æê³ñ󶼿 i co¶ tam jeszcze
SET Inna_zmienna=Cokolwiek - np. ¿d¿b³o trawy

REM Pokazanie w poleceniu CMD b³êdnej zawarto¶ci zmiennych przed zmianami, czyli nadal jest z TXT
echo         Test = %Test%
echo Inna_zmienna = %Inna_zmienna%

REM Wywo³anie jako funkcji do zamiany polskich liter  (pochodz±ce z trybu tekstowego, zatem parametr /TXT )
CALL:Zamien_polskie_litery /TXT Test Inna_zmienna

REM Pokazanie w poleceniu CMD prawid³owej zawarto¶ci zmiennych po zmianach z TXT na CMD
echo.
echo         Test = %Test%
echo Inna_zmienna = %Inna_zmienna%

REM Zakoñczenie skryptu
goto:eof



@echo off
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 zamiany:  /TXT lub /CMD lub /ANGT lub /ANGC  
REM                          Parametry kolejne to nazwy zmiennych:   nazwa_zmiennej_1   [ nazwa_zmiennej_2 ... nazwa_zmiennej_60 ]
REM                          /TXT  - zamienia z formatu plików tekstowych TXT, w tym Batch (BAT)  >>>  na tryb poleceñ CMD
REM                          /CMD  - zamienia z trybu poleceñ CMD  >>>  na format plików tekstowych TXT, w tym Batch (BAT)
REM                                  Uwaga: trzeba najpierw wczytaæ wynik polecenia CMD do zmiennej i dopiero wtedy podaæ nazwê tej zmiennej
REM                          /ANGT - usuwanie polskich znaków z trybu tekstowego TXT, czyli zamiana na odpowiedniki angielskie (ANG)
REM                          /ANGC - usuwanie polskich znaków z trybu poleceñ    CMD, czyli zamiana na odpowiedniki angielskie (ANG)
REM                          Podawaæ tylko nazwy zmiennych, a nie ich warto¶ci, za¶ rezultat zamiany uzyskujemy do tej samej zmiennej
REM                          Ver.1.4   Opracowanie:  Artur Zgadzaj     http://www.widzenia.com/info    (Login: info Has³o: computer)

SET /A LICZ_PL=%RANDOM% * 1000 / 32768 + 1
setlocal
set "Rozwijanie=!"
setlocal EnableDelayedExpansion

SET CMD=165,198,202,163,209,211,140,143,175,185,230,234,179,241,243,156,159,191
SET TXT=164,143,168,157,227,224,151,141,189,165,134,169,136,228,162,152,171,190
SET ANG=65,67,69,76,78,79,83,90,90,97,99,101,108,110,111,115,122,122

SET "Zestaw_1="
if /I "%~1"=="/TXT"  SET Zestaw_1=%TXT%&SET Zestaw_2=%CMD%&shift
if /I "%~1"=="/CMD"  SET Zestaw_1=%CMD%&SET Zestaw_2=%TXT%&shift
if /I "%~1"=="/ANGT" SET Zestaw_1=%ANG%&SET Zestaw_2=%CMD%&shift
if /I "%~1"=="/ANGC" SET Zestaw_1=%ANG%&SET Zestaw_2=%TXT%&shift
if "%Zestaw_1%"=="" (echo.&echo Funkcja:  Zamien_polskie_litery&echo.&echo    Bledny pierwszy parametr /CMD lub /TXT lub /ANGT lub /ANGC&TIMEOUT /T 15>nul&exit /b)
if "%~1"==""        (echo.&echo Funkcja:  Zamien_polskie_litery&echo.&echo    Brak nazwy pierwszej zmiennej zawierajacej tekst&TIMEOUT /T 15>nul&exit /b)

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:&echo    https://sites.google.com/site/dbenhamfiles&echo.&TIMEOUT /T 60>nul&exit /b))
CALL CHARLIB initLib

if exist "%TEMP%\%LICZ_PL%_Wyniki_PL.BAT"  del "%TEMP%\%LICZ_PL%_Wyniki_PL.BAT"

:nastepna_zmienna
if "%~1"==""    goto koniec_PL
if "!%~1!"==""  (shift&if not "%~1"=="" goto nastepna_zmienna)
SET /A L=0&SET Wynik=

CALL:znaczniki_transformuj "%~1"

:kolejny_znak
SET Y=!str:~%L%,1!&if "!Y!"==""  goto pomin_kolejny_znak

CALL CHARLIB asc str !L! Kod>nul

if "%Kod%"=="94"   SET "Y="

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

SET Wynik=!Wynik!!Y!&SET /A L+=1&if not "!str:~%L%,1!"==""  goto kolejny_znak

:pomin_kolejny_znak
CALL:znaczniki_transformuj_wynik Wynik "%~1"

shift&if not "%~1"=="" goto nastepna_zmienna

:koniec_PL
endlocal
endlocal
if exist "%TEMP%\%LICZ_PL%_Wyniki_PL.BAT"  (CALL "%TEMP%\%LICZ_PL%_Wyniki_PL.BAT") else (echo.&echo Funkcja:  Zamien_polskie_litery&echo.&echo    Blad wykonania, nie mozna uzyskac wynikow&TIMEOUT /T 60>nul&exit /b)
if exist "%TEMP%\%LICZ_PL%_*.BAT"          DEL  "%TEMP%\%LICZ_PL%_*.BAT"
SET "LICZ_PL="
exit /b


:znaczniki_transformuj
  setlocal
  setlocal DisableDelayedExpansion
  echo SET "str=%%%~1%%">"%TEMP%\%LICZ_PL%_Zamien_znaczniki.bat"
  CALL "%TEMP%\%LICZ_PL%_Zamien_znaczniki.bat"
  SET "str=%str:^^^!=!%"
  SET "str=%str:^^!=!%"
  SET "str=%str:^!=!%"
  SET "str=%str:!=^^^^^!%"
  echo SET "str=%str%">"%TEMP%\%LICZ_PL%_Zamien_znaczniki.bat"
  endlocal
  endlocal
  CALL "%TEMP%\%LICZ_PL%_Zamien_znaczniki.bat"
goto:eof

:znaczniki_transformuj_wynik
  setlocal
  setlocal DisableDelayedExpansion
  echo SET "str=%%%~1%%">"%TEMP%\%LICZ_PL%_Zamien_znaczniki.bat"
  CALL "%TEMP%\%LICZ_PL%_Zamien_znaczniki.bat"
  SET "str=%str:^^!=!%"
  SET "str=%str:^!=!%"
  if not defined Rozwijanie (
     SET "str=%str:(=^^^(%"
     SET "str=%str:)=^^^)%"
     SET "str=%str:!=^^^!%"
  ) else (
     SET "str=%str:(=^(%"
     SET "str=%str:)=^)%"
     SET "str=%str:!=^!%")
  echo SET "%~2=%str%">>"%TEMP%\%LICZ_PL%_Wyniki_PL.BAT"
exit /b


Teraz to samo, ale z u¿yciem zewnêtrznego skryptu:  Zamien_polskie_litery.bat
zapisanego osobno wcze¶niej (znika tu dwukropek po CALL i zawarto¶æ funkcji)
===================================================================================

@echo off
REM Przypisanie zmiennych z polskimi literami, pochodz±ce z trybu TXT (gdy¿ nadane Notatnikiem wewn±trz Batch)
SET Test=¡ÆÊ£ÑÓ¦¬¯ ±æê³ñ󶼿 i co¶ tam jeszcze
SET Inna_zmienna=Cokolwiek - np. ¿d¿b³o trawy

REM Pokazanie w poleceniu CMD b³êdnej zawarto¶ci zmiennych przed zmianami, czyli nadal jest z TXT
echo         Test = %Test%
echo Inna_zmienna = %Inna_zmienna%

REM Wywo³anie zewnêtrznego skryptu BAT do zamiany polskich liter  (pochodz±ce z trybu tekstowego, zatem parametr /TXT )
CALL Zamien_polskie_litery /TXT Test Inna_zmienna

REM Pokazanie w poleceniu CMD prawid³owej zawarto¶ci zmiennych po zmianach z TXT na CMD
echo.
echo         Test = %Test%
echo Inna_zmienna = %Inna_zmienna%

REM Zakoñczenie skryptu
goto:eof


Przyk³ad u¿ycia zamiany polskich liter, gdy chcemy uzyskaæ pe³n± nazwê u¿ytkownika systemu Windows na podstawie jego loginu. Skrypt pokazuje mechanizm zamiany polskich liter pomiêdzy trybem TXT, a CMD i odwrotnie.
Dla jego przetestowania trzeba rêcznie wcze¶niej utworzyæ u¿ytkownika w systemie Windows:
          Login:  Ada¶
    Pe³na nazwa:  Ada¶ ¡ÆÊ£ÑÓ¦¬¯ ±æê³ñ󶼿
===================================================================================


echo off

  REM UWAGA: wcze¶niej trzeba utworzyæ rêcznie u¿ytkownika, jako  Login: Ada¶    Pe³na nazwa: Ada¶ ¡ÆÊ£ÑÓ¦¬¯ ±æê³ñ󶼿
  SET Login=Ada¶

  SET Login_opis=Login u¿ytkownika
  SET Pelna_Nazwa_opis=Pe³na nazwa

  REM Uzyskanie prawid³owych kodów polskich liter dla poleceñ CMD
  CALL Zamien_polskie_litery /TXT Login  Login_opis  Pelna_Nazwa_opis

  REM Pobranie pe³nej nazwy dla u¿ytkownika o loginie Ada¶
  REM Uwaga: je¶li angielska wersja systemu Windows to zamiast nazwa daæ name

  FOR /F "tokens=3,4,5"  %%f IN ('net user ^"%Login%^"^|find ^"nazwa^"') DO (SET "Pelna_Nazwa=%%f %%g %%h")
      
  REM Wy¶wietlenie wyników na ekranie, ale nadal w CMD
  echo  %Login_opis%        = %Login%
  echo  %Pelna_Nazwa_opis%  = %Pelna_Nazwa%

  REM Uzyskanie prawid³owych kodów polskich liter, aby wyeksportowaæ je do pliku tekstowego TXT
  CALL Zamien_polskie_litery /CMD Login Pelna_Nazwa

  REM Wykesportowanie wyników do pliku tekstowego TXT
  echo  Login u¿ytkownika  = %Login%>%TEMP%\Wynik.TXT
  echo  Pe³na nazwa        = %Pelna_Nazwa%>>%TEMP%\Wynik.TXT

  REM Pokazanie wyników z pliku tekstowego w Notatniku
  START NOTEPAD %TEMP%\Wynik.TXT

Pause


Na koniec przyk³ad zamiany polskich liter w ca³ym pliku tekstowym lub usuwanie ogonków, czyli zamiana polskich liter na odpowiedniki angielskie. Okre¶l nazwê i lokalizacjê pliku w zmiennej "Plik".


@echo off

REM Przyk³ad zamiany polskich liter w ca³ym pliku tekstowym. Okre¶l nazwê i lokalizacjê pliku w zmiennej "Plik" poni¿ej.
REM --------------------------------------------------------------------------------------------------------------------
REM UWAGA: Skrypt pracuje bardzo wolno. W koñcu to jest skrypt realizowany i interpretowany krok po kroku, a nie skompilowany program w C++
REM        Poza tym jêzyk w Batch ma wiele ograniczeñ i utrudnieñ, co wymaga mnóstwo sztuczek i obej¶æ, a to bardzo spowalnia dzia³anie.
REM        Powolno¶æ ta wynika g³ównie z dzia³ania skryptu pomocniczego CHARLIB.BAT z przyczyn opisanych powy¿ej. Zatem nadaje siê to do 
REM        zamiany liter w ma³ych plikach.
setlocal


SET Plik=Plik_z_polskimi_literami.txt


setlocal EnableDelayedExpansion


REM Zamiana polskich liter z pliku tekstowego z trybu TXT na tryb CMD
 
if exist "%TEMP%\Wynik_zamiany_pliku_PL.txt"   del "%TEMP%\Wynik_zamiany_pliku_PL.txt"

SET /A N=1

for /f "tokens=* delims=" %%a in (%Plik%) do (
 SET "Linia=%%a"
 CALL Zamien_polskie_litery /TXT  Linia
 echo [!N!] !Linia!
 echo !Linia!>>"%TEMP%\Wynik_zamiany_pliku_PL_w_CMD.txt"
 SET /A N+=1
)

REM Zamiana polskich liter na odpowiedniki angielskie, czyli usuwanie ogonków z pliku tekstowego
echo ===============================================================================

if exist "%TEMP%\Wynik_zamiany_pliku_ANG.txt"   del "%TEMP%\Wynik_zamiany_pliku_ANG.txt"

SET /A N=1

for /f "tokens=* delims=" %%a in (%Plik%) do (
 SET "Linia=%%a"
 CALL Zamien_polskie_litery /ANGT  Linia
 echo [!N!] !Linia!
 echo !Linia!>>"%TEMP%\Wynik_zamiany_pliku_ANG.txt"
 SET /A N+=1
)

START Notepad "%Plik%"
START Notepad "%TEMP%\Wynik_zamiany_pliku_PL_w_CMD.txt"
START Notepad "%TEMP%\Wynik_zamiany_pliku_ANG.txt"

Exit /b
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads