Изменить «дату изменения» папок (возможно, powershell)

1633
poupou

Время от времени, когда я принудительно выключаю компьютер с Windows Server 2003 (у меня нет выбора), все папки, содержащиеся в определенном каталоге, меняют свою «дату изменения» на текущую дату.

К счастью, внутри каждой из этих папок все файлы имеют правильную «дату изменения».

Одним из этих файлов, с которым я хочу скопировать «измененную (или созданную) дату», является файл .jdf, который находится внутри каждой из папок.

Мне нужна помощь для создания скрипта в PowerSell.

Я нашел этот скрипт PS1, который почти выполняет свою работу:

Get-ChildItem $root | Where-Object {$_.PSIsContainer} | Foreach-Object{  # get the oldest file for the current directory object $oldest = Get-ChildItem $_.FullName | Sort-Object LastWriteTime | Select-Object LastWriteTime -Last 1  if($oldest) { # oldest object found, set current directory LastWriteTime $_ | Set-ItemProperty -Name CreationTime -Value $oldest.LastWriteTime  $_ | Set-ItemProperty -Name LastWriteTime -Value $oldest.LastWriteTime } else { # current directory is empty, directory LastWriteTime is left unchanged Write-Warning "Directory '$($_.FullName)' is empty, skiping..." } } 

Проблема в том, что последний измененный объект внутри папок иногда является подпапками, которые также получают текущую дату как «дату изменения». Как сделать так, чтобы он смотрел файлы внутри папки, а не папки?

0
Ваша цель немного неясна для меня: какой сценарий должен повлиять на _exactly_? (Пожалуйста, не комментируйте; скорее отредактируйте ваш вопрос.) Однако, отметка даты и времени `NTFS` для конкретной папки изменяется всякий раз, когда объект (файл или папка) либо создается, либо удаляется внутри него. JosefZ 8 лет назад 0
@JosefZ: я только что отредактировал пост, добавив скрипт. Надеюсь, теперь стало понятнее. Спасибо poupou 8 лет назад 0

1 ответ на вопрос

0
JosefZ

Принимая во внимание, что Get-ChildItem $root -directoryдает тот же результат, что и

Get-ChildItem $root | Where-Object {$_.PSIsContainer} 

Вы можете попробовать (я не знаю PSподробный синтаксис)

Get-ChildItem $root -file 

или даже

gci $root -file 

Не уверен, нуждается ли ваш сценарий в улучшении ...

Я попытался добавить «-directory», я получаю сообщение об ошибке: Get-ChildItem: Не удается найти параметр, который соответствует имени параметра «каталог». В строке: 1 символ: 31 + директория Get-ChildItem $ root <<<< | Where-Object {$ _. PSIsContainer} | ForEach-Object { poupou 8 лет назад 0