Page 1 of 2
Zmena atributu datum a cas podle nazvu souboru
Posted: 2018-04-18, 07:28 UTC
by fgci
Ahoj, potřeboval bych u velkého množství (stovky souborů) hromadně změnit atributy souborů: datum a čas podle názvu souboru.
Například soubor:
20170710_151341.jpg......................24.08.2017 18:42:12
na soubor s atributy času
20170710_151341.jpg......................10.07.2017 15:13:41
Díky
PowerShell: set timestamp from file name
Posted: 2018-04-18, 08:00 UTC
by Stefan2
Spusťte PowerShell ve složce se soubory a spusťte tento skript PoSh:
Set timestamps for file named "20170710_151341.jpg" to "10.07.2017 15:13:41"
GCI|%{ $BN=$($_.BaseName -replace "_",""); $TS=[DateTime]::ParseExact($BN, 'yyyyMMddHHmmss', $null);$_.CreationTime=$TS; $_.LastWriteTime=$TS;$_.LastAccessTime=$TS }
jeden dlouhý řádek
Opět, další podrobnosti:
Code: Select all
Get-ChildItem |
ForEach-Object{
$BN=$($_.BaseName -replace "_","");
$TS=[DateTime]::ParseExact($BN, 'yyyyMMddHHmmss', $null);
$_.CreationTime=$TS;
$_.LastWriteTime=$TS;
$_.LastAccessTime=$TS
}
Posted: 2018-04-18, 08:48 UTC
by fgci
Uf, chvíli jsem bojoval s PowerShellem, ale podařilo se.
Díky moc.
Posted: 2018-04-18, 09:39 UTC
by fgci
Ještě jsem zjistil jiné varianty názvu souborů, které jsou delší a z nich to neumí zapsat atributy.
Dal by se skript upravit pro tyto delší názvy?
např.:
20170701_001610_001~2
20170709_215542(0)
20170709_223256_001
Děkuji
Posted: 2018-04-18, 10:10 UTC
by Stefan2
Časová značka z názvů souborů, například:
20170710_151341.jpg
20170824_184212.jpg
20170701_001610_001 ~ 2.jpg
20170709_215542 (0).jpg
20170709_223256_001.jpg
(Název souboru začíná časovou značkou)
Snaž se:
Set timestamps for file named "20170710_151341 something more here.jpg" to "10.07.2017 15:13:41"
GCI|%{ $BN=$($_.BaseName.Substring(0,15) -replace "_",""); $TS=[DateTime]::ParseExact($BN, 'yyyyMMddHHmmss', $null);$_.CreationTime=$TS; $_.LastWriteTime=$TS;$_.LastAccessTime=$TS }
--- jeden dlouhý řádek ---
- - -
From above:
Set timestamps for file named "20170710_151341.jpg" to "10.07.2017 15:13:41"
GCI|%{ $BN=$($_.BaseName -replace "_",""); $TS=[DateTime]::ParseExact($BN, 'yyyyMMddHHmmss', $null);$_.CreationTime=$TS; $_.LastWriteTime=$TS;$_.LastAccessTime=$TS }
Posted: 2018-04-18, 10:50 UTC
by fgci
To je ono, ještě jednou děkuji
Posted: 2018-04-18, 14:11 UTC
by Hacker
fgci,
Například soubor:
20170710_151341.jpg......................24.08.2017 18:42:12
na soubor s atributy času
20170710_151341.jpg......................10.07.2017 15:13:41
Oznacit subory, potom:
Files - Change Attributes - Change Plugin attributes:
tc - writedate -
[=tc.name:7-8].[=tc.name:5-6].[=tc.name:1-4] [=tc.name:10-11]:[=tc.name:12-13]:[=tc.name:14-15]
HTH
Roman
Posted: 2018-04-19, 06:28 UTC
by fgci
Hacker wrote:tc - writedate - [=tc.name:7-8].[=tc.name:5-6].[=tc.name:1-4] [=tc.name:10-11]:[=tc.name:12-13]:[=tc.name:14-15]
Díky moc, takhle jsem původně myslel, že to nějak musí jít v TC.

I jsem to zkoušel přes Change Plugin attributes:, ale nepodařilo se mi vytvořit správnou hodnotu zápisu.
Ani vlastně teď, když vyberu v Property:
writedate, tak v Choose plugin property mám výběr jen z :
creationdate
writedate
accessdate
ale není ve vlastnostech výběr
name
Posted: 2018-04-19, 06:55 UTC
by Stefan2
>>ale není ve vlastnostech výber name
Plugin pracuje s dříve vybranými soubory.
(A pro obecné informace: divize "tc.name" musí mít za následek platnou razítko v každé zemi)
Posted: 2018-04-19, 08:26 UTC
by fgci
Stefan2 wrote:
Plugin pracuje s dříve vybranými soubory.
Mám to takto:
Image:
https://postimg.cc/image/9rnqva2pn/
Posted: 2018-04-19, 09:29 UTC
by Stefan2
1.) "tc.creationdate" provides the current CreationDate time stamp.
Use Hackers' example ([=tc.name:7-8].) instead to build the wanted time stamp from parts of the file name.
2.) Check "[√] Change plugin attributes" too.
Posted: 2018-04-19, 09:41 UTC
by Hacker
fgci,
není ve vlastnostech výběr name
Nie je, musis to tam napisat rucne.
Roman
Posted: 2018-04-19, 10:39 UTC
by fgci
Hacker wrote:
Nie je, musis to tam napisat rucne.
Aha

Re: Zmena atributu datum a cas podle nazvu souboru
Posted: 2021-10-01, 21:25 UTC
by PauloTC
Pro @Stefan2
Váš skript na změnu atributů funguje naprosto perfektně. Mám, ale velkou prosbu - moje soubory začínají předponou IMG_ tedy: IMG_20211001_232110.jpg Mohl bych Vás poprosit o úpravu, abych to nemusel pracně přejmenovat?
Moc děkuji!
Re: Zmena atributu datum a cas podle nazvu souboru
Posted: 2021-10-02, 10:42 UTC
by Stefan2
2
PauloTC
Ahoj a vítej v komunitě
PauloTC wrote: 2021-10-01, 21:25 UTC
Pro @Stefan2
Váš skript na změnu atributů funguje naprosto perfektně. Mám, ale velkou prosbu - moje soubory začínají předponou IMG_ tedy: IMG_20211001_232110.jpg Mohl bych Vás poprosit o úpravu, abych to nemusel pracně přejmenovat?
Moc děkuji!
IMG_20211001_232110.jpg
Set timestamps for file named "IMG_20211001_232110.jpg" to "01.10.2021 23:21:10"
Just learn how PowerShell substring works and start from position 4:
Zjistete, jak funguje podretezec PowerShell, a zacnete od pozice 4:
GCI|%{ $BN=$($_.BaseName.Substring(4,15) -replace "_",""); $TS=[DateTime]::ParseExact($BN, 'yyyyMMddHHmmss', $null);$_.CreationTime=$TS; $_.LastWriteTime=$TS;$_.LastAccessTime=$TS }
- - -
Collection from above:
Set timestamps for file named "
20170710_151341 something more here.jpg" to "10.07.2017 15:13:41"
GCI|%{ $BN=$($_.BaseName.Substring(0,15) -replace "_",""); $TS=[DateTime]::ParseExact($BN, 'yyyyMMddHHmmss', $null);$_.CreationTime=$TS; $_.LastWriteTime=$TS;$_.LastAccessTime=$TS }
- - -
Set timestamps for file named "
20170710_151341.jpg" to "10.07.2017 15:13:41"
GCI|%{ $BN=$($_.BaseName -replace "_",""); $TS=[DateTime]::ParseExact($BN, 'yyyyMMddHHmmss', $null);$_.CreationTime=$TS; $_.LastWriteTime=$TS;$_.LastAccessTime=$TS }
- - -
Code: Select all
GCI|%{ $BN=$($_.BaseName.Substring(4,15) -replace "_",""); $TS=[DateTime]::ParseExact($BN, 'yyyyMMddHHmmss', $null);$_.CreationTime=$TS; $_.LastWriteTime=$TS;$_.LastAccessTime=$TS }
GCI|%{ $BN=$($_.BaseName.Substring(0,15) -replace "_",""); $TS=[DateTime]::ParseExact($BN, 'yyyyMMddHHmmss', $null);$_.CreationTime=$TS; $_.LastWriteTime=$TS;$_.LastAccessTime=$TS }
GCI|%{ $BN=$($_.BaseName -replace "_",""); $TS=[DateTime]::ParseExact($BN, 'yyyyMMddHHmmss', $null);$_.CreationTime=$TS; $_.LastWriteTime=$TS;$_.LastAccessTime=$TS }