Windowsを使用している皆さんへ、Powershellをご存知ですか? 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の連番作成コマンドは少し煩雑なので、このスクリプトを利用することでその手間を解消できれば幸いです。