Hromadná změna názvů pomocí Powershell
Batch File Rename in PowerShell
Domnívám se, že s problémem „hromadného přejmenování souborů“ se setkal každý, kdo pracuje s fotografiemi. Těch důvodů může být 25, ale mne dostal nakonec způsob, jakým některé OS (Windows) řeší doplicitní soubory – prostě na konec jména připojí index v kulatých závorkách, takže vznikne název tvaru ‚soubor (1).jpg‘ – uvádím schválně s jednoduchými apostrofy, aby vynikla ta mezera v názvu.
Do problému se dostanete, pokud chcete vyexportovat 128 takových fotek na webový server, který takovéto názvy statečně ignoruje, nebo je považuje za vyslovenou chybu (jiný File System – např. Linux…)
Upravit 10 fotek je otrava, ale při větších počtech to bývá vražedné…
Standardní příklad uvádí dávkové přejmenování s pomocí metody Replace:
Povzbuzeni úspěchem zkusme něco složitějšího:
Takže se již cítíme docela festovně v kramclecích a zkusíme:
Ouups! Ale chyba „parameterBindingException“ nás navede: ten bordel dělá ta závorka, která se interpretuje jako speciální znak. Takže musíme říci „Powershelle, ta levá závorka není speciální znak ani oddělovač!“ :
Trefa! Takže ještě tu pravou:
No a na závěr něco-něco:
Zaprvé se mi nepodařilo do příkazu Rename-Item zabudovat podmíněný příkaz. To jsem obešel přes filtr ‚?‘ – Where-Object.
Zadruhé jsem nechtěl pouhý ‚replace‘, ale skutečně snížit letopočet o jedničku… Ve výrazu
(-1 + $_.Name.Substring(5,4)) je dúležité uvedení -1 na začátku: výraz se vyhodnocuje jako číslo a dochází ke konverzi řetězce $_.Name.Substring(5,4) na numerickou hodnotu. Po provedení výpočtu se celý výraz přidává k začátku textového řetězce a tedy dojde k jeho konverzi z čísla na znakový řetězec….
Samozřejmě tímto způsobem lze pokračovat dále. Pokud se domníváte, že máte nějaký přínosný podnět do diskuse, připojte svůj komentář k příspěvku!
Další příklad:
PS C:\Users\sura> Get-ChildItem videos|? {$_.Name -like 'Šó*'}|Rename-Item -NewName {$_.Name.Substring(0,8) + '.mp4'} -Verbose VERBOSE: Performing the operation "Rename File" on target "Item: C:\Users\sura\videos\Šógun 01-Shogun 01 (1980) Tvrip Cz-1.m4v Destination: C:\Users\sura\videos\Šógun 01.mp4". VERBOSE: Performing the operation "Rename File" on target "Item: C:\Users\sura\videos\Šógun 02-Shogun 02 (1980) Tvrip Cz-2.m4v Destination: C:\Users\sura\videos\Šógun 02.mp4". VERBOSE: Performing the operation "Rename File" on target "Item: C:\Users\sura\videos\Šógun 03-Shogun 03 (1980) Tvrip Cz-3.m4v Destination: C:\Users\sura\videos\Šógun 03.mp4". VERBOSE: Performing the operation "Rename File" on target "Item: C:\Users\sura\videos\Šógun 04-Shogun 04 (1980) Tvrip Cz-4.m4v Destination: C:\Users\sura\videos\Šógun 04.mp4". VERBOSE: Performing the operation "Rename File" on target "Item: C:\Users\sura\videos\Šógun 05-Shogun 05 (1980) Tvrip Cz-5.m4v Destination: C:\Users\sura\videos\Šógun 05.mp4". VERBOSE: Performing the operation "Rename File" on target "Item: C:\Users\sura\videos\Šógun 06-Shogun 06 (1980) Tvrip Cz-6.m4v Destination: C:\Users\sura\videos\Šógun 06.mp4". VERBOSE: Performing the operation "Rename File" on target "Item: C:\Users\sura\videos\Šógun 07-Shogun 07 (1980) Tvrip Cz-7.m4v Destination: C:\Users\sura\videos\Šógun 07.mp4". VERBOSE: Performing the operation "Rename File" on target "Item: C:\Users\sura\videos\Šógun 08-Shogun 08 (1980) Tvrip Cz-8.m4v Destination: C:\Users\sura\videos\Šógun 08.mp4". VERBOSE: Performing the operation "Rename File" on target "Item: C:\Users\sura\videos\Šógun 09-Shogun 09 (1980) Tvrip Cz-9.m4v Destination: C:\Users\sura\videos\Šógun 09.mp4". VERBOSE: Performing the operation "Rename File" on target "Item: C:\Users\sura\videos\Šógun 1 0-Shogun 10 (1980) Tvrip Cz-10.m4v Destination: C:\Users\sura\videos\Šógun 10.mp4". PS C:\Users\admin>
Zanechat odpověď