Как предотвратить изменение поля «Дата изменения» у файла в файловой системе NTFS?

Мне нужно отредактировать много <b>разных файлов</b> в папке, однако при этом меняется их дата модификации, и из‑за этого нарушается сортировка по датам. Есть обходные пути: <br/> а) для единичных файлов использовать скрипт или программу для изменения тэгов; <br/> б) переименовать файлы так, чтобы имя содержало дату изменения — но это работает только в отдельных случаях (например, для изображений, где имена не важны). <br/> Хотелось бы найти решение на уровне файловой системы, если оно вообще возможно. На Raspberry Pi в настройках загрузчика можно прописать noatime для раздела ext4 (это влияет на дату доступа); возможно ли что‑то подобное в Windows для сохранения/контроля даты изменения при массовом редактировании файлов, я ничего применимого для <b>массового</b> редактирования не нашёл?
  • 14 марта 2026 г. 12:02
Ответы на вопрос 3
Короткий ответ
- Нет простого «файловой‑системы» варианта в 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, который автоматом восстанавливает времена при каждом сохранении;
- порекомендовать конкретные утилиты или плагины для вашего редактора (напишите, чем редактируете).
<a href="https://winitpro.ru/index.php/2025/01/21/poluchit-izmenit-datu-sozdaniya-modifikacii-fajla/" rel="nofollow">winitpro.ru</a> изменение параметров файла через powershell <br/> <br/> Ps в линуксе для ntfs noatime тоже работает <br/> <br/> Pss Нативная блокировка обновления даты изменения файлов (Last Modified) в NTFS невозможна, так как это критическая функция ведения журнала файловой системы
Написать скрипт, который сделает то, что вам нужно. Сначала получаете список: файл плюс дата и время. Далее редактируете, а после проходите по этому списку, например с помощью <a href="https://www.nirsoft.net/utils/nircmd.html" rel="nofollow">nircmd -&gt; setfiletime</a> для возврата даты. Можно написать бантик или использовать любой автоматизатор. Для получения и изменения даты файла используется WinAPI вызовы <code>GetFileTime</code> и <code>SetFileTime</code> .
Похожие вопросы