Saya ingin memindahkan folder — yang berisi banyak sub-folder dan file — dari satu drive NTFS ke drive lain, tetapi saya memerlukan metadata date dan nilai atribut cap waktu yang disimpan dari sumber asli pada drive tujuan yang baru.
Masalahnya: Saya perhatikan ketika saya menyelesaikan berbagai operasi penyalinan untuk tugas, nilai timestamp untuk "tanggal pembuatan", "tanggal modifikasi terakhir", dll. Tidak disimpan pada folder yang berisi setidaknya satu folder / file. Saya juga memperhatikan bahwa folder kosong yang dipindahkan pada akhirnya akan dan secara otomatis mengubah tanggal pembuatannya agar sesuai dengan yang lainnya serta ketika menempatkan sesuatu di folder kosong pada drive baru.
Usaha Saya: Saya sudah mencoba hampir semua yang saya dapat temukan melalui Google pada subjek ini (Robocopy, Richcopy, Microsoft SyncToy, Total Commander, Free Commander ... dan banyak, banyak lagi ...) - yang semuanya menghasilkan relatif sama hasil. Tidak ada yang menghasilkan pelestarian komprehensif, 100% dari sumber yang dipindahkan. Robocopy dan Richcopy (bersama dengan "Komandan") datang dekat, tapi saya masih mengalami masalah (dalam semua kasus) di mana tanggal pembuatan salah "diawetkan", tanggal modifikasi terakhir tidak dapat dipertahankan sama sekali, dll. Satu-satunya janji yang benar Saya telah melihat lebih dari itu ... adalah Powershell.
Perjalanan PowerShell saya
Saya menemukan tautan ini:
https://stackoverflow.com/questions/34951911/powershell-move-item-folder-time-stamp
... dengan skrip ini:
function Move-FileWithTimestamp {
[cmdletbinding()]
param(
[Parameter(Mandatory=$true,Position=0)][string]$Path,
[Parameter(Mandatory=$true,Position=1)][string]$Destination
)
$origLastAccessTime = ( Get-Item $Path ).LastAccessTime
$fileName = ( Get-Item $Path ).Name
Move-Item -Path $Path -Destination $Destination
$(Get-Item ($Destination+'\'+$fileName)).LastAccessTime =
$origLastAccessTime
}
Skrip di utas di atas masih tidak melakukan yang berbeda dari program yang saya daftarkan, tetapi setidaknya di sini, saya memiliki platform di mana saya dapat mengubah / menyesuaikan / men-tweak beberapa hal untuk kebutuhan saya yang sebenarnya. Jadi saya melakukan apa yang saya bisa dengan pengetahuan saya yang terbatas di bidang ini (yaitu mengubah ".LastAccessTime" dengan ".CreationTime", bertukar ".LastAccessTime" dengan "LastWriteTime", dll.), Dan akhirnya relatif dekat untuk mempertahankan semua stempel waktu ( Saya percaya pada satu titik, saya telah menyimpan yang terakhir diubah, terakhir diakses, dan terakhir disimpan pada folder pengujian saya). Namun, saya masih tidak dapat mempertahankan tanggal pembuatan dengan benar, dan apa yang dapat saya capai dengan yang lainnya jelas hanya diterapkan pada folder uji tunggal (dan tidak ada yang lain, seperti sub-folder di dalamnya ... tapi ini adalah hanya karena saya tidak
Saya berada di atas kepala saya ketika datang ke hal-hal ini, jadi saya bertanya-tanya apakah ada orang di luar sana yang ingin mengatasi ini.
UPDATE: Di sinilah saya sekarang:
function Move-FileWithTimestamp {
[cmdletbinding()]
param(
[Parameter(Mandatory=$true,Position=0)][string]$Path,
[Parameter(Mandatory=$true,Position=1)][string]$Destination
)
$origCreationTime = ( Get-Item $Path ).CreationTime
$origLastWriteTime = ( Get-Item $Path ).LastWriteTime
$origLastAccessTime = ( Get-Item $Path ).CreationTime
$fileName = ( Get-Item $Path ).Name
Move-Item -Path $Path -Destination $Destination
$(Get-Item ($Destination+'\'+$fileName)).CreationTime = $origCreationTime
$(Get-Item ($Destination+'\'+$fileName)).LastWriteTime =
$origLastWriteTime
$(Get-Item ($Destination+'\'+$fileName)).LastAccessTime =
$origLastAccessTime
}
Ini tampaknya mempertahankan waktu pembuatan asli untuk folder utama yang sedang dipindahkan (serta waktu modifikasi / penulisan terakhir), tetapi jelas waktu yang diakses terakhir berubah ke waktu pembuatan asli dalam proses (sepertinya seolah-olah ketika sebuah folder adalah dipindahkan ke drive baru, Windows, secara default, mengubah waktu diakses terakhir selama proses itu, dan JUGA mengacu pada waktu diakses terakhir baru untuk membuat waktu pembuatan baru folder di lokasi baru (itu TIDAK merujuk pada waktu pembuatan asli apa pun secara wajar). IE jika Anda mencoba dan mengatur waktu pembuatan baru untuk menyamai waktu pembuatan asli, tidak ada yang akan menghasilkan, karena waktu akses terakhir yang baru secara otomatis akan mengubah waktu pembuatan baru untuk menyamakannya. Jadi, jika Anda memaksa Windows untuk membuat waktu akses terakhir yang baru sama dengan waktu pembuatan asli,maka Anda akhirnya berakhir dengan waktu pembuatan yang benar, tetapi waktu akses terakhir yang salah.
Jadi, sekarang saya terjebak dengan waktu akses terakhir yang salah, tetapi memperbaiki waktu untuk yang lainnya. Juga, saya tidak tahu bagaimana saya akan mendapatkan ini untuk diterapkan ke semua subfolder juga, jadi beri tahu saya jika ada yang tahu cara melakukannya.
MEMPERBARUI:
function Move-FileWithTimestamp {
[cmdletbinding()]
param(
[Parameter(Mandatory=$true,Position=0)][string]$Path,
[Parameter(Mandatory=$true,Position=1)][string]$Destination
)
$origCreationTime = ( Get-Item $Path ).CreationTime
$origLastWriteTime = ( Get-Item $Path ).LastWriteTime
$origLastAccessTime = ( Get-Item $Path ).CreationTime
$origChildCreationTime = ( Get-ChildItem $Path ).CreationTime
$origChildLastWriteTime = ( Get-ChildItem $Path ).LastWriteTime
$origChildLastAccessTime = ( Get-ChildItem $Path ).CreationTime
$fileName = ( Get-Item $Path ).Name
Move-Item -Path $Path -Destination $Destination
$(Get-Item ($Destination+'\'+$fileName)).CreationTime = $origCreationTime
$(Get-Item ($Destination+'\'+$fileName)).LastWriteTime = $origLastWriteTime
$(Get-Item ($Destination+'\'+$fileName)).LastAccessTime =
$origLastAccessTime
$(Get-ChildItem ($Destination+'\'+$fileName)) | ForEach-Object {
$_.CreationTime = $origChildCreationTime }
$(Get-ChildItem ($Destination+'\'+$fileName)) | ForEach-Object {
$_.LastWriteTime = $origChildLastWriteTime }
$(Get-ChildItem ($Destination+'\'+$fileName)) | ForEach-Object {
$_.LastAccessTime = $origChildLastAccessTime }
}
Sekarang, saya memiliki folder utama dan satu jika itu sub-folder dengan pembuatan yang benar dan tanggal modifikasi terakhir (tetapi tidak diakses terakhir). Saya tidak tahu bagaimana menyelesaikan ini untuk sisa sub-folder di folder utama, dan juga untuk setiap sub-folder di dalam sub-folder tersebut.
Robocopy /copyall
tidak bekerja?