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