🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

1 total messages Started by Artur Zgadzaj Tue, 16 Jun 2015 22:52
Zamiana i usuwanie polskich liter w zmiennych tekstowych i wynikach poleceń za pomocą skryptu Batch
#19815
Author: Artur Zgadzaj
Date: Tue, 16 Jun 2015 22:52
438 lines
22729 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     Status:  free for use and distribute
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     Status:  free for use and distribute

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