Короткий ответ
- Нет простого «файловой‑системы» варианта в Windows, аналогичного noatime для ext4, который отключал бы автоматическое обновление поля «Дата изменения» (LastWriteTime) при записи содержимого файла. NTFS/ядро Windows обновляет время изменения при изменении содержимого — это встроённое поведение.
- Практические варианты — либо восстановить метки времени после правки (скрипт/утилита), либо использовать редакторы/плагины, которые сохраняют/восстанавливают время сами, либо писать/устанавливать фильтр‑драйвер (сложно, небезопасно).
Почему нельзя просто «отключить» Date modified
- mtime (LastWriteTime) — семантически отражает изменение содержимого. ОС выставляет его автоматически при записи. Нет монтируемой опции типа «nomtime».
- Единственный реальный способ помешать изменению — перехват вызовов записи/установки времени на уровне драйвера/фильтра или отбракование самих записей — это сложная разработка драйвера (подпись, права, стабильность), обычно нецелесообразна.
Практические и простые решения
1) Сохранить и восстановить метки времени (рекомендуемый способ)
- Скриптом сохранить LastWriteTime всех файлов до правки, выполнить массовые правки, затем восстановить времена. Ниже пример на PowerShell.
Сохранение:
$folder = 'C:\Path\To\Folder'
Get-ChildItem -Path $folder -File -Recurse |
Select-Object FullName, @{N='LastWriteTime';E={$_.LastWriteTime}} |
Export-Csv -Path C:\temp\times.csv -NoTypeInformation -Encoding UTF8
Восстановление:
Import-Csv -Path C:\temp\times.csv | ForEach-Object {
if (Test-Path $_.FullName) {
try { (Get-Item $_.FullName).LastWriteTime = [datetime]$_.LastWriteTime } catch { Write-Warning "Не удалось: $($_.FullName)" }
}
}
Плюсы: просто, работает для тысячи файлов; видно и можно откатить.
Минусы: нужно помнить выполнить восстановление после всех правок; если содержимое действительно меняется, семантика mtime теряется.
2) Автоматическое восстановление во время правки
- Можно записать (или скачать) службу/скрипт, который делает снимок времен и следит за изменениями (FileSystemWatcher), автоматически возвращая старое LastWriteTime для конкретных файлов при их сохранении. Это удобно, но требует чуть больше кода/тестирования.
Пример простого наблюдателя на PowerShell (идея, не промышленный код):
- сохранить times.csv как в пункте 1;
- запустить скрипт с FileSystemWatcher, который при событии Changed восстанавливает время из CSV.
3) Использовать редакторы/плагины, которые сохраняют время
- Некоторые редакторы/плагины имеют опцию «preserve file timestamp» (например плагины для Notepad++ — "Preserve Timestamp" или аналогичные). Если вы используете один и тот же редактор для массовых правок — посмотрите в его настройках или в наличии плагина.
4) Инструменты для массовой правки метаданных
- После правок массово применить утилиту для корректировки дат: NirSoft BulkFileChanger / Attribute Changer / SetFileDate / touch (GnuWin32) и др. Они умеют менять mtime/atime/ctime по файлу/списку/CSV.
5) Хранить дату отдельно
- Если сортировка критична, можно хранить «дата для сортировки» в имени файла или в отдельной базе/файле метаданных. Иногда практичнее, чем постоянно возиться с метками времени ОС.
Предупреждения и побочные эффекты
- Восстановление mtime нарушает логику инкрементных бэкапов, синхронизаторов (OneDrive, Dropbox), систем контроля версий (git — он смотрит не на mtime, а на содержимое, но некоторые внешние инструменты — да), и может вводить в заблуждение при поиске «что изменилось».
- Изменение ctime (CreationTime / ChangeTime) нельзя корректно «подделать» для всех полей без специальных прав/инструментов; LastWriteTime можно устанавливать из-под обычного пользователя для своих файлов.
Вывод
Если вам важно сохранить сортировку и вы редактируете много разных файлов, самый практичный путь — зафиксировать LastWriteTime до правок и затем массово восстановить его (PowerShell/утилиты). Разработка/установка файлового фильтра для «отключения» обновления mtime — теоретически возможна, но непрактична для большинства задач.
Если хотите, могу:
- прислать готовые скрипты: (а) сохранить/восстановить, (б) FileSystemWatcher, который автоматом восстанавливает времена при каждом сохранении;
- порекомендовать конкретные утилиты или плагины для вашего редактора (напишите, чем редактируете).