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
2PauloTC

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 }