Powershellは「CUI(Character User Interface)」を利用可能にするスクリプト言語です。
スクリプト言語は、「スクリプトファイル」として知られるファイルを実行できます。Powershellの場合、拡張子は「.ps1」です。ファイルがPATHに追加されていれば、そのファイルをまるでオリジナルのコマンドのように使用できるようになります。
この記事では、Linuxの「mkdir」のように連番でディレクトリを作成できるスクリプトファイルの作り方を紹介し、WindowsでLinuxのmkdirを再現します。
【前準備】
1.CUIとは?
CUIは「character-based user interface(文字ベースUI)」の略で、文字を用いてコンピュータを操作する方法を指します。詳細については、以下の記事をご覧ください。

2.Powershell 7 とは?
この記事では「Powershell 7」を使用します。以下のコマンドをPowershellのターミナルに入力することで、Powershell 7をインストールできます。
winget install --id Microsoft.Powershell --source winget # Powershell 7 をインストール別のインストール方法については、以下をご覧ください。
スクリプトファイル(.ps1)とは?
スクリプトファイルは、拡張子が「.ps1」であるファイルを指します。このファイルに特定の処理を記述し、Powershellを開いて./ファイル名.ps1と入力することで実行できます。
例として、「hello world !」と表示されるスクリプトファイルを作成してみましょう。ファイル名は「hello.ps1」とします。
# hello.ps1
Write-Host "hello world !"以下のように、実行できました。
PS C:\Users\user\テスト> ./hello.ps1
hello world !スクリプトファイル(.ps1)をオリジナルコマンドのように使う方法
スクリプトファイルをPATHに通すと、スクリプトファイルをまるでオリジナルのコマンドのように実行できます。先ほどのhello.ps1を「hello」とだけで実行できるように設定します。
方法は簡単です。「PATHが通っているフォルダにスクリプトファイルを置く」だけです。
今回はC:\Users\user\scriptにPATHを通し、そこにhello.ps1を配置することにします。
C:\Users\user\Documents\WindowsPowerShell\profile.ps1を作成し、以下のコードを記述します。
# C:\Users\user\Documents\WindowsPowerShell\profile.ps1
$env:path +=';C:\Users\user\script' # 「script」にスクリプトファイルを格納すると実行できる上記は、C:\Users\user\scriptにPATHを通すという意味です。これにより、「hello」とだけ入力することでファイルが実行されるようになりました。
Powershellを再起動し、「hello」と入力してください。
PS C:\Users\user\テスト> hello
hello world !スクリプトファイルが同じフォルダになくても実行されていることが分かります。
PATH通しについて詳しく知りたい方は、以下の記事を御覧ください。

Linuxのようなmkdirを作る!!
では、本題に入ります。Linuxのmkdirのような振る舞いをするmkdirs.ps1を作成しましょう。
1.mkdirとは?
mkdirは、「make directory」の略で、新しいフォルダを作成するためのコマンドです[1]。mkdir フォルダ名と入力すると、フォルダが現在のディレクトリに新しく作成されます。
実は、Powershellではmkdirは初めから使用可能です。言い換えれば、Powershellには組み込み関数としてこの機能が組み込まれています。
mkdirと入力すると、内部的にはNew-Item -Type Directoryが実行されるように設定されています。
PS C:\Users\user\テスト> mkdir test1
    Directory: C:\Users\user\テスト
Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d----   2024/02/18 日曜日     1:15                test1
PS C:\Users\user\テスト> New-Item -Type Directory test2
    Directory: C:\Users\user\テスト
Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d----   2024/02/18 日曜日     1:15                test2
上記を見ると、mkdirとNew-Item -Type Directoryが同じ処理をしていることが分かります。詳細については、以下をご覧ください。
2.LinuxとWindowsのmkdirの違いとは?
mkdirの特徴は、「連番のフォルダを作成できる」ことです。mkdir {開始番号..終了番号}とすると、その数字の範囲内にフォルダが作成されます。
user@PC名 MINGW64 ~/テスト
$ mkdir {1..5}
user@PC名 MINGW64 ~/テスト
$ ls
1  2  3  4  5しかし、Powershellのmkdirは先程確認した通り、実際には「New-Item -Type Directory」のエイリアスであるため、このような機能を直接サポートしていません。以下のように試みるとエラーが発生します。
PS C:\Users\user\テスト> mkdir {1..5}
mkdir: Cannot evaluate parameter 'Path' because its argument is specified as a script block and there is no input. A script block cannot be evaluated without input.Powershellで上記と同じように連番の作成を行うには、mkdir (1..5 | % { "{0:D2}" -f $_} )のように記述します。
PS C:\Users\user\テスト> mkdir (1..5 | % { "{0:D2}" -f $_} )
    Directory: C:\Users\user\テスト
Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d----   2024/02/18 日曜日     1:15                01
d----   2024/02/18 日曜日     1:15                02
d----   2024/02/18 日曜日     1:15                03
d----   2024/02/18 日曜日     1:15                04
d----   2024/02/18 日曜日     1:15                05
しかし、これはLinuxのmkdirよりも手続きが煩雑です。そのため、Linuxの「mkdir」のようにmkdir {開始..終了}だけで簡単に連番を作成するスクリプトファイルを作成します。
Powershellで連番を作成する方法に興味がある方は、以下をご覧ください。
3.Linuxのmkdirのように連番を作成する
mkdirs.ps1という名前のスクリプトファイルを作成し、以下のコードをコピーしてください。
# mkdirs.ps1
Param(
    [String]$arg1="",
    [String]$arg2="",
    [String]$arg3=""
) 
if ("$arg1" -eq "") {
    Write-Host "`n引数がありません`nアーカイブする対象を引数に渡してください`n" -ForegroundColor 'Red'
    pause
    exit
}
try {
    $ErrorActionPreference = "Stop"
    if($arg1.Contains("..")) {
        $num = $arg1.split("..")
        $arg1 = "{0:D2}"
    }
    if($arg2.Contains("..")) {
        $num = $arg2.split("..")
        $arg2 = "{0:D2}"
    }
    if($arg3.Contains("..")) {
        $num = $arg3
        $arg3 = "{0:D2}"
    }
    $mozi = $arg1 + $arg2 + $arg3
    mkdir ($num[0]..$num[1] | % { $mozi -f $_} )
} catch {
    Write-Host $_ -ForegroundColor "Red" # catch内の例外情報は、「$_」変数でアクセスできる。
} finally {}
その後、Powershellを再起動し、mkdirs {1..5}と入力してください。
PS C:\Users\user\テスト> mkdirs {1..5}
    Directory: C:\Users\user\テスト
Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d----   2024/02/18 日曜日     1:16                01
d----   2024/02/18 日曜日     1:16                02
d----   2024/02/18 日曜日     1:16                03
d----   2024/02/18 日曜日     1:16                04
d----   2024/02/18 日曜日     1:16                05
これで、WindowsでもLinux風に連番のフォルダを簡単に作成できるようになります。
まとめ
この記事では、まるでLinuxの「mkdir」のように連番作成できるスクリプトファイルの作り方をまとめました。
Powershellではデフォルトでmkdirが使用可能ですが、Linuxのものとは異なるため連番作成のコマンドが異なります。
そこで、スクリプトファイルを作成することでWindowsでもLinuxのmkdirのように簡単に連番作成ができるようにしました。
Windowsの連番作成コマンドは少し煩雑なので、このスクリプトを利用することでその手間を解消できれば幸いです。

