Help us understand the problem. What is going on with this article?

C#とPowerShellで遊ぶ

More than 1 year has passed since last update.

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 追記

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

konta220
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