フォルダ操作(フォルダの作成、削除)

フォルダ操作(フォルダの作成、削除)のコマンドまとめです。

# フォルダ作成
mkdir フォルダのパス
# 例
mkdir "C:\test"

# フォルダ削除
rmdir /s /q フォルダのパス    
rd /s /q フォルダのパス          # ←これでも実行可(rmdir = rdなので同じもの)
# /s:ファイルやサブディレクトリも含めて削除する
# /q:/sで削除する際に確認メッセージを表示しない

# 例
rmdir /s /q "C:\test"
rd /s /q "C:\test"

 

 

 

フォルダリストの取得

フォルダリストの取得例です。

この例では結果はクリップボードに格納しています。

# フォルダのリストを取得する
dir フォルダパス /b /ad | clip

<#
/b     :ファイル・フォルダ名のみを表示する(日時・サイズを表示しない)
/ad    :フォルダ名
/a-d   :ファイル名
/s     :サブフォルダも検索(この場合、/ad、/a-dがあってもフルパスになる
/o:N   : 名前順        /o:-N   : 名前順(降順)
/o:S   : サイズ順      /o:-S   : サイズ順(降順)
/o:E   : 拡張子順      /o:-E   : 拡張子順(降順)
/o:D   : 日時順        /o:-D   : 日時順(降順)
| clip :クリップボードへ( "/" ではなく"|"の点に注意)
#>


# C:\testの下にあるフォルダのリストを取得する
dir C:\test /b /ad | clip

# C:\testの下にあるフォルダ(サブフォルダも含む)のリストを取得する
dir C:\test /b /ad /s | clip

# C:\testの下にあるフォルダ(サブフォルダも含む)のリストを取得する(名前順)
dir C:\test /b /ad /s /o:N | clip

 

 

 

ファイルリストの取得

ファイルリストの取得例です。

この例では結果はテキストファイルに出力。

# フォルダのリストを取得する
dir フォルダパス /b /a-d > 出力ファイルパス

<#
/b     :ファイル・フォルダ名のみを表示する(日時・サイズを表示しない)
/ad    :フォルダ名
/a-d   :ファイル名
/s     :サブフォルダも検索(この場合、/ad、/a-dがあってもフルパスになる
/o:N   : 名前順        /o:-N   : 名前順(降順)
/o:S   : サイズ順      /o:-S   : サイズ順(降順)
/o:E   : 拡張子順      /o:-E   : 拡張子順(降順)
/o:D   : 日時順        /o:-D   : 日時順(降順)
| clip :クリップボードへ( "/" ではなく"|"の点に注意)
> ファイルパス :結果をファイルパスへ出力する
#>


# C:\testの下にあるフォルダのリストを取得しファイル出力する
dir C:\test /b /a-d > C:\test\list1.txt

# C:\testの下にあるフォルダ(サブフォルダも含む)のリストを取得する
dir C:\test /b /a-d /s > C:\test\list2.txt

# C:\testの下にあるフォルダ(サブフォルダも含む)のリストを取得する(名前順)
dir C:\test /b /a-d /s /o:N > C:\test\list3.txt

今日の日付と書式設定

今日の日付の取得と、書式設定の方法を紹介します。

# 今日の日付
echo %date%             # 2022/09/12

# 今年の年だけを取得する
echo %date:~0,4%        # 2022

# 今月の月だけを取得する
echo %date:~5,2%        # 09

# 今日の日付だけを取得する
echo %date:~8,2%        # 12

# YYYYMMDD
echo %date:~0,4%%date:~5,2%%date:~8,2%        # 20220912

# YYYY-MM-DD(下の2つは同じ結果)
echo %date::=-%                               # 2022-09-12
echo %date:~0,4%-%date:~5,2%-%date:~8,2%      # 2022-09-12

# YYYY年MM月DD日
echo %date:~0,4%年%date:~5,2%月%date:~8,2%日   # 2022年09月12日

# MMDD
echo %date:~5,2%%date:~8,2%      # 0912

# MM/DD
echo %date:~5,5%                 # 09/12

# MM月DD日
echo %date:~5,2%月%date:~8,2%日  # 09月12日

 

 

※補足ですが上の表記では「~」は真ん中ほどの高さに表示されていますが、コマンドで入力すると「~」は上の方に表示されます。両者は同じものなのでご安心ください。

 

 

 

現在日時と書式設定

現在日時の取得と、書式設定の方法を紹介します。

時間は前0埋めされないため、0埋めを行いたい場合、下の例のように変数にいれて調整する必要があります。尚、分に関しては前0埋めする必要はありません。

# 現在時刻
echo %time%                       # 00:12:34.56

# 現在時刻
echo %time:~0,5%                  # 0:12

# 現在時刻 ※時分表記
echo %time:~0,2%時%time:~3,2%分   # 0時12分

# 現在時刻 ※時間を前0埋めする
set temptime=%time: =0%           # 前0埋めをするために変数に格納
echo %temptime:~0,5%              # 00:12

# 現在時刻 ※時間を前0埋めする+時分表記
set temptime=%time: =0%                             # 前0埋めをするために変数に格納
echo %temptime:~0,2%時%time:~3,2%分%time:~6,2%秒     # 00時12分

# 現在時刻(秒まで)
echo %time:~0,8%                  # 00:12:34

# 現在時刻(秒まで)+前0埋め
set temptime=%time: =0%           # 前0埋めをするために変数に格納
echo %temptime:~0,8%              # 00:12:34

# 現在時刻の時間だけを取得する
echo %time:~0,2%                  #  0 (0時の時の表記)

# 現在時刻の時間だけを取得する+前0埋め
set temptime=%time: =0%           # 前0埋めをするために変数に格納
echo %temptime:~0,2%              # 00

# 現在時刻の分だけを取得する
echo %time:~3,2%                  # 12

# 現在時刻の秒だけを取得する
echo %time:~6,2%                  # 34

 

 

 

年月日+時分で表記

上の日付と時刻を合わせ、よく使う表記の例です。

# yyyy/mm/dd hh:mm:ss
set temptime=%time: =0%           # 時間を前0埋め
echo %date% %temptime:~0,8%
# 結果 : 2022/09/12 00:12:34


# yyyy/mm/dd hh:mm:ss
set temptime=%time: =0%
echo %date::=-% %temptime:~0,8%
# 結果 : 2022-09-12 00:12:34


# yyyy年mm月dd日 hh時mm分ss秒
echo %date:~0,4%年%date:~5,2%月%date:~8,2%日 %temptime:~0,2%時%time:~3,2%分%time:~6,2%秒
# 結果 : 2022年09月12日 00時12分34秒


# yyyymmddhhmmss
set temptime=%time: =0%
echo %date:~0,4%%date:~5,2%%date:~8,2%%temptime:~0,2%%time:~3,2%%time:~6,2%
# 結果 : 20220912001234

テキストを読み込みコンソールへ表示する

テキストファイルを読み込む処理です。

同様の処理を実行したい時の参考・テンプレとして使用できます。

<#
[概  要] テキストを読み込みコンソールへ表示する
[引  数] $targetFile :  読み込むテキストファイル(フルパス)
[戻り値] なし
[備  考] 
#>
Function readTextFile($targetFile){

    $file_contents = (Get-Content $targetFile) -as [string[]]

    # 配列の中身を表示
    foreach ($line_contents in $file_contents) 
    {
        Write-Host $line_contents
    }

}

# メソッドの実行
readTextFile("C:\test\Sample1.csv")	

# 実行結果
1,a
2,b
3,c

文字列の右から〇文字取得する

文字列の右から〇文字取得する(他の言語でいうところのright関数)には「substring」を使用します。

# 構文
# "切り取る対象の文字列"と"切り取る文字数"は2つずつ設定することに注意
"切り取る対象の文字列".substring(("切り取る対象の文字列".length) -1 * 切り取る文字数 , 切り取る文字数)

# "1234567890"について、右から2文字取得する
"1234567890".substring(("1234567890".length) -1 * 2 , 2)    # 90

# "1234567890"について、右から4文字取得する
"1234567890".substring(("1234567890".length) -1 * 4 , 4)    # 7890

# "1234567890"について、右から6文字取得する
"1234567890".substring(("1234567890".length) -1 * 6 , 6)    # 567890

# "1234567890"について、右から8文字取得する
"1234567890".substring(("1234567890".length) -1 * 8 , 8)    # 34567890

文字列の〇文字目から〇文字取得する(substring)

ある文字列に対し、〇文字目から〇文字取得するには「substring」を使用します。

# 構文
"切り取る対象の文字列".substring(開始位置 ,切り取る文字数)

<# 補足
・開始位置、終了位置は0から始まる点に注意(1文字目=0で指定)
・開始位置~切り取る文字数は、その文字列の長さを超えてしまうとエラーになる
#>

# 1文字目から3文字取得する
"1234567890".substring(0 ,3)      # 123

# 3文字目から3文字取得する
"1234567890".substring(2 ,3)      # 345

# 3文字目から100文字取得する
#"1234567890".substring(2 ,100)   # エラー

# X文字目から文字の最後まで取得する
"1234567890".substring(2 ,("1234567890").Length - 2)   # 34567890
"1234567890".substring(4 ,("1234567890").Length - 4)   # 567890
"1234567890".substring(6 ,("1234567890").Length - 6)   # 7890

特定の文字が含まれるかを調べる(IndexOf)

とある文字列に対し、指定した文字がどこにあるかを調べるには「IndexOf」を使用します。

この次に紹介する「Contains」とは次の違いがあります。

IndexOf … 文字があるか調べる+どこにあるか取得できる

Contains … 文字があるかのみ調べられる

# 構文
"チェックしたい文字列".IndexOf("探す文字列")

<# 補足
・文字位置は0から始まる(1文字目にある=0、2文字目にある=1となる)点に注意
・見つからない場合は「-1」が返る
・大文字小文字は区別される
・探す文字列は一文字でなくてもOK
#>

# 例
"English".IndexOf("E")    # 0
"English".IndexOf("n")    # 1
"English".IndexOf("A")    # -1  ※ない場合は「-1」が返る
"English".IndexOf("is")   # 4   ※探す文字は一文字でなくてもOK

# IF文の例
if ("English".IndexOf("E") -ge 0){  # "-ge 0":0以上であれば=見つかれば
    return $true;   # 探す文字列が含まれている時の処理
}else{
    return $false;  # 探す文字列が含まれていない時の処理
}

 

 

 

特定の文字が含まれるかを調べる(Contains)

とある文字列に対し、指定した文字を含むか調べるには「Contains」を使用します。

# 構文
"チェックしたい文字列".Contains("探す文字列")   # True:含む、False:含まない

<# 補足
・大文字小文字は区別される
・探す文字列は一文字でなくてもOK
#>

# 例
"English".Contains("E")    # True
"English".Contains("A")    # False
"English".Contains("e")    # False ※大文字小文字は区別される
"English".Contains("Eng")  # True  ※探す文字は一文字でなくてもOK

# IF文の例
if ("English".Contains("E") -eq $true){
    return $true;   # 探す文字列が含まれている時の処理
}else{
    return $false;  # 探す文字列が含まれていない時の処理
}

 

あわせて読みたい

前方一致、後方一致のやり方はこちらです

前方一致、後方一致の方法はこちら

大文字、小文字の変換

小文字→大文字に変換するには「ToUpper」、大文字→小文字に変換するには「ToLower」を使用します。

# 小文字 → 大文字に変換する
文字列.ToUpper()  

# 例
"abc".ToUpper()  # ABC
"def".ToUpper()  # DEF


# 大文字 → 小文字に変換する
文字列.ToLower()

# 例
"XYZ".ToLower()  # xyz

 

 

半角、全角の変換

半角→全角、全角→半角に変換するには次の構文を使用します。 ※2行とも必要です

# 半角 → 全角に変換する
Add-Type -AssemblyName "Microsoft.VisualBasic"
[Microsoft.VisualBasic.Strings]::StrConv(文字列, [Microsoft.VisualBasic.VbStrConv]::Wide)

# 例:"ABC"を変換する
Add-Type -AssemblyName "Microsoft.VisualBasic"
[Microsoft.VisualBasic.Strings]::StrConv("ABC", [Microsoft.VisualBasic.VbStrConv]::Wide)
# 結果:ABC


# 全角 → 半角に変換する
Add-Type -AssemblyName "Microsoft.VisualBasic"
[Microsoft.VisualBasic.Strings]::StrConv(文字列, [Microsoft.VisualBasic.VbStrConv]::Narrow)

# 例:"XYZ"を変換する
Add-Type -AssemblyName "Microsoft.VisualBasic"
[Microsoft.VisualBasic.Strings]::StrConv("XYZ", [Microsoft.VisualBasic.VbStrConv]::Narrow)
# 結果:XYZ

 

 

大文字⇔小文字 + 半角⇔全角の両方を行う

上で紹介した変換を両方行う例です。

# 1.大文字 → 小文字 + 全角の例
# ABC ⇒ abc
Add-Type -AssemblyName "Microsoft.VisualBasic"
[Microsoft.VisualBasic.Strings]::StrConv("ABC".ToLower(), [Microsoft.VisualBasic.VbStrConv]::Wide)


# 2.大文字 → 小文字 + 半角の例
# ABC ⇒ abc
Add-Type -AssemblyName "Microsoft.VisualBasic"
[Microsoft.VisualBasic.Strings]::StrConv("ABC".ToLower(), [Microsoft.VisualBasic.VbStrConv]::Narrow)


# 3.小文字 → 大文字 + 全角の例
# abc ⇒ ABC
Add-Type -AssemblyName "Microsoft.VisualBasic"
[Microsoft.VisualBasic.Strings]::StrConv("abc".toUpper(), [Microsoft.VisualBasic.VbStrConv]::Wide)


# 4.小文字 → 大文字 + 半角の例
# abc ⇒ ABC
Add-Type -AssemblyName "Microsoft.VisualBasic"
[Microsoft.VisualBasic.Strings]::StrConv("abc".toUpper(), [Microsoft.VisualBasic.VbStrConv]::Narrow)

文字列が空であるかのチェック

文字列が空であるかのチェックする方法です。

空の場合Trueが、それ以外Falseが変えるようになっています。

# 構文
if([string]::IsNullOrEmpty('チェックする文字列'))
{
    return $true;   # NULL、''の場合:true
}
else
{
    return $false;  # それ以外:False
}

# 実行例  ※コピーしてそのまま使用できます
if([string]::IsNullOrEmpty('aaa'))
{
    return $true;
}
else
{
    return $false;
}
# 結果 : False

 

 

文字列が空であるかのチェック(補足)

ここは若干余談ですが、「nullでない場合これをする」というIF文を作りたい場合、頭に「-not」を付ければ目的の文となります。

# 構文
if(-not [string]::IsNullOrEmpty('チェックする文字列'))
{
    実行文
}

# 実行例  ※コピーしてそのまま使用できます
if(-not [string]::IsNullOrEmpty('aaa'))
{
Write-Host "Not Null"
}
# 結果 : Not Null

数値であるかのチェック

数値であるかのチェックをするには次の構文を使います。

# 構文
[double]::TryParse(チェックする数値や文字など,[ref]$null)

# 実行例
[double]::TryParse(1,[ref]$null)         # True

[double]::TryParse(1.23,[ref]$null)      # True

[double]::TryParse('a',[ref]$null)       # False

[double]::TryParse('123',[ref]$null)   # False

[double]::TryParse('?',[ref]$null)       # False

[double]::TryParse(null,[ref]$null)      # エラー

 

 

チェックを使ったIF文

上の数値チェックを使ったIF文の例です。

# 例1 : Trueが返る例
if([double]::TryParse(1,[ref]$null) -eq $true)
{
    # True時の処理
    Write-Host "True"
}else{
    # False時の処理
    Write-Host "False"
}


# 例2 : Falseが返る例
if([double]::TryParse("a",[ref]$null) -eq $true)
{
    # True時の処理
    Write-Host "True"
}else{
    # False時の処理
    Write-Host "False"
}

余りを計算する

powershellで余りを計算するには「%」を使います。(vbaでいうところのmodのようなものです)

# 余りを計算する
3 % 2   # 1
7 % 4   # 3
8 % 4   # 0
8 % 3   # 2