クリエイター手抜きプロジェクト[629]シェル・コマンド編 PowerShellで連番フォルダを作成する
── 古籏一浩 ──

投稿:  著者:



今回は、PowerShellを使って連番フォルダ・ランダムフォルダを作成します。Windows 7/10では標準で入っていますので、コマンドを入力すればそのまま使えます。

PowerShellはLinuxやMacにもインストールできます。インストールしてしまえば、MacでもWindowsでもLinuxでも、PowerShellのコマンドを使うことができます。

ちなみに、Windows 10でbashなどUNIX系のシェルを使いたい場合は、Windows 10のWindows Sub Layerを利用しUbuntu等のUNIX系OSをインストールします。Windows 10でUNIX系のシェルを学習したい人にとっては便利でしょう。





Windows Sub Layerは、最新版のWindows 10にアップデートしてあれば使うことができます。

・Windows 10 用 Windows Subsystem for Linux のインストール ガイド
https://docs.microsoft.com/ja-jp/windows/wsl/install-win10


・Linux 用 Windows サブシステムとは
https://docs.microsoft.com/ja-jp/windows/wsl/about


Macではこれまで標準のシェルを何度か変えてきています。古くはtcsh、その後は業界標準のbash、そして最新のCatalinaではzshが標準のシェルとなっています。

どのシェルを使うかは、システム環境設定のユーザーのログイン項目の詳細で設定できるようになっています。ただ、PowerShellを入れてもログイン項目には出てきません。このためPowerShellを使う場合は、PowerShell.appのアプリケーションを起動しないといけません。

まずはPowerShellで連番フォルダを作成します。これは以前にもやりましたので、説明は省略します。以下のコマンドを入力すると、1から10までの連番フォルダを作成します。1..1000とすると、1から1000までのフォルダが作成されます。なお、New-Itemはnew-itemのように全部小文字でも構いませんし、大文字小文字が混在しても動作します。

1..10 | %{New-Item $_ -ItemType Directory}
1..10 | %{mkdir $_}

連番フォルダでも01、02のように先頭に0を付けたい場合もあります。この場合は$_の部分を"0$_"にします。必ず"で囲んでください。以下の場合、10は010となってしまいますが、とりあえず気にしないでください。後で説明するコマンドで解消します。

1..10 | %{New-Item "0$_" -ItemType Directory}
 または
1..10 | %{mkdir "0$_"}

なお、0でなく他の文字にすることもできます。"Sample-$_"とするとSample-1、Sample-2...Sample-10のようになります。

1..10 | %{New-Item "Sample-$_" -ItemType Directory}
 または
1..10 | %{mkdir "Sample-$_"}

010でなく2桁の場合は10にするにはtoString()を使います。

1..10 | %{New-Item "$($_.toString('00'))" -ItemType Directory}
または
1..10 | %{mkdir "$($_.toString('00'))"}

3桁なら以下のようになります。toString('000')の000が桁数なので、toString('00000')とすると5桁の数値になります。

1..108 | %{New-Item "$($_.toString('000'))" -ItemType Directory}
または
1..108 | %{mkdir "$($_.toString('000'))"}

他にも以下のような書き方もあります。0:D3の3が桁数になっています。0:D5とすると5桁の数値になります。

1..10 | %{New-Item ("Sample-{0:D3}" -f $_) -ItemType Directory}
または
1..10 | %{mkdir ("Sample-{0:D3}" -f $_)}

フォルダ名をランダムな数値にすることもできます。PowerShellでは乱数を返すGet-Randomがあります。コマンドからGet-Randomとすると、ランダムな値が表示されます。これをフォルダ名に使用するには以下のようにします。

1..10 | %{New-Item $(Get-Random) -ItemType Directory}
または
1..10 | %{mkdir $(Get-Random)}

ただ、生成される乱数の範囲が広くて困ることもあります。乱数の範囲を指定するには、Get-Randomの後に数値を指定します。Get-Random 100とすると1から999までの乱数になります。最小値を指定することもできます。

最小値は-minimumの後に指定します。同時に最大値を指定する場合は-maximumの後に指定します。なお、生成される乱数は最大値より1少ない値になりますので注意してください。以下の場合だと100〜999の範囲の乱数になります。

Get-Random -minimum 100 -maximum 1000

これを利用して、以下のようにオプションを指定すると、100〜999までのランダムなフォルダを作成することができます。

1..10 | %{New-Item $(Get-Random -minimum 100 -maximum 999) -ItemType Directory}
1..10 | %{mkdir $(Get-Random -minimum 100 -maximum 999)}

それで、MacのPowerShellで上記のコマンドを実行すると、乱数幅が広いのに、かなりの高確率で同じ値が生成されてしまいます。重複する値が生成された場合、すでにフォルダがあるというエラーが表示されます。案外と疑似乱数の精度がよくないのかもしれません。


【古籏一浩】openspc@alpha.ocn.ne.jp
http://www.openspc2.org/


一日に何台同じ車種の車を見ることができるか? ということで、昔はプリウスだったけど、今はスズキのHUSTLERがターゲットに。それで、なぜかこの車を見つけるたびに、怪しげな替え歌(モスラの替え歌)が流れるという、謎な状態に……。

♪HUSTLERや、HUSTLERや

・HUSTLER
https://www.suzuki.co.jp/car/hustler/


自宅周辺でも一日に10台近くは見たりします。乗ってる人多いみたいで。

・創って学ぼうプログラミング
https://news.mynavi.jp/series/makeprogram


・8K/4K/ハイビジョン映像素材集
http://www.openspc2.org/HDTV/


・クリエイター手抜きプロジェクト
http://www.openspc2.org/projectX/