UpdateCopy の続き
以前に、UpdateCopyするスクリプトを書きましたが、訂正と追加があります。
訂正分ですが、UpdateCopyに失敗する場合がありました。
コピー先にファイルが存在していないと、絶対パスに変換時エラーになります。
上記のスクリプトを使って、フォルダごとUpdateCopyするスクリプト
param([String]$srcfile, [String]$dstfile)# 相対パスから絶対パスへ
$srcfile = Convert-Path $srcfile
# ファイルがないとエラーになる
if ([System.IO.File]::Exists($dstfile))
{
$dstfile = Convert-Path $dstfile
}[System.IO.File]::SetAttributes($srcfile, "Normal")
if ([System.IO.File]::Exists($dstfile))
{
[System.IO.File]::SetAttributes($dstfile, "Normal")
$srctime = [Syste.IO.File]::GetLastWriteTime($srcfile)
$dsttime = [Syste.IO.File]::GetLastWriteTime($dstfile)
if ($srctime -gt $dsttime)
{
[System.IO.File]::Copy($srcfile, $dstfile, $true)
}
}
else
{
[System.IO.File]::Copy($srcfile, $dstfile)
}
UpdateCopy.ps1 は最初のスクリプトをファイルにしたものです。
$dstpath = "コピー先のフォルダパス"
Get-ChildItem "コピー元にフォルダパス" | foreach (&_) {.\UpdateCopy.ps1 $_.fullname (Join-Path $dstpath $_.name)}
あるフォルダの中だけを別のフォルダにUpdateCopyするスクリプトです。
サブフォルダは、コピーしないので注意してください。
サブフォルダある場合は「-recurse」などのオプションを追加してください。
簡単に解説すると、Get-ChildItem(つまりdir)でフォルダのファイル一覧を取得する。
一覧をforeachで1つずつUpdateCopy.ps1 に引数で渡します。
第2引数には、コピー先のフォルダとコピー元のファイル名のみをジョインしたものを渡す。