Mám v počítači dvě složky, kde každý měsíc přibude spousta souborů a je velmi vhodné ty starší odsouvat někam do archivu, aby ta složka zůstala použitelná. Dlouho jsem to dělal ručně. Prostě jsem vzal “vše z ledna 2024”, označil ve Far Manageru, a přesunul do archiv složky, kde jsem vytvořil podsložku 2024/01.
Taková místa mám dvě. /TMP kam prostě jde cokoliv “temporary”, dočasné, co se vytvoří (třeba všechny ty obrázky pro sociální sítě). A klasickou složku DOWNLOADS kam prohlížeč automaticky šoupne vše stažené. Obě mají svoji archivní složku kdesi na NAS.
Už chvíli mi vrtalo hlavou, jak si (opět, jak jinak) ušetřit čas a mít nějaký program či skript, který jednou měsíčně spustím a on to celé udělá sám.
Chvíli jsem pátral v aplikacích a pomůckách,. ale moc štěstí jsem neměl. Až pak přišel nápad, půjdu se zeptat ChatGPT jestli je to možné naprogramovat jako dávkový soubor ve Windows.
Zadání pro ChatGPT
Já: OK, měl bych tu něco k vyřešení pro příkazovou řádku ve Windows. Mám složku ve které postupně přibývají soubory (říkejme ji d:\tmp) a pak mám archivní složku kam bych potřeboval přesouvat soubory. V d:\tmp ponechat pouze aktuální měsíc a vše starší odsouvat (řekněme do h:\tmp) ale tak aby tam vznikaly složky ROK\ROK-MESIC (rok jako čtyři číslice, měsíc jako dvě) a soubory se podle jejich data přesunuly právě do odpovídající složky. Včetně případných složek, tedy nejenom soubory.

A výsledek? Okamžitě použitelný
Odpověď: Tento úkol můžete vyřešit pomocí skriptu v PowerShellu, který je ve Windows velmi flexibilní pro takovéto úkoly. Zde je ukázkový skript, který by měl dělat přesně to, co potřebujete. Skript prochází všechny soubory ve složce d:\tmp, zjišťuje jejich datum poslední úpravy a podle toho je přesouvá do složek ve formátu ROK\ROK-MESIC v archivní složce h:\tmp. Skript také zahrnuje logiku pro zacházení se složkami.
Přiložen PowerShell skript. Který, světě div se, opravdu funguje. Stačí ho jen uložit (ChatGPT umí i poradit jak ho uložit, jak spouštět, jak případně umožnit jeho spouštění).
# Cesta ke zdrojové a cílové složce
$sourceDir = "d:\tmp"
$archiveDir = "h:\tmp"
# Získání aktuálního měsíce a roku
$currentYear = Get-Date -Format "yyyy"
$currentMonth = Get-Date -Format "MM"
Get-ChildItem -LiteralPath $sourceDir -Recurse | ForEach-Object {
$file = $_
$lastWriteYear = $file.LastWriteTime.Year
$lastWriteMonth = "{0:D2}" -f $file.LastWriteTime.Month
$destinationFolder = Join-Path $archiveDir "$lastWriteYear\$lastWriteYear-$lastWriteMonth"
# Pokud soubor/složka náleží k aktuálnímu měsíci, přeskočit
if ($lastWriteYear -eq $currentYear -and $lastWriteMonth -eq $currentMonth) {
return
}
# Vytvoření cílové složky, pokud neexistuje
if (-not (Test-Path -LiteralPath $destinationFolder)) {
New-Item -Path $destinationFolder -ItemType Directory
}
# Přesunutí souboru/složky
# Kontrola existence cíle se zde nevyžaduje, protože Move-Item přesune nebo přepíše podle potřeby
# Používáme -LiteralPath pro zdroj a -Destination, protože Move-Item nepodporuje -LiteralPath pro cíl
Move-Item -LiteralPath $file.FullName -Destination $destinationFolder -Force
}
Od ChatGPT je připojena i poznámka:Skript předpokládá, že všechny soubory a složky mohou být přesunuty bez konfliktů. V případě, že soubor se stejným názvem již v cílové složce existuje, skript vypíše varování a soubor nepřesune. Můžete upravit logiku pro manipulaci s takovými soubory podle vašich potřeb.
Dost v pohodě, protože konflikty vypisuje, takže je možné je dořešit ručně. A případně si naprogramovat ten zbytek. Nebo si ho nechat naprogramovat od ChatGPT.
Skript přeci jen nefunguje
Při spuštění na extrémně obrovskou archivní složku DOWNLOADS (tu jsem nikdy po rocích a měsících nedělil) jsem zjistil, že skript hlásí chybu. Tak to říkám ChatGPT:
Já: Skript má problémy se znaky kde ve jméně jsou [ či ]? proč?
A ta obratem vysvětluje a ví co s tím.
ChatGPT: Znaky [ a ] mají ve Windows PowerShellu speciální význam, protože se používají pro tzv. wildcard patterns (vzory pro hledání a filtrování). Když PowerShell vidí tyto znaky ve jménech souborů nebo cestách, pokusí se interpretovat obsah mezi nimi jako vzor pro porovnávání, což může způsobit problémy, pokud se snažíte pracovat se soubory nebo složkami, které obsahují tyto znaky ve svých jménech.
Problém může nastat, když skript prochází soubory a narazí na soubor nebo složku obsahující [ nebo ] ve jméně. PowerShell může interpretovat tyto znaky jako část vzoru a nesprávně zpracovávat jména souborů nebo složek, což může vést k nečekanému chování, jako je ignorování souborů nebo vyvolání chyb.
Řešení
Pokud pracujete se soubory nebo složkami, které mohou obsahovat [ nebo ] ve svých jménech, měli byste tuto situaci řešit buď úpravou skriptu, aby explicitně escapoval tyto znaky, nebo použitím metod, které jsou odolné vůči těmto speciálním znakům.
Jedním z přístupů je použití metody -LiteralPath s cmdlety, kde je to možné, místo -Path. -LiteralPath bere cestu jako doslovnou řetězec bez interpretace jakýchkoli speciálních znaků, včetně [ a ]. Například při použití Get-ChildItem, Move-Item, nebo Test-Path, pokud tyto cmdlety podporují parametr -LiteralPath, měl by být preferován pro práci se soubory nebo složkami, které mohou obsahovat speciální znaky.
Nemám moc chuť skript opravovat, takže si prostě říkám o úpravu:
Já: dobře, tak mi prosím uprav celý skript aby správně fungoval
Nedopadlo to dobře, protože tvoří nový skript, který neodpovídá zadání na samém počátku. Tohle se u chatGPT stává, musíte ji lépe navést zpět na potřebnou trajektorii:
Já: Toto ale není úprava skript na počátku. Prosím uprav ten.
Nový skrip co už zvládá i ty hranaté závorky
ChatGPT: Omlouvám se za nedorozumění. Nyní upravím původní skript tak, aby správně zpracovával soubory a složky obsahující speciální znaky [ a ] ve svých jménech. Zde je upravená verze:
# Cesta ke zdrojové a cílové složce
$sourceDir = "d:\tmp"
$archiveDir = "h:\tmp"
# Získání aktuálního měsíce a roku
$currentYear = Get-Date -Format "yyyy"
$currentMonth = Get-Date -Format "MM"
Get-ChildItem -LiteralPath $sourceDir -Recurse | ForEach-Object {
$file = $_
$lastWriteYear = $file.LastWriteTime.Year
$lastWriteMonth = "{0:D2}" -f $file.LastWriteTime.Month
$destinationFolder = Join-Path $archiveDir "$lastWriteYear\$lastWriteYear-$lastWriteMonth"
# Pokud soubor/složka náleží k aktuálnímu měsíci, přeskočit
if ($lastWriteYear -eq $currentYear -and $lastWriteMonth -eq $currentMonth) {
return
}
# Vytvoření cílové složky, pokud neexistuje
if (-not (Test-Path -LiteralPath $destinationFolder)) {
New-Item -Path $destinationFolder -ItemType Directory
}
# Přesunutí souboru/složky
$destinationPath = Join-Path $destinationFolder $file.Name
if (-not (Test-Path -LiteralPath $destinationPath)) {
Move-Item -LiteralPath $file.FullName -Destination $destinationFolder
}
else {
Write-Warning "Soubor '$($file.Name)' již existuje v '$destinationFolder'."
}
}
Pouštím novější verzi skriptu a zcela bez problémů tentokrát zpracuje všechny soubory (a případně tedy i složky) kde jsou v názvu hranaté závorky.
Závěr
ChatGPT umí obstojně programovat i poměrně složitější věci. Vím to co se Pythonu týče, tam jsem to využil hodně krát. Ale umí i PowerShell jak je vidět na tomto příkladu a bude umět i leccos dalšího. Ať už programovací jazyky nebo různé programy/aplikace pro příkazovou řádku.
Ne vždy se to povede, ale umí dost dobře řešit problémy. Stačí ji popisovat “co to nedělá” nebo předávat chybové hlášky. Poradí i knihovny, verze knihoven, verze aplikací (například rozdílné zadání parametrů pro ImageMagick).
Úspora času bývá nesmírná. To výše popsané je tak 10 minut i s uložením skriptu, vyzkoušením, nalezení problémů a uložením nové verze.
Musíte umět programovat? Těžko říct, když budete výstupu věřit, tak asi až tak moc nemusíte. Já mám výhodu, že to co mi předkládá většinou umím přečíst, pochopit a analyzovat. A také tím pádem ověřit.
PS: Prosím pozor, občas se WordPress umí míchat do kódu, takže ty výše uvedené příklad mohou mít nějaký zádrhel. Mrkněte případně přímo do ChatGPT chatu pro výchozí podobu.
Další tipy týkající se ChatGPT
-
TIP#3055: Jak na ChatGPT API sloučit překlad a souhrn článku na jednu klávesovou zkratku pomoci Python skriptu
Tip ve kterém vůbec nepůjde o ChatGPT API ale o to, že dva hotové skripty (co volají právě to API) lze pomocí jednoho “router” skriptu schovat pod jednu klávesovou zkratku. Související příspěvky…
-
TIP#3053: „Platnost relace interpreta kódu skončila “ co je to za chybu od ChatGPT? Objeví se, když chci stáhnout nějaké soubory ze staršího chatu
Ta hláška „Platnost relace interpreta kódu skončila“ znamená, že v daném chatu už expirovala (skončila) běžící instance Pythonového prostředí, které ChatGPT používá k práci se soubory nebo kódem. Související příspěvky TIP#3168: Jak…
-
TIP#3050: Chcete aby AI dokázala pracovat s (například) celou knihou? Dávejte jí strojově čitelná data. Rozhodně ne PDF
Pár posledních týdnů pomáhám s vydáním knížky o AI (od Lukáše Sedláčka) a mimo to, že už ji mám skoro přečtenou (skvělé čtení), tak jsme potřebovali z knihy dostat i různé “výkřiky”.…
-
TIP#3047: Časté chyby při práci s ChatGPT a LLM vůbec
Potkávám to často. U klientů, na školeních, ale i na sociálních sítích. Lidé si stěžují, že jim AI “nefunguje” nebo “nedělá co chtějí”. Většinou je to prosté. Chybu dělají oni, protože neví,…
-
TIP#3046: Jak na ChatGPT (ale i jiné AI) přímo přes API? V čem je to jiné od webu/aplikace? Co to API vůbec znamená?
API je zkratka pro Application Programming Interface, cestu (rozhraní) jak z nějaké aplikace přistupovat do jiné aplikace či služby. Přes API můžete ChatGPT požádat o cokoliv, prostě ji “odešlete” prompt (zadání) a…
-
TIP#3037: Jak pracovat s umělou inteligencí (ChatGPT a další) s ohledem na ochranu soukromí?
Média informovala o lidech šokovaných tím, že se jejich soukromé chaty s AI objevily ve vyhledávání Google. ChatGPT (nejen) umožňuje sdílet chat prostřednictvím odkazu, který může kdokoliv použít k zobrazení konverzace. Jakmile…
-
TIP#3032: Vše co byste mohli (či měli) chtít vědět o GPT 5 (a je toho hodně)
8. srpna 2025 přišlo Open AI s evolucí, novým GPT 5 modelem. Měl by být rychlejší, levnější a přehlednější pro uživatele. Spojuje dřívější hledání, klasický chatbot i hloubkový výzkum. První dojmy jsou,…
-
TIP#3025: Proč oddělit pracovní a soukromou AI
Nemíchat pracovní a soukromé (nejen) e-maily je zásada, kterou většina z nás zná a dodržuje. Ale co když používáte jednu AI na všechno – pracovní analýzy, texty, data i soukromé záležitosti? Související…
-
TIP#3017: Jaký je rozdíl v “zeptat se AI” a “použít Deep Research” (hloubkový výzkum), pokročilou argumentací (advanced reasoning) a GPT Search?
Narážím na to opakovaně, tedy na to, že lidé nevědí, že je zásadní rozdíl si jen tak povídat s AI (chatovat) a nechat AI provést hloubkový výzkum. Tak si to pojďme trochu…
-
TIP#2964: Jak na Mac OS (a nejen tam) mít lokálně LLM (AI). DeepSeek, Llama a další?
Chcete mít vlastní umělou inteligenci, která nepotřebuje přístup k Internetu a ani nic nikam neposílá a nevykecává? Je to vlastně docela snadné, prostě si budete LLM co to umožňují spouštět přímo v…
-
TIP#2941: ChatGPT má nový generátor fotek a obrázků (4o Image Generation). Je hodně jiný než DALL E 3. Jak na něj?
OpenAI pustila poslední týden v březnu 2025 do světa nový 4o generátor obrázků a fotografií. Je součástí 4o modelu a je zcela, ale opravdu zcela jiný než předchozí DALL E 3. Přístupný…
-
TIP#2892: Jak na iPhone vyvolat ChatGPT přímo hlasem (tedy jako když oslovíte Siri)
Chcete žít tak trochu blíže budoucnosti a na iPhone hlasem vyvolat ChatGPT v “voice” režimu a začít si s ní povídat? Není to nijak složité, ale nemůžete na to jít přes Apple…
-
TIP#2891: ChatGPT Tasks (Úkoly) a k čemu je to dobré?
ChatGPT doplnila beta verzi Tasks, kde můžete ChatGPT požádat, aby v určitý čas (jednorázově nebo opakovaně) spustila vám stanovený dotaz a poslala vám výsledek. Související příspěvky TIP#3212: Jak využít ChatGPT pro kontrolu…
-
TIP#2860: Jak na MacOS přidat stín k obrázkům (pokračování řešení pro Windows)
Před mnoha měsíci jsem využil ChatGPT k vytvoření .cmd skriptu pro Windows, který k obrázku přidá stín pomocí imagemagick. Ušetřil mi záplavu času, protože to používám prakticky neustále pro sociální sítě i…

















