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
|