POUZE DNES: Získej 90 % extra kreditů ZDARMA při dobití od 1199 kreditů s promo kódem SKOLA90. Zjisti více:
POSLEDNÍ ŠANCE do 29. 8. 2025: Pracuj až o 60 % rychleji díky akreditovanému kurzu Specialista na AI. Nyní již od 0 Kč. Zjisti více:
Avatar
krepsy3
Tvůrce
Avatar
krepsy3:15.11.2016 23:00

Ahoj, mám takový speciální dotaz, týkající se složky s diakritikou (jedná se o uživatelskou složku, jako příklad budu používat C:\Users\Kája\Do­cuments\). V mém programu zapisuji do textového souboru takto:

string cesta = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "soubor.txt");
if (Environment.GetCommandLineArgs().Length > 1)
{
        if (Directory.Exists(Environment.GetCommandLineArgs()[1]))
                cesta = Path.Combine(Environment.GetCommandLineArgs()[1], "soubor.txt");
}

{
        /*Zápis*/
}

Jde o to, že pokud chci změnit složku právě přes command line argumenty, není to problém v cmd, prostě tam napíšu

<C:\Users\Kája\Documents\Programy>start prg.exe C:\Users\Kája\Documents\Texty\

A složka se v pořádku změní. Problém nastává u dávkového souboru (.bat), který chci mít vedle programu. Jeho obsah:

@echo off
start prg.exe C:\Users\Kája\Documents\Texty\
exit

Pokud kód výše uložím do .bat jako ANSI nebo UTF-8, složka se bohužel (nejspíš kvůli diakritice) v programu nezmění.
Pokud ho uložím do Unicode, batch nefunguje a ihned se terminuje s tím, že "(nějaké podivné znaky) není rozponán jako interní příkaz či soubor."

Co s tím? Nepište prosím, ať si změním jméno uživatelské složky, hlavně chci, aby to program nebo batch zvládal. Najdou se i jiní uživatelé s diakritikou ve složkách, a tak chci, abych to uměl zvládnout programově ;)

Editováno 15.11.2016 23:00
Odpovědět
15.11.2016 23:00
Programátor je stroj k převodu kávy na kód.
Avatar
HONZ4
Člen
Avatar
HONZ4:16.11.2016 18:14

sice tomu nerozumím, ale nepomůže ti toto vlákno?

 
Nahoru Odpovědět
16.11.2016 18:14
Avatar
krepsy3
Tvůrce
Avatar
Odpovídá na HONZ4
krepsy3:16.11.2016 21:46

No, moc ne. Jde o to, že uložený batch v Unicode nefunguje. V jiných znakových sadách program přečte nesmyslnou cestu, po čemž použije tu výchozí. Koukal jsem na třídu Encoding, ale ta nejde použít na cestu k souboru :(

Nahoru Odpovědět
16.11.2016 21:46
Programátor je stroj k převodu kávy na kód.
Avatar
Odpovídá na krepsy3
Neaktivní uživatel:16.11.2016 22:10

Tady je vlákno o tom - vypadá to, že CMD - batch je jeden velký bugfest, anebo to prostě není implementované. Vyřešil bych to nějak jinak, třeba vedle programu si dal txt soubor, kde budou ty jména složek a souborů, které chceš zpracovat. Tvoje .exe to pak přečte

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
16.11.2016 22:10
Neaktivní uživatelský účet
Avatar
krepsy3
Tvůrce
Avatar
krepsy3:16.11.2016 23:45

Tak pro shrnutí - řešení bylo na dané adrese k nalezení. Protože aplikaci spouštíte pod windows, kde si přirozeně jako Češi nastavíte české kódování, jsou tyto znaky ve výchozím nastavení systému brány ze sady Windows-1250, ve které čte i náš c# program. V Batchi nastavujete znakovou sadu příkazem chcp.
Finální batch má tedy následující podobu:

@echo off
chcp 1250
start C:\Users\Kája\Documents\Texty\
exit
Editováno 16.11.2016 23:46
Nahoru Odpovědět
16.11.2016 23:45
Programátor je stroj k převodu kávy na kód.
Avatar
Tano7
Člen
Avatar
Odpovídá na krepsy3
Tano7:22. srpna 22:11

V jiných editorech české znaky v .cmd i .bat souborech fungovaly na spuštění .jar souboru.
Výstup z Eclipse IDE for Java Developers - 2025-06 s tím zatím bojuji.
Nadějně vypadá tohle, ale chce to doladit.
Má někdo stejnou polemiku?
.cmd soubor:

@ECHO OFF
color df

SET ROOT_KEY="HKEY_LOCAL_MACHINE"

FOR /f "skip=2 tokens=3" %%i in ('reg query HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage /v OEMCP') do set OEMCP=%%i

ECHO System default values / Vychozi hodnoty systemu:

ECHO.
ECHO ...............................................
ECHO Select Codepage / Vyberte kodovani stranky:
ECHO ...............................................
ECHO.
ECHO 1 - CP1252
ECHO 2 - UTF-8
ECHO 3 - CP850
ECHO 4 - ISO-8859-1
ECHO 5 - ISO-8859-15
ECHO 6 - US-ASCII
ECHO.
ECHO 9 - Reset to System Default (CP%OEMCP%)
ECHO 0 - EXIT
ECHO.


SET /P  CP="Select Codepage / Vyberte kodovani stranky: "

if %CP%==1 (
    echo Set default Codepage to CP1252
    reg add "%ROOT_KEY%\Software\Microsoft\Command Processor" /v Autorun /t REG_SZ /d "@chcp 1252>nul" /f
) else if %CP%==2 (
    echo Set default Codepage to UTF-8
    reg add "%ROOT_KEY%\Software\Microsoft\Command Processor" /v Autorun /t REG_SZ /d "@chcp 65001>nul" /f
) else if %CP%==3 (
    echo Set default Codepage to CP850
    reg add "%ROOT_KEY%\Software\Microsoft\Command Processor" /v Autorun /t REG_SZ /d "@chcp 850>nul" /f
) else if %CP%==4 (
    echo Set default Codepage to ISO-8859-1
    add "%ROOT_KEY%\Software\Microsoft\Command Processor" /v Autorun /t REG_SZ /d "@chcp 28591>nul" /f
) else if %CP%==5 (
    echo Set default Codepage to ISO-8859-15
    add "%ROOT_KEY%\Software\Microsoft\Command Processor" /v Autorun /t REG_SZ /d "@chcp 28605>nul" /f
) else if %CP%==6 (
    echo Set default Codepage to ASCII
    add "%ROOT_KEY%\Software\Microsoft\Command Processor" /v Autorun /t REG_SZ /d "@chcp 20127>nul" /f
) else if %CP%==9 (
    echo Reset Codepage to System Default
    reg delete "%ROOT_KEY%\Software\Microsoft\Command Processor" /v AutoRun /f
) else if %CP%==0 (
    echo Bye
) else (
    echo Invalid choice / Neplatna volba
    pause
)

echo.
TITLE  Java aplikace Papousek - autor: programervit.kesug.com

echo ==============================================
echo   Java aplikace Papousek - autor:  programervit.kesug.com
echo ==============================================
echo.
echo.

java -jar papousek.jar

echo.
echo ===============================================
echo   Press any key to exit the application.
echo   Stiskem libovolne klavesy ukoncis aplikaci.
echo ===============================================
echo.

pause
exit
Nahoru Odpovědět
22. srpna 22:11
Život by byl mnohem snazší, kdybychom k němu měli zdrojový kód.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 6 zpráv z 6.