Lista winnt@man.lodz.pl
[Lista archiwów] [Inne Listy]

Re: [WINNT] Zmiana nazwy plików na: data godzina minuta sekunda.* ?

To: winnt@man.lodz.pl
Subject: Re: [WINNT] Zmiana nazwy plików na: data godzina minuta sekunda.* ?
From: "Grzegorz Niemirowski" <gnthexfiles@poczta.onet.pl>
Date: Sun, 15 Jun 2014 12:53:41 +0200
666 <j.666@gazeta.pl> napisał(a):
Data i godzina znajdują się w pierwszych 5 bajtach pliku *.dr1 :
0E 04 05 16 30 00 00 00
to data 2014/04/05 godzina 10:48 pm (22:48).
a bajty 0E 04 1A 10 38 00 00 00  to dzień 2014/4/26 godz. 4:56 pm (16:56).
Rzecz w tym, jak zautomatyzowac odczytanie daty pliku z pierwszych 5
bajtów i nadać tę datę plikowi w systemie ntfs (windows) - tak,  aby
mozliwe było sortowanie, katalogowanie i szukanie po dacie pliku bez jego
edytowania. Inaczej czeka mnie ręczne przepisanie daty i godziny (zwykle
używam zmiany atrybutów Total Commandera). Co da się zrobić, bo plików
powstaje średnio z 50 miesięcznie, tyle że nazbierało się za ostatnie pół
roku ;-))

Powershell

Zmiana nazwy:
$files = ls "*.dr1"
foreach ($f in $files) {
   $reader = New-Object IO.FileStream $f, 'Open'
   [byte[]]$buffer = new-object byte[] 5
   $len = $reader.Read($buffer, 0, $buffer.Length)
   $reader.Close()
$name = "20" + $buffer[0] + "-{0:D2}" -f $buffer[1] + "-{0:D2}" -f $buffer[2] + " {0:D2}" -f $buffer[3] +"-{0:D2}" -f $buffer[4]
   $name += [System.IO.Path]::GetExtension($f)
   write-host $name
   move $f.PSPath $name
}

Zmiana daty:
$files = ls "*.dr1"
foreach ($f in $files) {
   $reader = New-Object IO.FileStream $f, 'Open'
   [byte[]]$buffer = new-object byte[] 5
   $len = $reader.Read($buffer, 0, $buffer.Length)
   $reader.Close()
$d = new-object DateTime ($buffer[0] + 2000), $buffer[1], $buffer[2], $buffer[3], $buffer[4], 0
   write-host $d
   $f.LastWriteTime = $d
}


--
Grzegorz Niemirowski
http://www.grzegorz.net/
OE PowerTool i Outlook Express: http://www.grzegorz.net/oe/
Uptime: 22 days, 14 hours, 33 minutes and 36 seconds

<Pop. w Wątku] Aktualny Wątek [Nast. w Wątku>