四捨五入する

四捨五入する方法と例を紹介します。

# 四捨五入
[Math]::Round(四捨五入したい数, 小数何桁にするか, [MidpointRounding]::AwayFromZero)


# 実行例 ※2つ目の引数が小数第○桁で四捨五入するかを指定しています
[Math]::Round(123.4567890, 0, [MidpointRounding]::AwayFromZero);  # 123
[Math]::Round(123.4567890, 1, [MidpointRounding]::AwayFromZero);  # 123.5
[Math]::Round(123.4567890, 2, [MidpointRounding]::AwayFromZero);  # 123.46
[Math]::Round(123.4567890, 3, [MidpointRounding]::AwayFromZero);  # 123.457
[Math]::Round(123.4567890, 4, [MidpointRounding]::AwayFromZero);  # 123.4568

 

 

切り上げする

切り上げする方法と例を紹介します

# 切り上げ
# 「小数何桁にするか」は2箇所設定することに注意してください
[Math]::Ceiling(切り上げしたい数 * [Math]::Pow(10, 小数何桁にするか)) / [Math]::Pow(10, 小数何桁にするか)


# 実行例
[Math]::Ceiling(123.4567890 * [Math]::Pow(10, 0)) / [Math]::Pow(10, 0);  #124
[Math]::Ceiling(123.4567890 * [Math]::Pow(10, 1)) / [Math]::Pow(10, 1);  #123.5
[Math]::Ceiling(123.4567890 * [Math]::Pow(10, 2)) / [Math]::Pow(10, 2);  #123.46
[Math]::Ceiling(123.4567890 * [Math]::Pow(10, 3)) / [Math]::Pow(10, 3);  #123.457

 

 

切り捨てする

切り捨てする方法と例を紹介します

# 切り捨て
# 「小数何桁にするか」は2箇所設定することに注意してください
[Math]::Truncate(切り捨てしたい数 * [Math]::Pow(10, 小数何桁にするか)) / [Math]::Pow(10, 小数何桁にするか)


# 実行例
[Math]::Truncate(123.4567890 * [Math]::Pow(10, 0)) / [Math]::Pow(10, 0);  # 123
[Math]::Truncate(123.4567890 * [Math]::Pow(10, 1)) / [Math]::Pow(10, 1);  # 123.4
[Math]::Truncate(123.4567890 * [Math]::Pow(10, 2)) / [Math]::Pow(10, 2);  # 123.45
[Math]::Truncate(123.4567890 * [Math]::Pow(10, 3)) / [Math]::Pow(10, 3);  # 123.456
[Math]::Truncate(123.4567890 * [Math]::Pow(10, 4)) / [Math]::Pow(10, 4);  # 123.4567

 

 

四捨五入、切り上げ、切り捨てする関数

上の構文を使用して、四捨五入と切り上げ・切り捨てを切り替えることができる関数を作りました。

<#
"=========================================================
'[概  要] 四捨五入をする
'[引  数] targetNum : 対象の数値
'[引  数] Kubun     : 計算区分(1:四捨五入、2:切り上げ、3:切り捨て)
'[引  数] Keta      : 有効桁数(何桁で丸めるか)
'[戻り値] 四捨五入後の数値
'[備  考] 
'========================================================="
#>
Function round($targetNum , $Kubun , $Keta){

    if($Kubun -eq 1){
        #四捨五入
        return [Math]::Round($targetNum, $Keta, [MidpointRounding]::AwayFromZero);

    }elseif($Kubun -eq 2){
        #切り上げ
        $m = [Math]::Pow(10, $Keta);
        if($targetNum -ge 0){
            return [Math]::Ceiling($targetNum * $m) / $m;
        }else{
            # 有効桁数をマイナス値で指定してもうまくいくようにする
            return [Math]::Floor($targetNum * $m) / $m;
        } 

    }elseif($Kubun -eq 3){
        #切り捨て
        $m = [Math]::Pow(10, $Keta);
        return [Math]::Truncate($targetNum * $m) / $m;
    }
    
}

# 上の関数を呼び出し
# 数値「12345.6789」を小数点以下四捨五入
round 12345.6789 1 0    # 12346

# 数値「12345.6789」を小数第2位で四捨五入
round 12345.6789 1 2    # 12345.68

# 数値「12345.6789」を小数第3位で四捨五入
round 12345.6789 1 3    # 12345.679

# 数値「12345.6789」を小数第3位で切り上げ
round 12345.12345 2 3    # 12345.124

# 数値「12345.6789」を小数第3位で切り捨て
round 12345.12345 3 3    # 12345.123

プロセスを取得する

実行中のプロセスを取得するには「Get-Process」を使用します。

ここでは、これだけおさえておけばOKな例を紹介します。

# プロセスを取得する
Get-Process

Handles  NPM(K)    PM(K)      WS(K)     CPU(s)     Id  SI ProcessName                                                                               
-------  ------    -----      -----     ------     --  -- -----------                                                                               
    313      19     9872        268       0.13   1048   1 ApplicationFrameHost                                                                      
    492      26   113996     138900      34.48    592   1 chrome                                                                                    
   2201      55   157856     144940     203.34   1820   1 chrome       


# プロセス名で抽出するには「-Name」を使う
# 例:プロセス名で抽出(Googleで始まるプロセス名で抽出)
Get-Process -Name Google*

Handles  NPM(K)    PM(K)      WS(K)     CPU(s)     Id  SI ProcessName                                                                               
-------  ------    -----      -----     ------     --  -- -----------                                                                               
    536      21    32376       2044       0.61    516   1 GoogleDriveFS                                                                             
    533      26    49416       5032       1.13  11424   1 GoogleDriveFS                                                                             
    252      18    13208        860       0.06  11828   1 GoogleDriveFS    


# 例:複数のプロセス名で抽出(Googleで始まる または Exで始まるプロセス名で抽出)
Get-Process -Name Google* , Ex*

Handles  NPM(K)    PM(K)      WS(K)     CPU(s)     Id  SI ProcessName                                                                               
-------  ------    -----      -----     ------     --  -- -----------                                                                               
   1319      67    65408      60948      30.31  13540   1 EXCEL                                                                                     
   2693     110    90396      60744      68.78   7228   1 explorer                                                                                  
    536      21    32376       2044       0.61    516   1 GoogleDriveFS                                                                             
    533      26    49416       5032       1.13  11424   1 GoogleDriveFS                                                                             
    252      18    13208        860       0.06  11828   1 GoogleDriveFS    


# 出力する列を指定するには「Select-Object」を使います
# 例:出力する列を「Id」、「ProcessName」に絞る
Get-Process | Select-Object Id, ProcessName

   Id ProcessName            
   -- -----------            
 1048 ApplicationFrameHost   
  592 chrome                 
 1820 chrome                 
 3908 chrome       


# 出力する順番を指定するには「Sort-Object」を使います
# 例:「Id」順に表示する
Get-Process | Sort-Object -Property Id

Handles  NPM(K)    PM(K)      WS(K)     CPU(s)     Id  SI ProcessName                                                                               
-------  ------    -----      -----     ------     --  -- -----------                                                                               
      0       0       60          8                 0   0 Idle                                                                                      
   3662       0      208       4616                 4   0 System                                                                                    
     36       6     2212          0                88   0 fontdrvhost                                                                               
      0      11     5832      95264               124   0 Registry                                                                                  
     36      19     7428          0               408   1 fontdrvhost  


# 上の条件をまとめて実行します
# 例:「Google」と「Ex」で始まるプロセス。IDと名前をID順に表示。
Get-Process -Name Google* , Ex* | Select-Object Id, ProcessName| Sort-Object -Property Id

   Id ProcessName  
   -- -----------  
  516 GoogleDriveFS
 7228 explorer     
11424 GoogleDriveFS
11828 GoogleDriveFS
11924 GoogleDriveFS
13540 EXCEL 

特定のフォルダ内のファイルをループする

特定のフォルダからファイル一覧を取得し、そのファイル分処理を行いたい場合の例を紹介します。

# "C:\test"フォルダからファイルの一覧を取得する
$folderFileList = Get-ChildItem -File "C:\test"

# 取得したファイル数分ループする
foreach($item in $folderFileList)
{
    # ファイル名を表示する
    Write-Host $item.Name
}

# 実行結果
Book1.xlsx
Book2.xlsx
Book3.xlsx
testfile.txt
testfile2.txt
testfile3.txt

 

 

 

特定のフォルダ内のファイルをループする(サブフォルダも含む)

ファイル一覧を取得する際に、サブフォルダ内も含めて検索するには「-Recurse」を付けて実行します。

# "C:\test"フォルダからファイルの一覧を取得する(サブフォルダも含む)
$folderFileList = Get-ChildItem -Recurse -File "C:\test"

# 取得したファイル数分ループする
foreach($item in $folderFileList)
{
    # ファイル名を表示する
    Write-Host $item.Name
}

# 実行結果
Book1.xlsx
Book2.xlsx
Book3.xlsx
testfile.txt
testfile2.txt
testfile3.txt
Book1.xlsx     # ←これはサブフォルダ内のファイル
Book2.xlsx     # ←これはサブフォルダ内のファイル
testfile.txt   # ←これはサブフォルダ内のファイル
testfile2.txt  # ←これはサブフォルダ内のファイル

 

 

 

特定のフォルダ内のファイルをループする

フォルダからファイル一覧を取得する際に、拡張子でフィルタする例です。

# "C:\test"フォルダからファイルの一覧を取得する
# 拡張子に「.xls」を含むファイル一覧を取得する(.xls , .xlsx , .xlsmなどを含む)
$folderFileList = Get-ChildItem -File "C:\test" -Filter *.xls*

# 取得したファイル数分ループ
foreach($item in $folderFileList)
{
    # ファイル名を表示する
    Write-Host $item.Name
}

# 実行結果
Book1.xlsx
Book2.xlsx
Book3.xlsx

ファイル・フォルダの存在チェック

ファイル・フォルダの存在チェックは次のように行います。

# 存在チェック(返り値 = True:存在する、False:存在しない)
# この構文はファイル、フォルダどちらにも使用できます
Test-Path -Path "フォルダまたはファイルのパス"

# ファイルの存在チェック
Test-Path -Path "C:\test\Book.xlsx"   # True:存在する

# ファイルの存在チェック
Test-Path -Path "C:\test\Book2.xlsx"  # False:存在しない

# フォルダの存在チェック
Test-Path -Path "C:\test"   # True:存在する

# フォルダの存在チェック
Test-Path -Path "C:\test2"  # False:存在しない

# フォルダの存在チェック(変数を使用)
$testFile = "C:\test\Book.xlsx"
Test-Path -Path $testFile  # True:存在する

 

 

 

存在チェックを利用したIF文

存在チェックを使用しての分岐(IF文)の例です。

# 存在チェック&件数に結果を格納
$result = Test-Path -Path "C:\test"

# 存在チェックの結果によって処理を分ける
if($result)
{
    # あった時の処理
    Write-Host "Exist"
}else{
    # なかった時の処理
    Write-Host "Do not Exist"
}

フォルダ操作

フォルダ操作をする主要なコマンド例です。

# フォルダの作成
# New-Item 作成したいフォルダパス -ItemType Directory
New-Item "C:\test2" -ItemType Directory

# フォルダの削除
# Remove-Item 削除したいフォルダパス -Recurse
# 「-Recurse」は削除の確認メッセージを非表示にするオプションです
Remove-Item "C:\test2" -Recurse

# フォルダのコピー
# Copy-Item コピー元のフォルダパス -destination コピー先のフォルダパス -recurse
Copy-Item "C:\test" -destination "C:\test2" -recurse

# フォルダの移動
# Move-Item 移動元のフォルダパス 移動先のフォルダパス
Move-Item "C:\test" "C:\test2"

# フォルダ名を変更
# Rename-Item 変更前のフォルダパス 変更後のフォルダパス
Rename-Item "C:\test" "C:\test3"

ファイル操作

ファイル操作をする主要なコマンド例です。

# ファイルのコピー
# Copy-Item コピー元のファイルパス コピー先のファイルパス  ※コピー先のファイル名は変わっていてもOK
Copy-Item "C:\test\Book1.xlsx" "C:\test2\Book2.xlsx"

# ファイルの移動
# Move-Item 移動元のファイルパス 移動先のファイルパス  ※移動先のファイル名は変わっていてもOK
Move-Item "C:\test\Book1.xlsx" "C:\test2\Book3.xlsx"

# ファイル名を変更
# Rename-Item 変更前のファイルパス 変更後のファイルパス
Rename-Item "C:\test\Book2.xlsx" "C:\test\Book3.xlsx"

# ファイルの削除
# Remove-Item ファイルパス
Remove-Item "C:\test2\Book2.xlsx"

引数なしの関数(ファンクション)

引数なしの関数の書き方例です。ふと忘れてしまった場合やテンプレ用として。

# 関数の書き方基本
function メソッド名(){
処理を記載する
}

#引数なしの関数(文字列を表示するだけの関数)
function MyFunction1(){ 
    Write-Host 'aa'
}

#上の関数を実行する
MyFunction1    #結果:aa

 

 

 

引数ありの関数(ファンクション)

引数ありの関数の書き方例です。

#引数ありの関数(引数の2つを足して返すだけの関数)
function MyFunction2($arg1 , $arg2){ 

    $num = $arg1 + $arg2

    #戻り値の書き方 : Write-Output 戻り値
    Write-Output $num
}


#上の関数を実行する(引数は半角スペースで区切って渡す)
$rtn = MyFunction2 123 456
Write-Host $rtn   #結果:579

ファイルの情報を取得する

ファイルの情報を取得する方法です。

下記は私のテスト用のファイル、「"C:\test\Book1.xlsx"」に対して情報を取得する例です。

# ファイルまでのフルパスを取得する
(Get-ItemProperty "C:\test\Book1.xlsx").FullName   # C:\test\Book1.xlsx

# ファイル名を取得する(ファイル名のみ)
(Get-ItemProperty "C:\test\Book1.xlsx").name       # Book1.xlsx

# ファイルの拡張子を取得する
(Get-ItemProperty "C:\test\Book1.xlsx").Extension  # .xlsx

# ファイル名を取得する(拡張子なし)
(Get-ItemProperty "C:\test\Book1.xlsx").Name.Replace((Get-ItemProperty "C:\test\Book1.xlsx").Extension,"")   
# Book1

# 親フォルダまでのパス
Split-Path (Get-ItemProperty "C:\test\Book1.xlsx").FullName   # C:\test

# ファイルサイズを取得する(単位:バイト)
(Get-ItemProperty "C:\test\Book1.xlsx").Length       # 10760

#ファイルが読み取り専用かどうかを取得する(True:読み取り専用、False:書き込み可)
(Get-ItemProperty "C:\test\Book1.xlsx").IsReadOnly   # False

#ファイルの作成日時を取得する
(Get-ItemProperty "C:\test\Book1.xlsx").CreationTime     # 2022年8月31日 23:16:00
(Get-ItemProperty "C:\test\Book1.xlsx").CreationTimeUtc  # UTC:協定世界時  # 2022年8月31日 14:16:00

#ファイルの作成日時を取得する
(Get-ItemProperty "C:\test\Book1.xlsx").LastWriteTime     # 2022年8月15日 21:40:55
(Get-ItemProperty "C:\test\Book1.xlsx").LastWriteTimeUtc  # UTC:協定世界時  # 2022年8月15日 12:40:55

 

 

 

ファイルの情報を取得する(変数を使う)

ファイルの情報を変数に格納し、その変数を使って情報を取得する例です。

※下記は私のテスト用のファイル、「"C:\test\Book1.xlsx"」に対して情報を取得する例です。

# ファイル情報を変数に格納
$testFile = Get-ChildItem -Path "C:\test\Book1.xlsx"

# ファイルまでのフルパスを取得する
$testFile.FullName    # C:\test\Book1.xlsx

# ファイル名を取得する(ファイル名のみ)
$testFile.name        # Book1.xlsx

# ファイルの拡張子を取得する
$testFile.Extension   # .xlsx

# ファイル名を取得する(拡張子なし)
$testFile.Name.Replace($testFile.Extension,"")   # Book1

# 親フォルダまでのパス
Split-Path $testFile.FullName   # C:\test

# ファイルサイズを取得する(単位:バイト)
$testFile.Length            # 10760

#ファイルが読み取り専用かどうかを取得する(True:読み取り専用、False:書き込み可)
$testFile.IsReadOnly        # False

#ファイルの作成日時を取得する
$testFile.CreationTime      # 2022年8月31日 23:16:00
$testFile.CreationTimeUtc   # UTC:協定世界時  # 2022年8月31日 14:16:00

#ファイルの作成日時を取得する
$testFile.LastWriteTime     # 2022年8月31日 23:16:00
$testFile.LastWriteTimeUtc  # UTC:協定世界時  # 2022年8月15日 12:40:55

タブ文字、改行文字の入力方法

早速結論。タブ文字、改行文字は次のように入力します。

タブ文字 : "`t"      ←""も必要です

改行文字 : "`r`n"   ←""も必要です

 

実行してみましょう。

# 実行例(タブ文字)
$str = "Hello" + "`t" + "world"
Write-Host $str
# 実行結果:Hello	world


# 実行例(改行文字)
$str = "Hello" + "`r`n" + "world"
Write-Host $str
# Hello
# world

For文の書き方

IF文の書き方は次のように書きます。

for ( ループ用の変数と初期値; ループが続く条件; ループ用変数の増加・減少 ) {
    ループで実行される文
}

ループ用変数は次のように増減させます
$変数名++   # 1増やす
$変数名--   # 1減らす

# ループ例文1
# indexを1から1ずつ増やし10以下の間続ける(※-lt:"<"と同じです。
for ( $index = 1; $index -le 10; $index++ ) { 
    Write-Host $index  # 変数$indexの値を表示する動作を10回繰り返す
}

#実行結果
0
1
2
3
4
5
6
7
8
9
10

# ループ例文2
# indexを10から1ずつ減らし0より大きい間続ける
for ( $index = 10; $index -gt 0; $index -- ) {
    Write-Host $index
}
#実行結果
10
9
8
7
6
5
4
3
2
1

 

 

For文を途中で抜ける

For文を途中で抜けるには「break」を使用します。

for ( $index = 1; $index -lt 10; $index++ ) {
    
    Write-Host $index
    
    If( $index -eq 5 ){
        #$indexが5と等しい時にループを抜ける
        break
    }
}
#実行結果
1
2
3
4
5