SSブログ

PowerShell小僧:ファイル名の一括置換(改18) [コンピューター]

PowerShell小僧:ファイル名の一括置換(改17)
https://cheese999.blog.ss-blog.jp/2021-10-13
に以下の変更をしました。

1.履歴ファイルの内容確認(HistCheck1.ps1)において、履歴1がファイルかフォルダか確認する機能を追加

【参考にした情報】
PowerShell で与えられたパスがフォルダかどうか判定する方法
https://qiita.com/hitsumabushi845/items/7132ff880a86f83bab8e

【HistCheck1.ps1】
# 履歴確認
# パラメータ
Param(
  [Parameter(Mandatory=$true)]
  [array]$Hist_array1 # 履歴1レコードをカンマで分割したもの
)
# 関数:文字コードを表示
function myFShChrCd1{
  [String]$result = chcp
  #$result.GetType().FullName
  # ":"で分割
  [String[]]$BUF1 = $result.Split(":")
  #$BUF1.GetType().FullName
  # 2個目の文字列
  $BUF2 = $BUF1[1]
  #$BUF2.GetType().FullName
  # 空白を削除
  [String]$ChCode1 = $BUF2.Trim()
  #echo $ChCode1
  #$ChCode1.GetType().FullName
  switch ($ChCode1){
    "65001"{Write-Host "Character code is UTF-8(65001).";break}
    "932"{Write-host "Character code is Shift-JIS(932).";break}
    default{Write-Host "Character code is unknown.";break}
  }
}
# 関数:何も入力されなかったら、デフォルト値を返す
Function Read-HostDefault($Prompt, $Default) {
  # デフォルト値がある時のプロンプト
  if ($Default) {
      $Prompt = "$Prompt [$Default]"
  }
  # コンソール入力
  $val = Read-Host $Prompt
  # 何も入力されなかったら、デフォルト値を返す
  if($val -eq ""){
    Return $Default
  }else{
    Return $val
  }
  # ($default,$val)[[bool]$val]
}
# ここから本体コード
$myResult1 = $TRUE
# ドットソース演算子
# .{}の中の標準出力は戻り値に含めない
.{
  # なくても動くが日本語を含む出力が文字化けする
  # $PSDefaultParameterValues['Out-File:Encoding'] = 'utf8'
  # 文字コードをUTF-8に変更
  # chcp 65001
  # 文字コードを表示
  myFShChrCd1
  # 入力待ち
  Read-HostDefault "OK?" > $null
  # 履歴の要素数は9か?
  $HistArrayCount1 = $Hist_array1.Count
  if($HistArrayCount1 -ne 9){
    Write-host "履歴の要素数="$HistArrayCount1"です。(正しくは要素数=9)"
    $myResult1 = $FALSE
  }
  $Check_array1 = @('0', '1') # 履歴チェックするための配列
  # 履歴0 : 入力ファイル:0/1 = zip/フォルダ
  if($Hist_array1[0].Substring(0,1) -eq "#"){
    Write-host "履歴0 : 入力ファイルの頭文字が#なので変換をスキップします。"
    $myResult1 = $FALSE
  }
  if(($myResult1 -eq $TRUE) -and ($Check_array1.Contains($Hist_array1[0]) -eq $FALSE)){
    Write-host "履歴0 : 入力ファイル="$Hist_array1[0]"です。(正しくは0 or 1)"
    $myResult1 = $FALSE
  }
  # 履歴1 : Zipファイルのパス / ファイルがあるフォルダ
  if(($myResult1 -eq $TRUE) -and (-Not(Test-Path $Hist_array1[1]))){
    switch($Hist_array1[0]){
      0{Write-Host "履歴1 : Zipファイル("$Hist_array1[1]")が存在しません。"}
      1{Write-Host "履歴1 : ファイルがあるフォルダ("$Hist_array1[1]")が存在しません。"}
      Default{Write-Host "履歴1 : Zipファイル("$Hist_array1[1]")が存在しません。"}
    }
    $myResult1 = $FALSE
  }
  if(($myResult1 -eq $TRUE) -and ($Hist_array1[0] -eq 0) -and ((Get-Item $Hist_array1[1]).PSIsContainer -eq $TRUE)){     Write-Host "履歴1("$Hist_array1[1]")がフォルダです。正しくはZipファイルです。"     $myResult1 = $FALSE   }
  if(($myResult1 -eq $TRUE) -and ($Hist_array1[0] -eq 1) -and ((Get-Item $Hist_array1[1]).PSIsContainer -eq $FALSE)){     Write-Host "履歴1("$Hist_array1[1]")がファイルです。正しくはフォルダです。"     $myResult1 = $FALSE   }
  # 履歴2 : 0/1 = 対話/バッチ
  if(($myResult1 -eq $TRUE) -and ($Check_array1.Contains($Hist_array1[2]) -eq $FALSE)){
    Write-host "履歴2 : 対話/バッチ="$Hist_array1[2]"です。(正しくは0 or 1)"
    $myResult1 = $FALSE
  }
  # 履歴3 : 新しいファイル名
  if(($myResult1 -eq $TRUE) -and (-not($Hist_array1[3] -cmatch '^[A-Za-z]+[0-9]*_'))){
    Write-host "履歴3 : 新しいファイル名="$Hist_array1[3]"です。(正しくは1文字以上のアルファベットと0文字以上の数字と_)"
    # write-host $Hist_array1[3].Length
    $myResult1 = $FALSE
  }
  # 履歴4 : ファイル名の連番の開始番号
  if(($myResult1 -eq $TRUE) -and (-not($Hist_array1[4] -cmatch '[0-9]+'))){
    Write-host "履歴4 : ファイル名の連番の開始番号="$Hist_array1[4]"です。(正しくは数字)"
    $myResult1 = $FALSE
  }
  # 履歴5 : 0/1 = ファイル名に日付を追加しない/追加する
  if(($myResult1 -eq $TRUE) -and ($Check_array1.Contains($Hist_array1[5]) -eq $FALSE)){
    Write-host "履歴5 : ファイル名に日付を追加しない/追加する="$Hist_array1[5]"です。(正しくは0 or 1)"
    $myResult1 = $FALSE
  }
  # 履歴6 : 0/1 = ファイル名に曜日を追加しない/追加する
  if(($myResult1 -eq $TRUE) -and ($Check_array1.Contains($Hist_array1[6]) -eq $FALSE)){
    Write-host "履歴6 : ファイル名に曜日を追加しない/追加する="$Hist_array1[6]"です。(正しくは0 or 1)"
    $myResult1 = $FALSE
  }
  # 履歴7 : 0/1 = ファイル名に時刻を追加しない/追加する
  if(($myResult1 -eq $TRUE) -and ($Check_array1.Contains($Hist_array1[7]) -eq $FALSE)){
    Write-host "履歴7 : ファイル名に時刻を追加しない/追加する="$Hist_array1[7]"です。(正しくは0 or 1)"
    $myResult1 = $FALSE
  }
  # 履歴8 : 0/1 = 拡張子を変更しない/変更する
  if(($myResult1 -eq $TRUE) -and ($Check_array1.Contains($Hist_array1[8]) -eq $FALSE)){
    Write-host "履歴8 : 拡張子を変更しない/変更する="$Hist_array1[8]"です。(正しくは0 or 1)"
    $myResult1 = $FALSE
  }
  # ドットソース演算子の{}を抜ける
  Return
}|Out-Null # ドットソース演算子の{}内の標準出力は戻り値に含めない
# 以下、戻り値
Return $myResult1
ヤバイぜ!(9)  コメント(1) 
共通テーマ:パソコン・インターネット

ヤバイぜ! 9

コメント 1

cheese999

ヤバイぜ! ありがとうございます(^_0)ノ
by cheese999 (2021-10-20 07:06) 

コメントを書く

お名前:[必須]
URL:
コメント:
画像認証:
下の画像に表示されている文字(英大文字の「オー」、英小文字の「ユー」、アラビア数字の「ハチ」、アラビア数字の「イチ」、アラビア数字の「ニ」)を入力してください。

Facebook コメント

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。