Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
3
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

posted at

updated at

C#とPowerShellで遊ぶ

C#で出来るものをPowerShellで書く

C#実装できたものをPowerShellでもやってみる

プログラム

主な動作

  • *.mp3 に前方部分一致したファイルの一覧を表示する

動作条件と検索対象

  • コマンドライン引数の 第1個目の引数 を検索対象のディレクトリ場所とする
  • コマンドライン引数が無い場合は, My Musicフォルダ から検索する

C#

SearchMP3.cs
using System;
using System.IO;

namespace SearchMP3
{
    class Program
    {
        /// <summary>
        /// "*.mp3" ファイルを検索し表示
        /// </summary>
        /// <param name="args">コマンドライン引数</param>
        /// <example>ディレクトリにファイルが存在した場合はコンソールに表示</example>
        static void Main(string[] args)
        {

            string path = null;

            if (args.Length == 1)
            {
                // コマンドライン引数があるとき
                path = args[0];
            }
            else
            {
                // コマンドライン引数がないとき
                path = Environment.GetFolderPath(Environment.SpecialFolder.MyMusic);
            }

            // *.mp3に一致するファイルの取得
            string[] files = Directory.GetFiles(path, "*.mp3", SearchOption.AllDirectories);

            // ファイルパスの出力
            foreach (string file in files)
            {
                Console.WriteLine(file);
            }
        }
    }
}

PowerShell

プログラム

SearchMP3.ps1
<#
.SYNOPSIS
 "*.mp3" ファイルを検索し表示
.DESCRIPTION
 コマンドライン引数に指定したディレクトリのファイルが存在した場合はコンソールとウィンドウに表示
#>

if ($Local:args.Length -eq 1) {
    # コマンドライン引数
    $Local:path = $args[0]

} else {
    # MyMusicフォルダ
    $Local:path = [System.Environment]::GetFolderPath([System.Environment+SpecialFolder]::MyMusic)    
}

$Local:files = [System.IO.Directory]::GetFiles($Local:path, "*.mp3", [System.IO.SearchOption]::AllDirectories);

# コンソール出力
$Local:files | Write-Output

# 画面出力
$Local:files | Out-GridView -Title "*.mp3のファイル一覧"

PowerShellファイルの実行方法

C:\のフォルダから検索するには以下のようにして実行

PowerShell
> .\SearchMp3.ps1 "C:\"

実行できないとき

以下のサイトが参考になります。
http://qiita.com/tomoko523/items/df8e384d32a377381ef9

要するに、PowerShellの実行ポリシーを変更すればOK!

PowerShell(管理者権限で実行)
> Set-ExecutionPolicy RemoteSigned

2018/10/13 追記

管理者権限が不要で、ユーザー単位で実行ポリシーを変更できる方法があるようです。
詳しくは、本記事のコメントを参照ください。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
3
Help us understand the problem. What are the problem?