[PowerShell] 沢山のフォルダを自動で作ってくれるロボットできたよー\(^o^)/
沢山のフォルダを自動で作ってくれるPowerShell
「autoCreateFolders.ps1」書きました。
使い方は簡単。
1.まずこんな感じの「FolderList.txt」を作成します。
これは、フォルダツリーをタブで表したものです。
このファイルをインプットとして、このフォルダ構成の通りにフォルダを作成してくれます。
2.沢山のフォルダを作りたい場所に、ps1のファイルとFolderList.txtを置きます。
3.次に、PowerShellを起動します。実行権限はゆるくしておいてくださいね。
4.PowerShellのウィンドウにps1ファイルをドラッグ・アンド・ドロップしてEnterで実行します。
5.以下のように表示されれば成功です。フォルダができてるか確認してください。
4人のフォルダができています。
ちゃんとあのこの彼氏は三人目までいますね。
おかあさんの晩御飯も急遽炊込み御飯になっています。
もちろんお父さんに下町のナポレオンはありません。
かわいそうですね。
以下がプログラムです。
ちゃんと動くようになったので今日は黒霧島を飲もうと思います。
頑張った自分へのご褒美()
「autoCreateFolders.ps1」書きました。
使い方は簡単。
1.まずこんな感じの「FolderList.txt」を作成します。
これは、フォルダツリーをタブで表したものです。
このファイルをインプットとして、このフォルダ構成の通りにフォルダを作成してくれます。
2.沢山のフォルダを作りたい場所に、ps1のファイルとFolderList.txtを置きます。
3.次に、PowerShellを起動します。実行権限はゆるくしておいてくださいね。
4.PowerShellのウィンドウにps1ファイルをドラッグ・アンド・ドロップしてEnterで実行します。
5.以下のように表示されれば成功です。フォルダができてるか確認してください。
4人のフォルダができています。
ちゃんとあのこの彼氏は三人目までいますね。
おかあさんの晩御飯も急遽炊込み御飯になっています。
もちろんお父さんに下町のナポレオンはありません。
かわいそうですね。
以下がプログラムです。
ちゃんと動くようになったので今日は黒霧島を飲もうと思います。
頑張った自分へのご褒美()
#-----------------------------------------------------------
# Author :TearTheSky(てあざすかい)
# ProgramName:autoCreateFolders
# Discription:「FolderLists.txt」にかかれてあるフォルダ構成
# の通りにフォルダを自動で作成します。
#-----------------------------------------------------------
#FolderLists.txtは定数として定義するので変更可能です
set-variable -name FolderLists -value "FolderLists.txt" -option constant
#-----------------------------------------------------------
# フォルダ作成関数
#-----------------------------------------------------------
Function Create-Folder( $folderName )
{
if(Test-Path $folderName) {
}
else {
$currentDirectory = Get-Location
$createLocation = "$currentDirectory\$folderName"
[void]$result = New-Item -type directory $createLocation
}
}
#-----------------------------------------------------------
# 本編
#-----------------------------------------------------------
#このファイルがいる場所へカレントディレクトリを移動
$FilesPath = Split-Path $myInvocation.MyCommand.path
Set-Location $FilesPath
#FolderLists.txtの存在確認
$resultCheckFileExist = Test-Path -path $FolderLists
if($resultCheckFileExist -eq $false) {
#いない場合は怒って終了
Write-Host "そんなファイルは存在しません!"
return
}
else {
#存在する場合はファイルを読み込み
$Input = Get-Content ".\$FolderLists"
#現在いる場所を示す変数$currentPath
$currentPath = $filesPath
#このファイルがある場所を階層0とした時の
#今いるフォルダ階層を示す変数$nowDepth
$nowDepth = 0
#配列の要素を追加する場合は += 演算子を利用しなければならない
$lastPlace = @()
$lastPlace += Get-Location | ForEach-Object{$_.Path}
#$Inuputはテキストファイルそのものなのでそれを1行ずつ処理する
ForEach($aLine in $Input) {
#読み込んだ1行にかかれてあるフォルダ名でフォルダを
#作成すべき階層を示す変数$depth
$depth = 0
#階層ごとの最後にいた場所を示す配列変数$lastPlace
$lastPlace[$nowDepth] = Get-Location | ForEach-Object{$_.Path}
#先頭のタブの数を確認し、それを階層とする
for($index = 0; $aLine[$index] -eq "`t"; $index++) {
$depth++
}
#----------------------------------
#現在の階層との比較
#----------------------------------
#同じ階層の場合
if($depth - $nowDepth -eq 0) {
#タブ文字を取っ払う
$createName = $aLine.SubString($depth)
#フォルダをつくるよ!
Create-Folder($createName)
#作ったフォルダを次行くべきフォルダに設定
$nextPath = $currentPath + "\" + $createName
}
#1つ下の階層の場合
elseif($depth - $nowDepth -eq 1) {
#次行くべきフォルダへ移動する
Set-Location -path $nextPath
#移動したので現在のフォルダパスとして今いる場所を設定
$currentPath = Get-Location | ForEach-Object{$_.Path}
#1つ下の階層に移動したはずなので階層をインクリメント
$nowDepth++
#タブ文字を取っ払う
$createName = $aLine.SubString($depth)
#フォルダをつくるよ!
Create-Folder($createName)
#次行くべき場所を設定(さっき作ったフォルダ)
$nextPath = $currentPath + "\" + $createName
#ここにいたことを$lastPlaceに記録する
$lastPlace += Get-Location | ForEach-Object{$_.Path}
}
#階層が今いる場所より上だった場合(階層を戻る)
elseif($depth - $nowDepth -lt 0) {
#戻るべき場所へ戻る。戻ったら…
Set-Location $lastPlace[$nowDepth - ($nowDepth - $depth)]
#タブ文字を取っ払う
$createName = $aLine.SubString($depth)
#フォルダをつくるよ!
Create-Folder($createName)
#現在いる場所の階層数を$nowDepthに設定
$nowDepth = $nowDepth - ($nowDepth - $depth)
#移動したので現在のフォルダパスとして今いる場所を設定
$currentPath = Get-Location | ForEach-Object{$_.Path}
#次行くべき場所を設定(さっき作ったフォルダ)
$nextPath = $currentPath + "\" + $createName
#ここにいたことを$lastPlaceに記録する
$lastPlace[$nowDepth] = Get-Location | ForEach-Object{$_.Path}
}
#どれにも当てはまらない場合
else {
#エラーメッセージを出力してスキップ
write-host "フォルダ名:" + $aLine
write-host "フォルダが作成できませんでした。階層指定が正しくない可能性があります。"
Get-Location
}
}
#最後にこのファイルがある場所へ戻って終了
Set-Location $FilesPath
}
最近いいちこすごっくオシャレですよね。広告とか。
実はまだ飲んだことがない。
今度買ってみようかな。
:2012/07/09 追記;
・定義ファイルの説明を追記
・プログラムの一部を修正
定義ファイル「FolderLists.txt」が存在しない場合の出力が
Out-Stringでは正常に動作しない。
ので、Write-Hostを利用するよう修正
ツイート
実はまだ飲んだことがない。
今度買ってみようかな。
:2012/07/09 追記;
・定義ファイルの説明を追記
・プログラムの一部を修正
定義ファイル「FolderLists.txt」が存在しない場合の出力が
Out-Stringでは正常に動作しない。
ので、Write-Hostを利用するよう修正
ツイート







コメント
コメントを投稿