2017-10-04 40 views
0

私は特定のフォルダのすべてのサブフォルダ内で検索し、各サブフォルダから最新のファイルを毎日午前9時に新しいフォルダにコピーしたいと思います。そこで、フォルダAのサブフォルダa、b、c内を検索して、それぞれ最新のファイルをa、b、cで取り出し、3つすべてのファイルを外側のフォルダB(1つのフォルダ)に移動します。私はPowerShellを初めて使用しています。私は基本的にこれを使用することを試みたが、それはバックアップを作成します:Copy most recent file from folder to destinationPowerShellは各フォルダから最新のファイルを移動します

Clear-Host 
$ChildFolders = @('In_a', 'In_b', 'In_c') 

for($i = 0; $i -lt $ChildFolders.Count; $i++){ 

$FolderPath = "C:\FolderA\" + $ChildFolders[$i] 
$DestinationPath = "C:\FolderB\" [$i] 

gci -Path $FolderPath -File | Sort-Object -Property LastWriteTime -Descending | Select FullName -First 1 | %($_){ 
$_.FullName 
Copy-Item $_.FullName -Destination $DestinationPath 
} 
+0

をファイルが上書きされますか?それは別のファイルを上書きする可能性があります – ArcSet

+0

いいえ、すべて個別に – Sam109

答えて

0

が配列

に作成日でサブフォルダ内のすべてのファイル

ソートファイルを取得し、サブフォルダを取得します。

最初のエントリを取得します

宛先ディレクトリにファイルを移動します

ファイルのいずれかが同じ名前を持つことになります*これは、保存先のフォルダに同じ名前の

Function Get-LatestFiles($SourceFolder,$Destination){ 
    $Subfolders = Get-ChildItem $SourceFolder -Directory 
    [System.Collections.ArrayList]$SubFoldersExpanded = new-object System.Collections.ArrayList 
    Foreach($SubFolder in $SubFolders){ 
     $SubFolderExpanded = $Subfolder | %{(Get-ChildItem $_.FullName -File -Depth 1 | Sort-Object -Property CreationTime -Descending)} 
     if($SubFolderExpanded.Count -gt 0){ 
      $SubFolderExpanded[0] | %{Move-Item $_.FullName -Destination $Destination -force} 
     } 
    } 
} 
Get-LatestFiles -SourceFolder C:\test -Destination C:\test01 
+0

という名前を付けました - ありがとう - これのロジックを試してみてください。特定の時間にコマンドを実行することは可能ですか?例えば。午前9時? – Sam109

+0

Sceduled Tasksのように起動する必要があります。この解決策が働いている場合は、それをupvoteにしてください – ArcSet

+0

ありがとう!それはうまくいった! – Sam109

関連する問題