特定のフォルダの+ 14 日より古いすべてのファイルにアーカイブビットを追加するPowerShellスクリプトをセットアップしようとしています(例:C:\Temp
)。PowerShellで14日以上経過したファイルにアーカイブビットを追加
これはCMDで可能ですが、+a
ビットを+14 日以上のファイルにのみ追加する方法はありますか。
attrib +A C:\temp\*.*
特定のフォルダの+ 14 日より古いすべてのファイルにアーカイブビットを追加するPowerShellスクリプトをセットアップしようとしています(例:C:\Temp
)。PowerShellで14日以上経過したファイルにアーカイブビットを追加
これはCMDで可能ですが、+a
ビットを+14 日以上のファイルにのみ追加する方法はありますか。
attrib +A C:\temp\*.*
最初に属性が存在するかどうかを確認してから、条件に基づいて設定できます。 アーカイブビットを切り替えるには、Bitwise Exclusive Or(BXOR)オペレータを使用できます。
あなたはこのような何かを行うことができます。
$path = "C:\foldername"
$files = Get-ChildItem -Path "C:\folderpath" -Recurse -force | where {($_.LastwriteTime -lt (Get-Date).AddDays(-14)) -and (! $_.PSIsContainer)}
$attrib = [io.fileattributes]::archive
Foreach($file in $files)
{
If((Get-ItemProperty -Path $file.fullname).attributes -band $attrib)
{
"Attribute is present"
}
else
{
Set-ItemProperty -Path $file.fullname -Name attributes -Value ((Get-ItemProperty $file.fullname).attributes -BXOR $attrib)
}
}
はそれがお役に立てば幸いです。
にそれを単に変更しました).attributes -BXOR $ attrib) 'すでにアーカイブフラグが設定されている場合、アーカイブフラグを解除しませんか?つまり、if文があることは分かっていますが、論理的には '-bor'演算子を使いたいと思います。 –
@BaconBits No.属性を切り替えますが、ファイル内の値をインプレースで更新しません。ファイルの属性を変更するには、値を 'Attributes'プロパティに割り当てる必要があります。このコードは、属性が最初に存在しない場合にのみこれを行います。 –
@BaconBits:はい、Ansgarはこれについて正しく説明しています。最初のものが空の場合にのみ切り替えます。 –
は、単純に14日より古いファイルをフィルタリングし、その属性に "アーカイブ" を追加します。
申し訳$threshold = (Get-Date).Date.AddDays(-14)
Get-ChildItem 'C:\Temp' | Where-Object {
-not $_.PSIsContainer -and
$_.LastWriteTime -lt $threshold -and
-not ($_.Attributes -band [IO.FileAttributes]::Archive)
} | ForEach-Object {
$_.Attributes += 'Archive'
}
'$ _。Attributes + = 'Archive''はアーカイブが既に設定されている場合はうまくいきますか? 'FileAttributes.Archive + FileAttributes.Archive' =' FileAttributes.Device'。私はそれをテストするときに属性を 'FileAttributes.Normal'(すなわち、unset archive)に設定しているようです。 '$ _。Attributes = $ _。Attributes -bor [System.IO.FileAttributes] :: Archive'が好きです。 –
@BaconBitsああ、drat。私は思っていましたが、明らかに '+ ='はフラグをトグルします。つまり、その属性の存在を「Where-Object」フィルタに追加することで、簡単に解決できます。ヘッドアップをありがとう。 –
私は(は、Get-ItemProperty $ file.fullname( '+ A :) – user2602460