Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno Výpis adresáře z MP3 přehrávače

Chci udělat pořádek ve starém MP3 přehrávači co mám po synech. V počítači LENOVO s W10 se mi adresář zobrazuje celkem solidně. Když jsem zkusil z adresáře udělat textový soubor v počítači, použil jsem na to příkazový řádek, některé znaky, hlavně české se zkomolily.
V příloze je vzorek, nahoře jak to vypadá v adresáři, dole jak to vypadá v textovém souboru (tam je to celkem solidní, dalo by se to opravit ručně, jinde ji to horší).

Chci se zeptat, zda se to dá stáhnout nějak rozumně abych to nemusel řádek znak po znaku upravovat. Textový soubor chci použít abych věděl co tam všechno mám, co tam nechat a co smazat.
[100727-000adresar-jpg]

Řešení:

Defaultní kódování v cmd je Latin 2.
Když v cmd dáš chcp tak ti vyjede 852, což je Latin 2.
A ty chceš UTF-8.
Takže než budeš vytvářet výstup tak před tím v cmd zadáš:
chcp 65001
A výstup budeš mít v UTF-8 a nic zkomoleného mít nebudeš.

v klasickém cmd.exe by bylo nutné nejdřív přepnout kódovou stránku:

 chcp 1250
 dir *.mp3 /a:-d /o:n /b > _playlist_.m3u

to se spouštěním v powershellu je elegantnější možnost.
ale když si udělám svého zástupce na liště ve správci souborů, který spustí tuto batku na aktuální adresář s hudbou, spustí ho zase v tom starém cmd.exe, takže s chcp:

:PRIPONA
 for %%e in (mp3,flac,wma,ogg) do call :_EXT %%e
goto END
:_EXT
 set ext=%1
 dir *.%ext% /a:-d >nul
  if errorlevel 1 goto :EOF
:CZ
 chcp 1250
 dir *.%ext% /a:-d /o:n /b > _playlist_.m3u
:ADR
 for /f "tokens=1,2,3,4,5,6 delims=\" %%a in ("%cd%") do (set adr=%%f,%%e,%%d,%%c,%%b,%%a)
 for /f "delims=," %%i in ("%adr%") do (if not "%%i"=="" call :_PLAY %%i)
goto END
:_PLAY
 ren _playlist_.m3u _%1%2%3%4%5%6.m3u
:END

(v tom :adr se přejmenuje _playlist_.m3u podle názvu konkrétního hudebního adresáře, já to tak chtěl, není to nutné)

Předmět Autor Datum
Ano, cmd kurví české znaky s diakritikou... spusti si powershell a tam si to vypíš: dir > mp3.txt di…
pme 09.11.2025 20:40
pme
Většina těchto problémů vzniká z bordelu, který MalýMěkký dopustil několika variantami kódování česk…
Pytlík 09.11.2025 22:12
Pytlík
Defaultní kódování v cmd je Latin 2. Když v cmd dáš chcp tak ti vyjede 852, což je Latin 2. A ty chc…
kacikac 09.11.2025 22:46
kacikac
Děkuji oběma (kacikar i ledni brtnik). Včera jsem si na to vzpomněl a fungovalo to. :-) Ale stejně j…
Yarda 29.06.2026 09:05
Yarda
že ve W10 neexistuje nějaký jednoduchý příkaz... Takových jednoduchých příkazů bohužel chybí spoust…
host 29.06.2026 09:25
host
ve W10 neexistuje nějaký jednoduchý příkaz, něco jako "ulož seznam souborů v adresáři do textového s… poslední
IQ37 29.06.2026 13:48
IQ37
v klasickém cmd.exe by bylo nutné nejdřív přepnout kódovou stránku: chcp 1250 dir *.mp3 /a:-d /o:n…
lední brtník 09.11.2025 23:00
lední brtník
Nepoužívat diakritiku v názvech souborů (stejně tak to může dělat i u tagů v souborech). V jednom se…
Abox 10.11.2025 04:38
Abox
Příkazový řádek je fajn, ale rychlejší a pohodlnější by pro mě bylo udělat to v Total commanderu. […
host 10.11.2025 07:18
host

Ano,
cmd kurví české znaky s diakritikou...
spusti si powershell a tam si to vypíš:
dir > mp3.txt
diakritika tu už bude správne.

Většina těchto problémů vzniká z bordelu, který MalýMěkký dopustil několika variantami kódování českých textů. Nebudu se probírat celou historií, ale ve Windows se v češtině nyní používá standardně kódování 1250, ale dříve bylo obvyklé 852 (slovním označením se nebudu obtěžovat - v případě zájmu lze snadno vyhledat). Když se text v jednom kódování zobrazí v textovém (či jiném) editoru, který očekává to druhé, tak vznikají popisované potíže.
Je tedy potřeba sjednotit kódování skutečných názvů souborů s kódováním 1250, které by mělo být ve vašem počítači. Já to řeším tak, že prostě v názvech souborů ruším diakritiku. jak to uděat, je na každém. Já k tomu používám PSPad, ale možností je mnoho.

Děkuji oběma (kacikar i ledni brtnik).
Včera jsem si na to vzpomněl a fungovalo to. :-)
Ale stejně je zajímavé, že ve W10 neexistuje nějaký jednoduchý příkaz, něco jako "ulož seznam souborů v adresáři do textového souboru tak jak je to na obrazovce" a musí se to mordovat přes příkazový řádek (podobný postup jsem někde okomentoval jako "chytnout se levou rukou za pravé ucho a zakokrhat").
Tedy možná něco existuje, ale já jsem ho nenašel a když jsem se na to ptal strejdy gůgla, odkázal mne na podobný postup a když jsem v textovém souboru chtěl změnit kódovou stránku, taky nic.
:-( :beer:

že ve W10 neexistuje nějaký jednoduchý příkaz...

Takových jednoduchých příkazů bohužel chybí spousta. Proto pokročilejší uživatelé používají nějakou "nadstavbu" (souborový manažer), v kterém to jde udělat na jedno kliknutí.

ve W10 neexistuje nějaký jednoduchý příkaz, něco jako "ulož seznam souborů v adresáři do textového souboru tak jak je to na obrazovce"

Od AI: Jde to poměrně elegantně. Přidáš jednu položku do registru a pak budeš mít po kliknutí pravým tlačítkem na složku (nebo na prázdné místo uvnitř složky) nabídku Uložit seznam souborů.
Nejjednodušší varianta vytvoří soubor seznam.txt v dané složce.
Vytvoř soubor např. Seznam_souboru.reg s tímto obsahem:

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Directory\Background\shell\SaveFileList]
@="Uložit seznam souborů (UTF-8)"

[HKEY_CLASSES_ROOT\Directory\Background\shell\SaveFileList\command]
@="powershell.exe -NoProfile -Command \"Get-ChildItem -Name | Out-File -Encoding UTF8 'seznam.txt'\""

v klasickém cmd.exe by bylo nutné nejdřív přepnout kódovou stránku:

 chcp 1250
 dir *.mp3 /a:-d /o:n /b > _playlist_.m3u

to se spouštěním v powershellu je elegantnější možnost.
ale když si udělám svého zástupce na liště ve správci souborů, který spustí tuto batku na aktuální adresář s hudbou, spustí ho zase v tom starém cmd.exe, takže s chcp:

:PRIPONA
 for %%e in (mp3,flac,wma,ogg) do call :_EXT %%e
goto END
:_EXT
 set ext=%1
 dir *.%ext% /a:-d >nul
  if errorlevel 1 goto :EOF
:CZ
 chcp 1250
 dir *.%ext% /a:-d /o:n /b > _playlist_.m3u
:ADR
 for /f "tokens=1,2,3,4,5,6 delims=\" %%a in ("%cd%") do (set adr=%%f,%%e,%%d,%%c,%%b,%%a)
 for /f "delims=," %%i in ("%adr%") do (if not "%%i"=="" call :_PLAY %%i)
goto END
:_PLAY
 ren _playlist_.m3u _%1%2%3%4%5%6.m3u
:END

(v tom :adr se přejmenuje _playlist_.m3u podle názvu konkrétního hudebního adresáře, já to tak chtěl, není to nutné)

Zpět do poradny Odpovědět na původní otázku Nahoru