none
recurse copy RRS feed

  • Вопрос

  • Есть каталог C:\DATA\IN. В каталоге содержится несколько подкаталогов MON,WED,FRI. В этих каталогах каталоги с хаотичным названием, содержащие файлы, отличающиеся только суффиксом (timestamp). К примеру

    C:\DATA\IN\MON\TST\TST_123.xls
    C:\DATA\IN\MON\TST\TST_345.xls
    C:\DATA\IN\FRI\DEMO\DEMO_123.xls
    C:\DATA\IN\FRI\DEMO\DEMO_345.xls

    Необходимо копировать последние файлы из каталогов с хаотичным названием в D:\OUT\[MON,WED,FRI]- тем самым получае только последние версии файлов. На текущий момент это делается тремя скриптами. Каждый скрипт обрабатывает MON,WED и FRI.

    Можно ли оптимизировать данную структуру для обработки одним скриптом, который будет последовательно обрабатывать все три каталога? Т.е задаем только C:\DATA\IN, а дальше уже ...


    $Source = "C:\DATA\IN\"
    $Destination = "D:\OUT\"
    $FolderName = Get-ChildItem $Source | %{$_.Name}

    foreach ( $a in $FolderName ) {

    $Data = Get-ChildItem -recurse $Source\$a | sort LastWriteTime -desc | select -first 2 | %{$_.FullName}
    foreach ( $b in $Data ) {

    if ( Copy-item $a $Destination\ -Force -PassThru -EA SilentlyContinue) {}
    else {

    }

    }
    }

    Но при таком методе все сваливается в D:\OUT\, а необходимо в D:\OUT\[MON,WED,FRI]

    Есть ли решение? Заранее спасибо

    16 июля 2013 г. 15:52

Ответы

  • $Source = "C:\DATA\IN\"
    $Destination = "D:\OUT\"
    
    Get-ChildItem $Source | Where {"MON","WED","FRI" -eq $_.Name} | Foreach {
    	$folder = $Destination+$_.Name
    	Get-ChildItem -Recurse $_.fullname -Include *.xls | sort LastWriteTime -desc | select -first 2 | 
    		Copy-Item -Destination { md $folder -Force } -Force
    }



    • Изменено KazunEditor 17 июля 2013 г. 5:29 -Force
    • Помечено в качестве ответа KazunEditor 22 июля 2013 г. 6:05
    17 июля 2013 г. 5:26
    Отвечающий