Thread View: pl.comp.ogonki
1 messages
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
Author: Artur Zgadzaj
Date: Tue, 16 Jun 2015 22:52
Date: Tue, 16 Jun 2015 22:52
438 lines
22729 bytes
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