PowerShell小僧:ファイル名一括変換スクリプト(改2) [コンピューター]
https://cheese999.blog.ss-blog.jp/2020-03-17
PowerShell小僧:ファイル名一括変換スクリプト(改)
で紹介したスクリプトで、変数の型が分かるように[String[]]$BUF1の様に型を明示的に指定してみました。変数の型を調べるには、.GetType().FullNameを使います。
【スクリプト】
# 関数:文字コードを表示
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"{echo "文字コードはUTF-8(65001)です。";break}
"932"{echo "文字コードはShift-JIS(932)です。";break}
default{echo "文字コードは不明です。";break}
}
}
# 文字コードをUTF-8に変更
chcp 65001
# 文字コードを表示
myFShChrCd1
# ファイルがあるフォルダを入力
$INPUT = Read-Host "ファイルがあるフォルダ?"
# フォルダが存在しない場合、終了
if(-Not(Test-Path $INPUT)){
Write-Host "フォルダが存在しません。"
Exit
}
# ファイルがあるフォルダへ移動
cd -LiteralPath $INPUT
# ファイル名の一覧を表示
echo "変更前のファイル名です。"
Get-ChildItem
# 入力待ち
$INPUT = Read-Host "ファイル名を変更しますか?(Y)"
if($INPUT -ne "Y"){
# Y以外なら、処理中止
# 文字コードをShift-JISに変更
chcp 932
# 文字コードを表示
myFShChrCd1
echo "処理を中断しました。"
# 入力待ち
$INPUT = Read-Host "OK?"
# ファイル名の一覧を表示
Get-ChildItem
exit
}
# 新しいファイル名を入力
[String]$NewFileName = Read-Host "新しいファイル名?"
# 新しいファイル名が入力されていない場合、中断
if ($NewFileName -eq ""){
Write-Host "新しいファイル名が入力されなかったので、中断します。"
# 入力待ち
$INPUT = Read-Host "OK?"
# 文字コードをShift-JISに変更
chcp 932
# 文字コードを表示
myFShChrCd1
echo "処理を中断しました。"
# 入力待ち
$INPUT = Read-Host "OK?"
# ファイル名の一覧を表示
Get-ChildItem
exit
}
# ファイル名の連番の開始番号を入力
[String]$StartNo = Read-Host "ファイル名の連番の開始番号(default=1)?"
# ヌル判定
if ([String]::IsNullOrEmpty($StartNo)){
Write-Host "開始番号に何も入力されなかったので、開始番号=1とします。"
[string]$StartNo = "1"
# 入力待ち
$INPUT = Read-Host "OK?"
}
# 変換後の整数変数
[Int]$StartNo1 = 0
# 整数変換
[Bool]$Result1 = [int]::TryParse($StartNo, [ref]$StartNo1)
if($Result1 -eq $FALSE){
Write-Host "開始番号="$StartNo" に整数以外が入力されたので終了します。"
# 入力待ち
$INPUT = Read-Host "OK?"
# 文字コードをShift-JISに変更
chcp 932
# 文字コードを表示
myFShChrCd1
echo "処理を中断しました。"
# 入力待ち
$INPUT = Read-Host "OK?"
# ファイル名の一覧を表示
Get-ChildItem
exit
}
[String]$String1 = "新しいファイル名:" + $NewFileName + $StartNo1.tostring("000") + ".jpg"
Write-Host $String1
# 入力待ち
$INPUT = Read-Host "OK?"
# TMP_001.xxx, TMP_002.xxx と昇順で名前を付け替える
ls -File | sort Name | % {$i = $StartNo1} { $Newname = "TMP_" +$i.tostring("000")+$_.extension; rename-item $_ $Newname; $i++ }
Get-ChildItem
# 入力待ち
$INPUT = Read-Host "OK?"
# ファイル名のTMP_をABC_に置換する
Get-ChildItem | Rename-Item -NewName { $_.Name -replace 'TMP_',$NewFileName }
# 拡張子のjpegをjpgに置換する
Get-ChildItem | Rename-Item -NewName { $_ -replace '\.jpeg$','.jpg' }
# 文字コードをShift-JISに変更
chcp 932
# 文字コードを表示
myFShChrCd1
# ファイル名の一覧を表示
echo "変更後のファイル名です。"
Get-ChildItem
PowerShell小僧:ファイル名一括変換スクリプト(改)
で紹介したスクリプトで、変数の型が分かるように[String[]]$BUF1の様に型を明示的に指定してみました。変数の型を調べるには、.GetType().FullNameを使います。
【スクリプト】
# 関数:文字コードを表示
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"{echo "文字コードはUTF-8(65001)です。";break}
"932"{echo "文字コードはShift-JIS(932)です。";break}
default{echo "文字コードは不明です。";break}
}
}
# 文字コードをUTF-8に変更
chcp 65001
# 文字コードを表示
myFShChrCd1
# ファイルがあるフォルダを入力
$INPUT = Read-Host "ファイルがあるフォルダ?"
# フォルダが存在しない場合、終了
if(-Not(Test-Path $INPUT)){
Write-Host "フォルダが存在しません。"
Exit
}
# ファイルがあるフォルダへ移動
cd -LiteralPath $INPUT
# ファイル名の一覧を表示
echo "変更前のファイル名です。"
Get-ChildItem
# 入力待ち
$INPUT = Read-Host "ファイル名を変更しますか?(Y)"
if($INPUT -ne "Y"){
# Y以外なら、処理中止
# 文字コードをShift-JISに変更
chcp 932
# 文字コードを表示
myFShChrCd1
echo "処理を中断しました。"
# 入力待ち
$INPUT = Read-Host "OK?"
# ファイル名の一覧を表示
Get-ChildItem
exit
}
# 新しいファイル名を入力
[String]$NewFileName = Read-Host "新しいファイル名?"
# 新しいファイル名が入力されていない場合、中断
if ($NewFileName -eq ""){
Write-Host "新しいファイル名が入力されなかったので、中断します。"
# 入力待ち
$INPUT = Read-Host "OK?"
# 文字コードをShift-JISに変更
chcp 932
# 文字コードを表示
myFShChrCd1
echo "処理を中断しました。"
# 入力待ち
$INPUT = Read-Host "OK?"
# ファイル名の一覧を表示
Get-ChildItem
exit
}
# ファイル名の連番の開始番号を入力
[String]$StartNo = Read-Host "ファイル名の連番の開始番号(default=1)?"
# ヌル判定
if ([String]::IsNullOrEmpty($StartNo)){
Write-Host "開始番号に何も入力されなかったので、開始番号=1とします。"
[string]$StartNo = "1"
# 入力待ち
$INPUT = Read-Host "OK?"
}
# 変換後の整数変数
[Int]$StartNo1 = 0
# 整数変換
[Bool]$Result1 = [int]::TryParse($StartNo, [ref]$StartNo1)
if($Result1 -eq $FALSE){
Write-Host "開始番号="$StartNo" に整数以外が入力されたので終了します。"
# 入力待ち
$INPUT = Read-Host "OK?"
# 文字コードをShift-JISに変更
chcp 932
# 文字コードを表示
myFShChrCd1
echo "処理を中断しました。"
# 入力待ち
$INPUT = Read-Host "OK?"
# ファイル名の一覧を表示
Get-ChildItem
exit
}
[String]$String1 = "新しいファイル名:" + $NewFileName + $StartNo1.tostring("000") + ".jpg"
Write-Host $String1
# 入力待ち
$INPUT = Read-Host "OK?"
# TMP_001.xxx, TMP_002.xxx と昇順で名前を付け替える
ls -File | sort Name | % {$i = $StartNo1} { $Newname = "TMP_" +$i.tostring("000")+$_.extension; rename-item $_ $Newname; $i++ }
Get-ChildItem
# 入力待ち
$INPUT = Read-Host "OK?"
# ファイル名のTMP_をABC_に置換する
Get-ChildItem | Rename-Item -NewName { $_.Name -replace 'TMP_',$NewFileName }
# 拡張子のjpegをjpgに置換する
Get-ChildItem | Rename-Item -NewName { $_ -replace '\.jpeg$','.jpg' }
# 文字コードをShift-JISに変更
chcp 932
# 文字コードを表示
myFShChrCd1
# ファイル名の一覧を表示
echo "変更後のファイル名です。"
Get-ChildItem
ヤバイぜ! ありがとうございます(^_0)ノ
by cheese999 (2020-03-22 06:18)