Přeskočit na obsah
@365tipu
  • Domů
    • Práce na dálku
    • Twitter for dummies
    • Jak na Mastodon
    • Facebook a marketing
    • Návod pro Instagram
    • Jak na LinkedIn
    • Bezpečný Internet
    • Bezpečnost pro novináře
    • Soukromí na Facebooku
    • Pomocník webdesignera
    • Jak na WordPress
    • Nepostradatelné software
      • Jak na Windows 11
      • Jak na Windows 10
      • Jak na iPhone/iPad
      • Jak na Mac OS
      • Jak na Apple TV/TV+
      • Jak na Apple Watch
      • Jak na Apple AirTag
      • Microsoft Office
      • Linux
    • Jazykový koutek
    • GTD
    • Filmy a TV seriály
    • Recenze
    • Chytrá domácnost
      • Chytrá domácnost
      • Jak na Google Home
      • Amazon Echo a Alexa
      • Apple HomePod
      • Jak na Raspberry Pi
      • Jak na QNAP NAS
      • Netatmo
    • Jak na Home Assistant
  • Všechny štítky
  • Odběr e-mailem
  • RSS/XML
  • Kontakt
    • Kontakt
    • Twitter
    • Facebook
    • BlueSky
    • Mastodon
      • Threads
    • Zásady Cookies (EU)
23. 2. 2024 podle 365tipů
Software, Windows

TIP#2619: Jak velké množství souborů třídit do složek podle roku a měsíce? A jak v tom pomůže ChatGPT?

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#3212: Jak využít ChatGPT pro kontrolu pravopisu? Jde to. Ale něco byste měli vědět

    TIP#3212: Jak využít ChatGPT pro kontrolu pravopisu? Jde to. Ale něco byste měli vědět

    Psal jsem o tom už před dvěma roky v Je možné použít ChatGPT/LLM pro kontrolu pravopisu? Jak na kontrolu (zejména českého) pravopisu?. V novém tipu je čas si ukázat prakticky použitelné řešení.…

  • TIP#3200: Marketing není jedna věc. A právě proto v něm firmy tak často chybují (dlouhé čtení)

    TIP#3200: Marketing není jedna věc. A právě proto v něm firmy tak často chybují (dlouhé čtení)

    Měl jsem dvouhodinový seminář pro Venture Club o marketingu. Nahrál na Plaud, nechal přepsat a poté v ChatGPT doladil prompt pro napsání dlouhého „playbook“ textu a krátkého článku. V tomto článku je…

  • TIP#3187: Co to v AI znamenají tokeny a kontextové okno? A čím to omezuje? Dlouhé čtení

    TIP#3187: Co to v AI znamenají tokeny a kontextové okno? A čím to omezuje? Dlouhé čtení

    TLDR? Tokeny jsou jednotka, ve které AI počítá text; kontextové okno je omezený pracovní prostor, do kterého se musí vejít zadání, historie, přílohy i odpověď a když ho zahltíte, AI začne zapomínat,…

  • TIP#3168: Jak na ChatGPT API pro souhrn článků na Internetu. Další velmi dobrý příklad včetně kompletního skriptu (odemčeno)

    TIP#3168: Jak na ChatGPT API pro souhrn článků na Internetu. Další velmi dobrý příklad včetně kompletního skriptu (odemčeno)

    Jedna z velmi častých věcí pro zdejší newsletter, ale i pro #tyden. Shrnout článek odněkud do odstavce textu. Není to až tak triviální, jak by se mohlo zdát Související příspěvky TIP#3162: Jak…

  • TIP#3162: Jak na ChatGPT API pro překlad z a do češtiny. Můžete tím snadno nahradit DeepL (odemčeno)

    TIP#3162: Jak na ChatGPT API pro překlad z a do češtiny. Můžete tím snadno nahradit DeepL (odemčeno)

    Zachtělo se mi přestat platit za DeepL a místo toho překládat ty krátké štěky do newsletterů s pomocí ChatGPT. Ale nutná podmínka byla překlad s klávesovou zkratkou. Na což DeepL měla aplikaci,…

  • TIP#3138: Vše o generování obrázků v ChatGPT (GPT Image). Jak to funguje či nefunguje, jak tvořit prompty

    TIP#3138: Vše o generování obrázků v ChatGPT (GPT Image). Jak to funguje či nefunguje, jak tvořit prompty

    Pozor, OpenAI týden před vánoci pustila do světa GPT Image 1.5. Tento tip vznikl pro verzi 1.0, takže některé věci budou platit, některé už ne. Pouštím ho ven, aby bylo možné odchytat…

  • TIP#3127: Co je nového v GPT-Image 1.5? Tedy v nové verzi generování fotek a obrázků v ChatGPT

    TIP#3127: Co je nového v GPT-Image 1.5? Tedy v nové verzi generování fotek a obrázků v ChatGPT

    OpenAI před Vánoci uvedla GPT-Image 1.5, tedy novější generátor obrázků “integrovaný” do ChatGPT. Původní verze už byla prakticky nepoužitelná. Pomalá a běžně nevygenerovala vůbec nic.  Co je nového? Související příspěvky TIP#3138: Vše…

  • TIP#3120: ChatGPT umí generovat prompty pro jiné obrázkové či video generátory

    TIP#3120: ChatGPT umí generovat prompty pro jiné obrázkové či video generátory

    Zcela běžně používám ChatGPT pro tvorbu promptů pro Midjourney, ale třeba i scénáře pro video v Sora či Gemini.  Použít můžete ale i jiné AI, pokud chcete, umí to také. Související příspěvky…

  • TIP#3078: Jak text VELKÝMI PÍSMENY převést na správná malá a velká písmena? Jasně že přes ChatGPT 

    TIP#3078: Jak text VELKÝMI PÍSMENY převést na správná malá a velká písmena? Jasně že přes ChatGPT 

    Zejména v tiskových zprávách potkáte zvláštní zlozvyk. Agentury PÍŠÍ TITULKY VELKÝMI PÍSMENY.  A v médiích to pak redaktor musí dostat do použitelné podoby. Což není až tak triviální, do cesty se pletou…

  • TIP#3076: Detekce AI textu. K čemu je dobrá, kdy funguje a kdy ne. Jaké detektory můžete použít

    TIP#3076: Detekce AI textu. K čemu je dobrá, kdy funguje a kdy ne. Jaké detektory můžete použít

    Když se dnes ptáme, jestli konkrétní text napsal člověk nebo umělá inteligence, odpověď zní: odhadnout to často jde, ale spolehlivě to nepoznáte. Nástroje na detekci AI pracují s čísly a grafy, ale…

  • TIP#3067: RayCast nenačítá proměnné prostředí, jak na ukládání API klíčů? A jak zjistit co Raycast v prostředí má? Co když spouštíte přímo Python?

    TIP#3067: RayCast nenačítá proměnné prostředí, jak na ukládání API klíčů? A jak zjistit co Raycast v prostředí má? Co když spouštíte přímo Python?

    Když Raycast spouští skripty přes „Create Script Command„, běží v omezeném prostředí shellu. Tento shell: Související příspěvky TIP#3168: Jak na ChatGPT API pro souhrn článků na Internetu. Další velmi dobrý příklad včetně…

  • TIP#3066: AI vytvořené texty jde poznat podle pomlček, respektive podle en dash. Je to tak?

    TIP#3066: AI vytvořené texty jde poznat podle pomlček, respektive podle en dash. Je to tak?

    Nejdřív ochránci čistoty textu křičeli, že používáte “-” místo “–”, tedy spojovníku. Teď křičí, že našli v textu spojovník, a tím pádem je to AI generovaný text.  Související příspěvky TIP#3212: Jak využít…

  • TIP#3061: Necháváte si od ChatGPT (či jiné AI) psát skripty? Pár zásadních tipů i delší přehled

    TIP#3061: Necháváte si od ChatGPT (či jiné AI) psát skripty? Pár zásadních tipů i delší přehled

    Už dlouho používám ChatGPT pro psaní různorodých skriptů. Před nedávnem jsem přidal do výbavy ChatGPT API a řešil pár dalších skriptů. A opět mi to připomnělo pár věcí, které se hodí. Související…

  • Jak na ChatGPT API pro souhrn článků na Internetu. Další velmi dobrý příklad včetně kompletního skriptu 💎

    Jak na ChatGPT API pro souhrn článků na Internetu. Další velmi dobrý příklad včetně kompletního skriptu 💎

    Jedna z velmi častých věcí pro zdejší newsletter, ale i pro #tyden. Shrnout článek odněkud do odstavce textu. Není to až tak triviální, jak by se mohlo zdát Související příspěvky TIP#3168: Jak…

  • TIP#3057: Klienti pro LLM přes API: jak pohodlně chatovat s libovolnou AI

    TIP#3057: Klienti pro LLM přes API: jak pohodlně chatovat s libovolnou AI

    Pokud už máte nějaký ten API přístup k AI, případně máte lokální AI, tak je dost vhodné mít klienta, který ji umožní používat tak jak používáte web/aplikaci pro ChatGPT/Perplexity a další.  Související…

1 2 3 … 6
Další stránka»

Související příspěvky

TIP#3061: Necháváte si od ChatGPT (či jiné AI) psát skripty? Pár zásadních tipů i delší přehled
TIP#2465: Python jako nástroj pro rychlé vylepšení fotografií? A jak pomůže ChatGPT
TIP#3212: Jak využít ChatGPT pro kontrolu pravopisu? Jde to. Ale něco byste měli vědět

ChatGPT Programování Software Umělá inteligence Windows

Předchozí článekTIP#2618: Jak se na webech zbavit výzvy k přihlášení s účtem u Google?Další článek Nákupní rádce (8): Hodně postřehů k sítím přes elektrické rozvody. TCL televize a chytré světélkování

Nejnovější příspěvky

  • TIP#3253: Co je to latence a proč to hraje roli (nejen) při hraní her
  • TIP3252: Chladit notebooky podložkou? Co byste měli vědět
  • TIP#3251: Kouzelná meteostanice ATMOS řeší problém, o kterém ani nevíte
  • TIP#3250: Jak zabránit tomu, aby se Mac po restartu znovu otevřel se všemi aplikacemi z poslední relace
  • TIP#3249: Zálohovat počítači či NAS? Rozhodně ano. Ale kam a jak? Včetně velkého přehledu cloudových služeb

Nejčtenější

Přispět na provoz můžete

Přispějte. 500 Kč můžete změnit dle vlastního uvážení. Z částky zaplatíme DPH a pochopitelně daně platbou na účet 331049001/5500, spec. symbol 365. Částku si můžete změnit. Z platby odvádíme DPH a daníme ji.

Zdejší tipy na zajímavé/užitečné věci obsahují affialiate odkazy na Alzu/Aliexpres

... nebo placeným odběrem

Staňte se platícím odběratelem newsletteru. 5 USD/měsíc, 50 USD/rok nebo dle vlastního uvážení od 100 USD/rok. Každou středu a neděli nálož informací.

Kontakt a tak

Kontakt: 365tipu@gmail.com

Veškerý obsah zde uveřejněný je CC-BY-NC-SA

Oznámení