PowerShell小僧:階層構造のフォルダに配置されているファイル(2) [コンピューター]
1.階層構造のフォルダの子フォルダにあるファイルを、親フォルダに移動する。
2.子フォルダを削除する。
というスクリプトを改造しました。
改造前:
https://cheese999.blog.ss-blog.jp/2022-08-04
改造後のコードは以下のとおり。
スクリプトを別ファイル(ファイル名:myFChdFldDel1.ps1)にして、親ファイルから呼ぶようにしました。
※Read-HostDefaultは、myFunction1_UTF8.ps1に定義されている関数です。
1.親ファイル
## 関数読み込み ##
. $myFunctionFile1
(中略)
Set-Location -LiteralPath $ScriptPath1 # スクリプトフォルダに移動
.\myFChdFldDel1.ps1 -ScriptPath1 $ScriptPath1 -MyFilePath1 $MyFilePath1 `
-SupConf1 $SupConf1 -FnLd1 0 > $null
2.myFChdFldDel1.ps1
# 機能1:子フォルダにあるファイルをカレントフォルダに移動する
# 機能2:子フォルダを削除
# パラメータ
Param(
[Parameter(Mandatory=$true)]
[string]$ScriptPath1, # スクリプトがある場所
[string]$MyFilePath1, # カレントフォルダ
[string]$SupConf1, # 確認の抑止(Y/N)
[int]$FnLd1 # 関数ファイルの読み込み(0/1)
)
# 本体コード
if($FnLd1 -eq 1){
# 関数ファイル
$myFunctionFile1 = $ScriptPath1+"\myFunction1_UTF8.ps1"
# 関数読み込み ##
. $myFunctionFile1
}
# 戻り値の初期化(正常)
$myResult1 = $TRUE
# ドットソース演算子
# .{}の中の標準出力は戻り値に含めない
.{
Set-Location -LiteralPath $MyFilePath1 # カレントフォルダに移動
Write-Output ("カレントフォルダ:" + $MyFilePath1) | Write-Host
$NumChdFld1 = (Get-ChildItem -Directory | Measure-Object).Count # 子フォルダ数
Write-Output ("子フォルダ数=" + $NumChdFld1) | Write-Host
# 子フォルダにあるファイルをカレントフォルダに移動する
if($NumChdFld1 -ne 0){
[int]$MyCNT5 = 0 # 子フォルダにあるファイル数
Get-ChildItem -Recurse -File|ForEach-Object{
$MyFilePath3 = ($_|Split-Path -Parent) # ファイルがあるフォルダ
if($MyFilePath1 -ne $MyFilePath3){
if($MyCNT5 -eq 0){Write-Host "子フォルダにあるファイルをカレントフォルダに移動します。"}
Write-Output ("ファイル名:" + $_) | Write-Host
Move-Item $_ $MyFilePath1 # ファイルが子フォルダにある場合、カレントフォルダに移動
$MyCNT5++ # 子フォルダにあるファイル数をインクリメント
}
}
if($MyCNT5 -eq 0){
Write-Host "子フォルダにファイルが、ありません。"
}else{
Write-Output ("子フォルダにあるファイル数=" + $MyCNT5) | Write-Host
}
if($SupConf1 -eq "N"){Read-HostDefault "OK?" > $null} # 入力待ち
# 子フォルダを削除
Write-Host "子フォルダを削除します。"
[int]$MyCNT6 = 0 # 子フォルダ数
Get-ChildItem -Directory|ForEach-Object{
Write-Output("子フォルダ:" + $_) | Write-Host
Remove-Item -Recurse $_
$MyCNT6++ # 子フォルダ数
}
Write-Output ("子フォルダ数=" + $MyCNT6) | Write-Host
if($SupConf1 -eq "N"){Read-HostDefault "OK?" > $null} # 入力待ち
}else{
Write-Host "子フォルダが、ありません。"
}
# ドットソース演算子の{}を抜ける
Return
# }|Out-Null # ドットソース演算子の{}内の標準出力は戻り値に含めない
}>$null # ドットソース演算子の{}内の標準出力は戻り値に含めない(Out-Nullは遅い)
# 以下、戻り値
Return $myResult1
2.子フォルダを削除する。
というスクリプトを改造しました。
改造前:
https://cheese999.blog.ss-blog.jp/2022-08-04
改造後のコードは以下のとおり。
スクリプトを別ファイル(ファイル名:myFChdFldDel1.ps1)にして、親ファイルから呼ぶようにしました。
※Read-HostDefaultは、myFunction1_UTF8.ps1に定義されている関数です。
1.親ファイル
## 関数読み込み ##
. $myFunctionFile1
(中略)
Set-Location -LiteralPath $ScriptPath1 # スクリプトフォルダに移動
.\myFChdFldDel1.ps1 -ScriptPath1 $ScriptPath1 -MyFilePath1 $MyFilePath1 `
-SupConf1 $SupConf1 -FnLd1 0 > $null
2.myFChdFldDel1.ps1
# 機能1:子フォルダにあるファイルをカレントフォルダに移動する
# 機能2:子フォルダを削除
# パラメータ
Param(
[Parameter(Mandatory=$true)]
[string]$ScriptPath1, # スクリプトがある場所
[string]$MyFilePath1, # カレントフォルダ
[string]$SupConf1, # 確認の抑止(Y/N)
[int]$FnLd1 # 関数ファイルの読み込み(0/1)
)
# 本体コード
if($FnLd1 -eq 1){
# 関数ファイル
$myFunctionFile1 = $ScriptPath1+"\myFunction1_UTF8.ps1"
# 関数読み込み ##
. $myFunctionFile1
}
# 戻り値の初期化(正常)
$myResult1 = $TRUE
# ドットソース演算子
# .{}の中の標準出力は戻り値に含めない
.{
Set-Location -LiteralPath $MyFilePath1 # カレントフォルダに移動
Write-Output ("カレントフォルダ:" + $MyFilePath1) | Write-Host
$NumChdFld1 = (Get-ChildItem -Directory | Measure-Object).Count # 子フォルダ数
Write-Output ("子フォルダ数=" + $NumChdFld1) | Write-Host
# 子フォルダにあるファイルをカレントフォルダに移動する
if($NumChdFld1 -ne 0){
[int]$MyCNT5 = 0 # 子フォルダにあるファイル数
Get-ChildItem -Recurse -File|ForEach-Object{
$MyFilePath3 = ($_|Split-Path -Parent) # ファイルがあるフォルダ
if($MyFilePath1 -ne $MyFilePath3){
if($MyCNT5 -eq 0){Write-Host "子フォルダにあるファイルをカレントフォルダに移動します。"}
Write-Output ("ファイル名:" + $_) | Write-Host
Move-Item $_ $MyFilePath1 # ファイルが子フォルダにある場合、カレントフォルダに移動
$MyCNT5++ # 子フォルダにあるファイル数をインクリメント
}
}
if($MyCNT5 -eq 0){
Write-Host "子フォルダにファイルが、ありません。"
}else{
Write-Output ("子フォルダにあるファイル数=" + $MyCNT5) | Write-Host
}
if($SupConf1 -eq "N"){Read-HostDefault "OK?" > $null} # 入力待ち
# 子フォルダを削除
Write-Host "子フォルダを削除します。"
[int]$MyCNT6 = 0 # 子フォルダ数
Get-ChildItem -Directory|ForEach-Object{
Write-Output("子フォルダ:" + $_) | Write-Host
Remove-Item -Recurse $_
$MyCNT6++ # 子フォルダ数
}
Write-Output ("子フォルダ数=" + $MyCNT6) | Write-Host
if($SupConf1 -eq "N"){Read-HostDefault "OK?" > $null} # 入力待ち
}else{
Write-Host "子フォルダが、ありません。"
}
# ドットソース演算子の{}を抜ける
Return
# }|Out-Null # ドットソース演算子の{}内の標準出力は戻り値に含めない
}>$null # ドットソース演算子の{}内の標準出力は戻り値に含めない(Out-Nullは遅い)
# 以下、戻り値
Return $myResult1
タグ:powershell
ヤバイぜ! ありがとうございます(^_0)ノ
by cheese999 (2022-08-13 16:15)