Fri, 13 Jan 2012 (平成24年) [長年日記]
_ PowerShell ワンライナー
"C" ,"D" | ForEach-Object {Set-Location "E:\drive_+$_+_backup".Replace("+",""); Get-ChildItem | Where-Object {$_.LastWriteTime -ge (Get-Date).AddDays(-1)} | Copy-Item -destination "Z:\ASUS WebStorage\user\MySyncFolder\drive_+$_+_backup\2012Q1\".Replace("+","")}
将来の自分のための解説
- $_ で
変数展開その時にパイプラインに渡されているオブジェクトの情報が文脈に沿った型で得られる。ただし、単純に "文字列" の中に書いてもダメみたい。なので、前後と + で連結(追記: 後ろだけでよさそう)して .Replace("+","") で詰めた(変数展開のためには空白でもよかったけど、後半のコピー先フォルダ名に空白が含まれて困ったので + を使用)。 - Get-ChildItem | Where-Object {$_.LastWriteTime -ge (Get-Date).AddDays(-1)} で当日更新されたファイルに絞れる。
さらに追加したいこと
- 2012Q1 の部分を Get-Date の結果をゴニョゴニョして生成したい。
(追記)たぶんできた。カッコ悪い……
"C" ,"D" | ForEach-Object {Set-Location "E:\drive_$_+_backup".Replace("+",""); Get-ChildItem | Where-Object {$_.LastWriteTime -ge (Get-Date).AddDays(-1)} | Copy-Item -destination "Z:\ASUS WebStorage\user\MySyncFolder\drive_$_+_backup\$(Get-Date -Format "yyyy\Q$([math]::ceiling(([int](Get-Date -Format %M))/3))")\".Replace("+","")}
参考記事