🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.ogonki
Article #19816

Skrypt Batch do zamiany polskich liter z Notatnika na CMD i odwrotnie lub usuwanie polskich liter

#19816
From: Artur Zgadzaj
Date: Sun, 17 Jan 2016 11:42
439 lines
22782 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
Technical Details
Message-ID: <0d7fe499-76f8-4c4d-95ca-8da2cbbb99ec@googlegroups.com>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!goblin2!goblin.stu.neva.ru!weretis.net!feeder6.news.weretis.net!news.glorb.com!o2no3888053iga.0!news-out.google.com!l1ni16274igd.0!nntp.google.com!h5no5824132igh.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail

Show Full Headers
Complete Article Headers
X-Received: by 10.107.129.33 with SMTP id c33mr18716012iod.0.1453030933164;        Sun, 17 Jan 2016 03:42:13 -0800 (PST)
X-Received: by 10.182.104.163 with SMTP id gf3mr236137obb.5.1453030933137; Sun, 17 Jan 2016 03:42:13 -0800 (PST)
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!goblin2!goblin.stu.neva.ru!weretis.net!feeder6.news.weretis.net!news.glorb.com!o2no3888053iga.0!news-out.google.com!l1ni16274igd.0!nntp.google.com!h5no5824132igh.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail
Newsgroups: pl.comp.ogonki
Date: Sun, 17 Jan 2016 03:42:13 -0800 (PST)
Complaints-To: groups-abuse@google.com
Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=83.142.140.85; posting-account=Lmfr3gkAAADAFaEU34uDx75aeCyglffG
NNTP-Posting-Host: 83.142.140.85
User-Agent: G2/1.0
MIME-Version: 1.0
Message-ID: <0d7fe499-76f8-4c4d-95ca-8da2cbbb99ec@googlegroups.com>
Subject: Skrypt Batch do zamiany polskich liter z Notatnika na CMD i odwrotnie lub usuwanie polskich liter
From: Artur Zgadzaj <artur.zgadzaj@wp.pl>
Injection-Date: Sun, 17 Jan 2016 11:42:13 +0000
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit