none
Powershell скрипт копирования файлов RRS feed

  • Вопрос

  • Здравствуйте.

    помогите задать условие проверки существования файлов старше не более 5 минут с момента запуска скрипта.

    25 ноября 2011 г. 8:36

Ответы

  • $files = Get-ChildItem -Path "d:\*.csv" - коллекция объектов,поэтому свойства $files.LastWriteTime  - у коллекции нет,есть у скалярного значения($files[0].LastWriteTime).

    PS  >  Get-ChildItem C:\Windows\*.ini
    
    
        Directory: C:\Windows
    
    
    Mode                LastWriteTime     Length Name
    ----                -------------     ------ ----
    -a---        04.03.2010     21:34         66 Arc DVD Copy.INI
    -a---        03.07.2009     15:46      28543 Ascd_tmp.ini
    -a---        15.09.2009     10:27         69 LBPropSpa.ini
    -a---        21.12.2009     23:21         25 libem.INI
    -a---        11.06.2009      1:36       1405 msdfmap.ini
    -a---        11.06.2009      2:08        219 system.ini
    -a---        23.11.2011     13:47        122 tninfo.ini
    -a---        13.07.2011     13:50        219 win.ini
    
    
    PS  >  $files = Get-ChildItem C:\Windows\*.ini
    PS  >  $files.LastWriteTime
    PS 4>  $files[0].LastWriteTime
    
    4 марта 2010 г. 21:34:42
    


    Теперь пример:

    PS >  Get-ChildItem C:\Windows\*.ini | where {$_.LastWriteTime -ge (Get-Date).AddMinutes(-5)}
    PS >  1 > F:\1.txt
    PS >  Get-ChildItem F:\1.txt | where {$_.LastWriteTime -ge (Get-Date).AddMinutes(-5)}
    
    
        Directory: F:\
    
    
    Mode                LastWriteTime     Length Name
    ----                -------------     ------ ----
    -a---        25.11.2011     13:22          8 1.txt
    

     

    • Помечено в качестве ответа NewFeofan 25 ноября 2011 г. 9:33
    25 ноября 2011 г. 9:23
    Отвечающий
  • помогло.

    Я пытался это сделать вот так

    выдавалась ошибка

    [datetime]::ParseExact($a,"dd.MM.yyyy hh:mm:ss",$null)


    Можно и так,только вместо hh - HH.

    PS >  [datetime]::ParseExact($a,"dd.MM.yyyy HH:mm:ss",$null)
    
    25 ноября 2011 г. 15:29:26
    

     

    • Помечено в качестве ответа NewFeofan 25 ноября 2011 г. 13:08
    25 ноября 2011 г. 12:02
    Отвечающий

Все ответы

  • Попробовал такой вариант, но условие не отрабатывает.
    $files = Get-ChildItem -Path "d:\*.csv" 
    $fileTime = $files.LastWriteTime 
    $systemTime = Get-Date 
    foreach ($file in $files)
    {
    if ($fileTime.Date -le ($systemTime.Date).AddMinutes(-5)) 
    Write-Host "File date is earlier than system date."
    else 
    Write-Host "File date is equal to system date." 
    }
    }
    25 ноября 2011 г. 9:05
  • $files = Get-ChildItem -Path "d:\*.csv" - коллекция объектов,поэтому свойства $files.LastWriteTime  - у коллекции нет,есть у скалярного значения($files[0].LastWriteTime).

    PS  >  Get-ChildItem C:\Windows\*.ini
    
    
        Directory: C:\Windows
    
    
    Mode                LastWriteTime     Length Name
    ----                -------------     ------ ----
    -a---        04.03.2010     21:34         66 Arc DVD Copy.INI
    -a---        03.07.2009     15:46      28543 Ascd_tmp.ini
    -a---        15.09.2009     10:27         69 LBPropSpa.ini
    -a---        21.12.2009     23:21         25 libem.INI
    -a---        11.06.2009      1:36       1405 msdfmap.ini
    -a---        11.06.2009      2:08        219 system.ini
    -a---        23.11.2011     13:47        122 tninfo.ini
    -a---        13.07.2011     13:50        219 win.ini
    
    
    PS  >  $files = Get-ChildItem C:\Windows\*.ini
    PS  >  $files.LastWriteTime
    PS 4>  $files[0].LastWriteTime
    
    4 марта 2010 г. 21:34:42
    


    Теперь пример:

    PS >  Get-ChildItem C:\Windows\*.ini | where {$_.LastWriteTime -ge (Get-Date).AddMinutes(-5)}
    PS >  1 > F:\1.txt
    PS >  Get-ChildItem F:\1.txt | where {$_.LastWriteTime -ge (Get-Date).AddMinutes(-5)}
    
    
        Directory: F:\
    
    
    Mode                LastWriteTime     Length Name
    ----                -------------     ------ ----
    -a---        25.11.2011     13:22          8 1.txt
    

     

    • Помечено в качестве ответа NewFeofan 25 ноября 2011 г. 9:33
    25 ноября 2011 г. 9:23
    Отвечающий
  • Спасибо за помощь.
    25 ноября 2011 г. 9:32
  • Не подскажете, как преобразовать время из лог файла (в лог прописана строчка Add-Content $LogFile -Value ([system.DateTime]::Now ) ) из строчной переменной в переменную типа Date Time? 
    25 ноября 2011 г. 11:01
  • Не подскажете, как преобразовать время из лог файла (в лог прописана строчка Add-Content $LogFile -Value ([system.DateTime]::Now ) ) из строчной переменной в переменную типа Date Time? 


    Вопрос мне не понятен,зачем использовать ло файл,когда там [system.DateTime]::Now,если переменной можно сразу указать данное значение.

    $date = [datetime]::now

    Или если имеется ввиду,что в лог записывается время.

    PS >  [system.DateTime]::Now >log.txt
    PS >  gc log.txt
    
    25 ноября 2011 г. 15:33:01
    PS >  $date = [datetime]::Parse((gc log.txt))
    PS >  $date
    
    25 ноября 2011 г. 15:33:01

     

    • Изменено KazunEditor 25 ноября 2011 г. 11:33
    25 ноября 2011 г. 11:17
    Отвечающий
  • Хочется выполнить следующий алгоритм. 

    Есть папка с файлами. В ней постоянно появляются новые.

    Необходимо копировать файлы из этой папки в другую с периодом времени 5 минут. При этом копироваться должны файлы, которые созданы за последние 5 минут.

    При этом возникло опасение что при сбое скрипта и его перезапуске файлы не скопированные но старше 5 минут не будут скопированы.

    Поэтому принято решение создать лог файл в него записать 25.11.2011 15:29:26 вот такую строчку (каждый раз перезаписывая при запуске скрипта)

    затем получить все файлы созданные после 25.11.2011 15:29:26 и скопировать. Это защитит от того, что при отказе скрипта не будут потом скопированы более старшие файлы.

    25 ноября 2011 г. 11:37
  • [datetime]::Parse((gc log.txt))
    25 ноября 2011 г. 11:43
    Отвечающий
  • помогло.

    Я пытался это сделать вот так

    выдавалась ошибка

    [datetime]::ParseExact($a,"dd.MM.yyyy hh:mm:ss",$null)

    25 ноября 2011 г. 11:57
  • помогло.

    Я пытался это сделать вот так

    выдавалась ошибка

    [datetime]::ParseExact($a,"dd.MM.yyyy hh:mm:ss",$null)


    Можно и так,только вместо hh - HH.

    PS >  [datetime]::ParseExact($a,"dd.MM.yyyy HH:mm:ss",$null)
    
    25 ноября 2011 г. 15:29:26
    

     

    • Помечено в качестве ответа NewFeofan 25 ноября 2011 г. 13:08
    25 ноября 2011 г. 12:02
    Отвечающий