2017-09-08 5 views
0

フォルダには1年ほど前に処理されたファイルが70,000件あり、そのLastWriteTimesはすべて/ mm/dd/2016からです。出力ファイルのイメージを更新するため、これらのファイルをすべて再処理する必要がありました。ファイルは2つの別個のディレクトリにありますが、まったく同じファイル名を持っています。ファイルLastWriteTimeを別のファイルに設定する最後の書き込み時間

私のエンドユーザは、新しく処理されたすべてのファイルを更新して、LastWriteTimeを古い処理済みファイルの内容に変更したいと思っています。これは歴史的な検索目的のためです。

Powershellを使用して新しいフォルダ($ dest)をスキャンし、新しいファイルLastWriteTimeを更新して古いファイルLastWriteTimeに一致させたいとします。私のパワーシェルは非常に錆びていて、iveは固まっていて、それによって得ることができず、グルの助けを願っています。

ここに私が開発したコードブロックがあります。

$src = "C:\Users\UserName\Desktop\old" 
$dest = "C:\Users\UserName\Desktop\new" 

Get-ChildItem -Path $src -Filter *.pdf -Recurse | ForEach-Object { 

    $nextName = Join-Path -Path $dest -ChildPath $_.name 

    if (Test-Path -LiteralPath $nextName) 
    { 
     Set-Item $dest.LastWriteTime = $src.LastWriteTime 
    } 

} 
+1

(未テスト)これを試してみてください。LastWriteTime =(ゲット・アイテムの "D:\パス\ OLDFILE.TXT")。LastWriteTime' –

+0

ありがとうBillは、私が探していた解決策に見えます。 – Govna

+0

ファイルはすでに '\ new'に存在しますか?そうでない場合は、あなたがやっているよりも効率的な方法があります。 – TheIncorrigible1

答えて

1

サブフォルダに再帰した後は、アプローチは機能しません。
は(ゲット・アイテムの "D:\パス\のNEWFILE.TXTを") `

$src = "C:\Users\UserName\Desktop\old" 
$dest = "C:\Users\UserName\Desktop\new" 

Get-ChildItem -Path $src -Filter *.pdf -Recurse | ForEach-Object { 
    $NewFullName = $_.Fullname -replace [RegEx]::Escape($src),$dest 
    if (Test-Path -LiteralPath $NewFullName) { 
     (Get-Item $NewFullName).LastWriteTime = $_.LastWriteTime 
    } 
}  
+0

それはすべての助けのおかげで、トリックでした。 – Govna

関連する問題