2016-06-16 9 views
0

フォルダーから最大の番号のファイルをコピーできるようにするコマンドを探しています。PowerShellでファイル名に最大の番号のファイルをコピーします。

私は(私が必要とするいくつかのフィルタ付き)フォルダから最新ファイルをコピーするには、このコマンドを使用:ここで

Get-ChildItem "B:\" -Filter '*.exe' | Where Name -NotMatch '.*NoDB\.exe$' | Sort LastWriteTime -Descending | Select -First 1 | Copy-Item -Destination 'D:\' 

を私が持っているフォルダ構造です:

Release_OSInstaller_2015_CL287638x64_NoDB.exe 
Release_OSInstaller_2015_CL287638x64.exe 
Release_OSInstaller_2015_CL287337x64_NoDB.exe 
Release_OSInstaller_2015_CL287337x64.exe 

だから、私が必要Release_OSInstaller_2015_CL287638x64.exeをコピーするには、ファイルの名前が最大の番号287638であるためです。また、「NoDB.exe」パラメータを持つファイルはコピーされないようにする必要があります。

答えて

1

スクリプト内にPSObjectを作成すると、その番号をソートできます。 (ない場合は、正規表現を修正する必要があります)

次の例では、番号を取得するために正規表現を使用しており、それは数がCLを前置されていることを前提としています

Get-ChildItem -Filter *.exe | Where Name -NotMatch '.*NoDB\.exe$' | % { 
    New-Object psobject -Property @{ 
     No = [int]([regex]::Match($_.Name, '(?<=CL)\d+').Value) 
     Name = $_.FullName 
    } 

} | Sort No -Descending | Select -ExpandProperty Name -First 1 | Copy-Item -Destination 'D:\' 
+0

デイブので、そんなにありがとう!私はあなたのスクリプトを更新するだけでなく、ファイル名に最大の番号を持つファイルをコピーすることができるようになりました。 Get-ChildItem "C:\ Users \名Last Name \ Desktop" -Filter * .exe |どこに名前-NotMatch '。* NoDB \ .exe $' | %@ 新しいオブジェクトpsobject -Property @ { いいえ= [int]([regex] :: Match($ _。Name、 '(?<= CL)\ d +')の値) Name = $ _ FullName } }並べ替えなし - 小さくする| -ExpandProperty名を選択 - 最初の1 | Invoke-Item すばらしい!ありがとう、Dave! –

関連する問題