#PSCXTip Manipulating file attributes

When dealing with files under source control it is quite often useful to be able to make a bunch of files readonly or writable in bulk. You can do this fairly easily in PowerShell 3.0:

PS> Get-ChildItem . –Recurse –File | Foreach {$_.IsReadOnly = $false}

However the PowerShell Community Extensions (1.2 or higher) provides an even easier way to do this common operation with two commands Set-ReadOnly (alias sro) and Set-Writable (alias swr). The above operation simplifies to this:

PS> Get-ChildItem . –Recurse –File | Set-ReadOnly

If you only need to make a set of files in the current directory readonly or writable, you can use this form:

PS> Set-Writable *.cs

Or using the aliases:

PS> swr *.cs; sro *.csproj

One final common file manipulation is to “touch” a file to set its last write time to the current time (or any specified time). This can be done with the PSCX command Set-FileTime (alias touch) e.g.:

PS> Set-FileTime *.cs

Or using the alias:

PS> touch *.cs

If you need to set the last write time to a specific time you can use the Time parameter e.g.:

PS> Get-ChildItem . –r –File | Set-FileTime -Time ((Get-Date).AddDays(-14))

By default Set-FileTime updates the last write and last accessed times. You can specify the –Created switch to update the file’s creation time.

Note: There are many more useful PowerShell Community Extensions (PSCX) commands. If you are interested in this great community project led by PowerShell MVPs Keith Hill and Oisin Grehan, give PSCX a try at http://pscx.codeplex.com.

Share on: