SSブログ

PowerShell小僧:クロスプラットフォームのPowerShell [コンピューター]

クロスプラットフォームのPowerShellがあるというので、Windows 10に

インストールしたのですが、文字コードがShift-JISのスクリプトファイル(.ps1)では、
文字化けが発生してしまい、動きませんでした。

インストールしたのは、PowerShell Core 6.2.4です。
https://github.com/PowerShell/PowerShell#get-powershell

そこで、以下の2つの変更をしました。

1.テキストエディタでスクリプトファイルを保存するときに、文字コードをUTF-8に変更。
2.スクリプト実行中の文字コードをchcpコマンドでUTF-8に変更。

以前作成したファイル名を一括変換し、連番の名前を付けるスクリプトを以下のように変更しました。

# 関数:文字コードを表示
function myFShChrCd1{
  $result = chcp
  # ":"で分割
  $BUF1 = $result.Split(":")
  # 2個目の文字列
  $BUF2 = $BUF1[1]
  # 空白を削除
  $ChCode1 = $BUF2.Trim()
  # echo $ChCode1
  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
}
# 新しいファイル名を入力
$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
}
Write-Host "新しいファイル名:"$NewFileName
# 入力待ち
$INPUT = Read-Host "OK?"
# TMP_001.xxx, TMP_002.xxx と昇順で名前を付け替える
ls -File | sort Name | % {$i = 1} { $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小僧:フォルダ内のファイルに連番でファイル名をつける
https://cheese999.blog.ss-blog.jp/2018-04-14
ヤバイぜ!(13)  コメント(1) 
共通テーマ:日記・雑感

ヤバイぜ! 13

コメント 1

cheese999

ヤバイぜ! ありがとうございます(^_0)ノ
by cheese999 (2020-02-27 06:51) 

コメントを書く

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

Facebook コメント

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