2011年7月17日日曜日

PowerShellでファイルをゴミ箱に削除する関数を作った。

最近、PowerShellを使っている。
サーバー管理というよりは、テキストファイルの結合・分割、QRコードの一括作成、PDFの結合なんかといったファイル管理にもっぱら活用している。
PowerShellは上記のような作業をかんたに定型化することができるし、.NET FrameWorkで機能を拡張することもできるので、いろいろと重宝している。

そんな便利なPowerShellさんだが、ファイルの削除でゴミ箱を利用することができない。
Remove-Itemでファイルを削除すると、ファイルが復元できなくなる。

しかし、特定のフォルダの集合の中にある、特定のファイル名を持ったファイルだけを選んで削除するなんてことは、エクスプローラーではなかなか難しい。というか不便だ。
というわけで、PowerShellでファイルをゴミ箱送りにするための関数をつくってみた。

ゴミ箱の扱いには「Microsoft.VisualBasic 名前空間」のFileSystemクラスを利用するようだ。
VB.NET互換用に用意されているのかな?
他に代替案が見つからなかったので、今回はこれを使うとしよう。
できたのが下のスクリプト。
拡張子「.ps1」のテキストファイルに保存して、PowerShellでファイルを読みこめば、関数が利用できるようになる。


function global:Dust-Shoot
{
    [CmdletBinding()]
    param (
        #パラメーターを設定。複数の型を許容する記述の仕方がわからない
        [Parameter(parametersetname="file", position=0)]
        [String] $Path,
        [Parameter(ParameterSetName="Array", position=0, ValueFromPipeline=$true)]
        $InputObject
    )

    process
    {
        #アセンブリを読み込む。
        Add-Type -AssemblyName Microsoft.VisualBasic

        #フォルダとファイルを削除する
        function DustToRecycle ($file)
        {
            #フォルダとファイルを判定。
            if (Test-Path $file -PathType Container)
            {
                [Microsoft.VisualBasic.FileIO.FileSystem]::DeleteDirectory($file,
                    [Microsoft.VisualBasic.FileIO.UIOption]::OnlyErrorDialogs,
                    [Microsoft.VisualBasic.FileIO.RecycleOption]::SendToRecycleBin)
            }
            elseif (Test-Path $file -PathType Leaf)
            {
                [Microsoft.VisualBasic.FileIO.FileSystem]::DeleteFile($file,
                    [Microsoft.VisualBasic.FileIO.UIOption]::OnlyErrorDialogs,
                    [Microsoft.VisualBasic.FileIO.RecycleOption]::SendToRecycleBin)
            }
            Write-Host $file "をゴミ箱に転送しました。"
        }

        Switch ($PsCmdlet.ParameterSetName)
        {
            "file"
            {
                if (!(test-path -Path $Path))
                {
                    Write-Host $Path "は存在しません。"
                }
                else
                {
                    $fullpath = Convert-Path $Path
                    DustToRecycle $fullpath
                }
            }
            "Array"
            {
                #オブジェクトの型を判定。もう少しまともなやり方はあるのかな?
                if ($InputObject.GetType().Name -eq "Object[]")
                {
                    foreach ($i in $InputObject)
                    {
                        $fullpath = $i.fullname
                        DustToRecycle $fullpath
                    }
                }
                else
                {
                    $fullpath = $InputObject.FullName
                    DustToRecycle $fullpath
                }
            }
        }
    }
}
なんかパラメーターの設定がうまくいかなくて、変数の名前の指定が必須となってしまった。ここらへんはどうしたら良いかよくわからん。

PowerShell 2.0以降は、「高度な関数」という機能で、関数をコマンドレットみたいに動作させることができるらしい。上記のスクリプトも、この「高度な関数」機能を使っているので、パイプライン経由でファイルを削除することも可能だ。
たとえば、
gci ~/Desktop/* *.pdf -Recurse | dust-shoot
なんてコマンドで、デスクトップとサブフォルダ内のPDFファイルを一括削除できる。
このくらいならエクスプローラー使っても大して手間は変わらないけれど……。

[参考にしたWebサイト]
http://msdn.microsoft.com/ja-jp/library/microsoft.visualbasic.fileio.filesystem.aspx
http://codezine.jp/article/detail/4941

2011年2月12日土曜日

ATOK2011が発売された。

ATOK 2011がようやく発売された。

昨年はGoogle日本語入力という強力なライバルの登場もあってか、大幅な機能アップが図られている。そのポイントのひとつとなるのが「ATOK Sync」だ。Web企業であるGoogleの十八番を奪うような、活かしたサービスに改良されている。

これまでのATOK Syncはユーザー辞書の同期だけしかできなかった(気がする)が、ATOK 2011にアップデートされるにあたり、ATOK自体の環境設定やキーバインド、確定履歴なんかも同期できるようになっている。

ついでに、1年間は同期用のサーバーが無料で利用できるというおまけ付き。ちょっと前話題になったフリーミアム戦略だな。ぼくも「有料」に引っかかって今まで利用をためらっていたので、これはいい戦略だと思う。

ただ、Googleものちのち同じようなサービスを提供してくるはず。しかも無料で提供してくるだろう。方やATOKで同様の機能を1年後も引き続き使うには、月額525円が必要となる。ぼくはATOKの毎月315円支払って月額版を利用しているので、合わせると月額840円支払うことになる。

今回先手を打てたのはよいが、1年後840円支払ってまで使いたいかといわれると少々微妙ではある。1年間使えば1万円近い値段となるのだから。まあ、1年あればJustsystemの方針も少々変わるかもしれない。とりあえずはATOK 2012が登場するまでじっくり使ってみようと思う。

毎年更新するなら、安く使える「月額版」か、「スターターパック 1Year版」がおすすめ。

2011年1月1日土曜日

シャープペンシルの芯、なに使ってる?

ぼくは三菱鉛筆の「Hi-uni」だ。芯の濃さは3Bと決めている。


Hi-uniのいいところは、筆記したときに紙に吸い付くような、どこが湿り気のある筆記感の得られるところだ。"柔らかい"といったほうがわかりやすいかもしれない。

最近、筆圧が弱くなって、鉛筆で字を書くのがつらくなってきたというおっちゃんに特におすすめしたい。もうおっちゃんになりつつあるぼくも、編集の仕事を始めてからはずっとこれで通している。

ボールペンは、独特なリフィルを使っているものが多いので、軸にあわせて使いたいインクを選ぶということがなかなかできない。一方、シャープペンシルの場合は、メーカーごとに企画があるわけではないので、好きな芯を好きな軸(ペン)で自由に使える。

芯を替えるだけで、お気に入りのペンの書き味がぐっと向上するなんて、ちょっと魅力的に感じはしないだろうか。


ちょっとお値段は張るし(といっても315円)、大きな文具店に行かないと手に入らないこともあるのが玉に瑕ではある。

2010年12月16日木曜日

記念すべき100件目

いつの間にか100件目だ。
僕は全然書いていないが、にったけのほうががんばって書いている。

なんか今年はずっと忙しかったこともあって、気づいたらもう12月。
1年がもう終わろうとしている。

今年は編集のことがいろいろ勉強できて、なかなか有意義な一年となった。
来年は新しいジャンルの仕事や趣味にもチャレンジしてみたい。

年末は温泉でゆっくり体を休めたいなあ。

2010年12月3日金曜日

そういえば

ここ最近全然本を読んでいない。
いくつか購入しておいたものはあるんだが、カバンの中にいれっぱななしだ。
最後に読んだのは『フルメタル・パニック!』の最終巻だな……。

人気の投稿