スポンサーサイト

    上記の広告は1ヶ月以上更新のないブログに表示されています。
    新しい記事を書く事で広告が消せます。

    フォルダに対してクエリしたい!とおもったら。

    フォルダにたいしてクエリしたいと思ったら

    PowerShellを使いましょう。

    PowerShellとは?
     Microsoftが開発したスクリプト言語です。
     .netFramework2.0ベースでできていて、.netFrameworkのライブラリがそのまま使えます。
     各コマンドが返す者がオブジェクトになっているという代物で、パイプでコマンドをつないでいろいろやります。
     確か、Vista以上ではPowerShell2.0がデフォルトインストールされていて、
     PowerShell2.0からは、Windows Power Shell ISEというGUI環境が付いてきます。

    どう使うか?
    たとえば、
     フォルダAにあってフォルダBにないフォルダはど~れだ?
    という課題があったとして、フォルダ数がむっちゃ多かったら、目視で探すのいやですよね・・。
    (まあ、dirコマンドをファイルにリダイレクトして、できたファイルを比較っててもありますが・・。)
     PowerShellでやるとこうなります。

         dir フォルダAのパス -Name | Where-Object{ !(Test-Path('フォルダBのパス' + $_))}

    これ1行。
    便利でしょ。
    え、意味不明?まあ、そうかもしれません。
    これをC#で書いたらどうなるか。
    using System.IO;
        foreach (string path in Directory.GetDirectories("フォルダAのパス"))
        {
            if (!Directory.Exists(@"フォルダBのパス\" + Path.GetFileName(path)))
            {
                yield return path;
            }
        }
    

    これとほぼ同じ意味です。

    dir はDosコマンドのdirと同じ意味で、指定したフォルダの下にあるアイテムのリストを列挙します。
     実際にはPowerShellのコマンドは、動詞-名詞 という形のコマンドで、
     dir は Get-ChildItem のエイリアス(別名)です。(Get-Alias を実行すればエイリアスの一覧が見れます。)
    -Name はdirコマンドのオプションで、ファイルパスではなくファイル名を返します。
    dirが返すのはファイルパスのコレクション(今は-Nameをつけているのでファイル名のコレクション)
    で、それをパイプ(|←これ)を使って、Where-Objectコマンドへ渡しています。
    Where-Objectコマンドは、受け取ったコレクションを引数の式(ここでは{と}で囲まれたところが式)で評価してフィルタをかけます。式の結果がTrueになるアイテムだけをコレクションにして返します。
    引数の{と}で囲まれたところはスクリプトブロックで、普通にPowerShellのスクリプトが書けます。
    Test-Pathコマンドは、引数にわたされたパスが実在するかどうかをテストします。
    ここでは、フォルダBのパス+フォルダA傘下のフォルダの名前 でパスを作って実在するかどうかテストしています。
    !は否定なので、存在しないものだけをリストアップしていることになります。

    とまあこんな感じですね。
    コレクションが気軽に扱えるのと、パイプで結果が他のコマンドに渡せるので、
    なれると結構便利です。

    とはいえ、自分もまだフォルダやファイルをどうこうしたいときにしか使ってませんが・・。
    便利そうな使い方があれば随時メモっておこうかと思います。
    スポンサーサイト

    テーマ : プログラミング
    ジャンル : コンピュータ

    プロフィール

    ざっち

    Author:ざっち
    ざっちのーと
    ♪自由なSEのメモ帳です♪

    ざっちのスキル一覧
    ----------------
    上級(手足も同然!)
    ・.net FrameWork
    ・C#
    ・SqlServer
    ・VisualBasic6.0
    ----------------
    中級(だいたいOK!)
    ・WPF(XAML)
    ・Android
    ・WindowsMobile6.5
    ・HTML
    ----------------
    下級(や、やればできるさ!)
    ・PHP
    ・JavaScript
    ・SilverLight
    ・SQLite
    ・Python(だってjetCreaterが・・・)
    ・C++(OpenCVいじってみたくて・・・)
    ----------------
    最近のお気に入り
    ・WPF(XAML)
    ・Android
    ・GoogleAPI
    ----------------

    最近の記事
    月別アーカイブ
    カテゴリー
    夢見る羊さん
    地球の名言Ⅱ

    presented by 地球の名言

    Twitter...A

    Twitter < > Reload

    ブロとも申請フォーム

    この人とブロともになる

    ブログ内検索
    RSSフィード
    リンク
    上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。