none
Сравнить файлы по дате изменения, и после выполнить действие RRS feed

  • Вопрос

  • Добрый день,
    есть файл1(один еталонный екземпляр), файл2(файл на пользовательском ПК), файл3(файл на пользовательском ПК).
    необходимо сравнить файл1 и файл2 по дате изменения, и если дата изменения файл1 больше даты изменения файл2, тогда удалить файл2, файл3 и записать файл1 на пользовательский ПК.
    Неообходимо для работы lotus клиента, файл1 и файл2 это файлы домашней страницы клиента с ссылками на разные базы.
    Иногда ссылки на базы меняются, добавляются новые записи, соответственно необходимо заменять старый файл2 на новый  файл1.
    Мне наиболее интерестно как удалить файл3?
    Я могу заменить файл1 на файл2 так:

    set srcDir=\\backup2\Files\bookmark.ntf
    set destDir=c:\lotus\notes\data\
    xcopy /D /Y "%srcDir%" "%destDir%"

    но незнаю как удалить файл3 при условии файл1>файл2.
    Заранее спасибо!

    25 января 2010 г. 22:52

Ответы

  • Как вы делаете синтаксис ПоШа подсвеченным ?

    $DebugPreference = "Continue"
    
    #задаем локации
    $Dest1 = "f:\temp\change\1\test.txt"
    $Dest2 = "f:\temp\change\2\test.txt"
    $Dest3 = "f:\temp\change\3\test.txt"
    
    #посмотрим данные об изменениях
    Write-host "Файл1 был изменен:" (Dir $Dest1).LastWriteTime
    Write-host "Файл2 был изменен:" (Dir $Dest2).LastWriteTime
    Write-host "Файл3 был изменен:" (Dir $Dest3).LastWriteTime
    
    #Сравниваем даты создания.
    #Проверяю исли дата создания файла1 была  позже чем Файла2 или файла3, то запустим замену файлов
    If ( ((Dir $Dest1).LastWriteTime -gt (Dir $Dest2).LastWriteTime) -or ((Dir $Dest1).LastWriteTime -gt (Dir $Dest3).LastWriteTime))
        {
            #Удалим данные
            write-debug "Удаляю Файл2"
            Remove-Item -Recurse -Force $Dest2
            write-debug "Удаляю Файл3"
            Remove-Item -Recurse -Force $Dest3
            
            #Замена 
            write-debug "Копирую в Файл2"        
            copy-item $Dest1 $Dest2 -force 
            write-debug "Копирую в Файл3"        
            copy-item $Dest1 $Dest3 -force        
        }  

    • Помечено в качестве ответа Andrii Dovbnia 1 февраля 2010 г. 12:36
    28 января 2010 г. 10:57

Все ответы

  • > но незнаю как удалить файл3 при условии файл1>файл2
    если на решать задачу на cmd, то придется повозиться: см for /?
    например, чтобы получить дату/время файла file3 в текущей папке, можно сделать так: for /f %%i in ('dir /b file3') do echo %%~ti, но, затем, потребуется парсить результат, отдельно сравнивать дату и время, что есть очень муторно.

    Проще реализовать все это на VBScript|JScript, а еще проще на PowerShell:

    Так, на PowerShell это будет выглядеть, как то так:
    if ((dir файл1).LastWriteTime -gt (dir файл2).LastWriteTime) {
    ...
    }

    26 января 2010 г. 8:50
  • > но незнаю как удалить файл3 при условии файл1>файл2
    если на решать задачу на cmd, то придется повозиться: см for /?
    например, чтобы получить дату/время файла file3 в текущей папке, можно сделать так: for /f %%i in ('dir /b file3') do echo %%~ti, но, затем, потребуется парсить результат, отдельно сравнивать дату и время, что есть очень муторно.

    Проще реализовать все это на VBScript|JScript, а еще проще на PowerShell:

    Так, на PowerShell это будет выглядеть, как то так:
    if ((dir файл1).LastWriteTime -gt (dir файл2).LastWriteTime) {
    ...
    }

    Спасибо за ответ, но к сожелению я не силен в скриптинге.
    Если есть возможность/время пожайлуста приведите более рабочий пример.
    26 января 2010 г. 13:46
  • >Если есть возможность/время пожайлуста приведите более рабочий пример.

    замените многоточие на del файл3 и получите более рабочий пример, но книжки вам почитать все равно придется, иначе рискуете нарваться на патч Бармина ;)
    27 января 2010 г. 6:56
  • Как вы делаете синтаксис ПоШа подсвеченным ?

    $DebugPreference = "Continue"
    
    #задаем локации
    $Dest1 = "f:\temp\change\1\test.txt"
    $Dest2 = "f:\temp\change\2\test.txt"
    $Dest3 = "f:\temp\change\3\test.txt"
    
    #посмотрим данные об изменениях
    Write-host "Файл1 был изменен:" (Dir $Dest1).LastWriteTime
    Write-host "Файл2 был изменен:" (Dir $Dest2).LastWriteTime
    Write-host "Файл3 был изменен:" (Dir $Dest3).LastWriteTime
    
    #Сравниваем даты создания.
    #Проверяю исли дата создания файла1 была  позже чем Файла2 или файла3, то запустим замену файлов
    If ( ((Dir $Dest1).LastWriteTime -gt (Dir $Dest2).LastWriteTime) -or ((Dir $Dest1).LastWriteTime -gt (Dir $Dest3).LastWriteTime))
        {
            #Удалим данные
            write-debug "Удаляю Файл2"
            Remove-Item -Recurse -Force $Dest2
            write-debug "Удаляю Файл3"
            Remove-Item -Recurse -Force $Dest3
            
            #Замена 
            write-debug "Копирую в Файл2"        
            copy-item $Dest1 $Dest2 -force 
            write-debug "Копирую в Файл3"        
            copy-item $Dest1 $Dest3 -force        
        }  

    • Помечено в качестве ответа Andrii Dovbnia 1 февраля 2010 г. 12:36
    28 января 2010 г. 10:57
  • Как вы делаете синтаксис ПоШа подсвеченным ?

    $DebugPreference = "Continue"
    
    
    
    #задаем локации
    
    $Dest1 = "f:\temp\change\1\test.txt"
    
    $Dest2 = "f:\temp\change\2\test.txt"
    
    $Dest3 = "f:\temp\change\3\test.txt"
    
    
    
    #посмотрим данные об изменениях
    
    Write-host "Файл1 был изменен:" (Dir $Dest1).LastWriteTime
    
    Write-host "Файл2 был изменен:" (Dir $Dest2).LastWriteTime
    
    Write-host "Файл3 был изменен:" (Dir $Dest3).LastWriteTime
    
    
    
    #Сравниваем даты создания.
    
    #Проверяю исли дата создания файла1 была  позже чем Файла2 или файла3, то запустим замену файлов
    
    If ( ((Dir $Dest1).LastWriteTime -gt (Dir $Dest2).LastWriteTime) -or ((Dir $Dest1).LastWriteTime -gt (Dir $Dest3).LastWriteTime))
    
        {
    
            #Удалим данные
    
            write-debug "Удаляю Файл2"
    
            Remove-Item -Recurse -Force $Dest2
    
            write-debug "Удаляю Файл3"
    
            Remove-Item -Recurse -Force $Dest3
    
            
    
            #Замена 
    
            write-debug "Копирую в Файл2"        
    
            copy-item $Dest1 $Dest2 -force 
    
            write-debug "Копирую в Файл3"        
    
            copy-item $Dest1 $Dest3 -force        
    
        }  


    очень просто
    if ($poshcode)
     {
      Click-Icon "Insert Code"
      $Language = "C#"
     }
     

    MSBF
    1 февраля 2010 г. 14:27