
- 変更履歴
- 1 はじめに
- 2 ファイル・フォルダー操作のコマンドレット
- 3 外部コマンドの実行
変更履歴
- Rev. 0.7 : 2025年05月02日
- 新規作成
1 はじめに
PowerShellって、従来のMSDOSコマンドプロンプトやLinuxなどUNIX系のBashと比べると
どうも難しい。
とにかく、“コマンドレット”っていうのが、よくわからない。
「PowerShell実践ガイドブック」
なる本を購入してみたが、分厚くてくじけそうになりました。
それじゃー、理解できるところを始めようと、
まずは身近なファイル操作のコマンドレットをまとめてみました。
「初めてのPowerShell」は、PowerShellスクリプトが書けるようになるまでを、
シリーズとしてまとめていきたいと思っています。
・ コマンドレットとは
・ パイプラインとリダイレクション
・ PowerShellスクリプト
初回は、身近なファイル・フォルダー操作のコマンドレットと、
exe形式の外部コマンドやコマンドプロンプトのBATファイルの起動についてから。
ファイル・フォルダー操作のコマンドレットで、
コマンドレットがどんなものであるかイメージを掴めると思います。
あくまでも、各コマンドレットのイメージを掴むことを目的としていますので、
各コマンドレットの全仕様はコマンドレットのリンクページでご確認くださるよう
お願いいたします。
2 ファイル・フォルダー操作のコマンドレット
本章では、PowerShellでのファイル・フォルダー操作に関するコマンドレットの概要を示します
(参考:
ファイルとフォルダーの操作 | Learn > PowerShell
)。
各コマンドレットのオプションパラメータなど詳細については、
Microsoftの次のページをご覧いただければと思います。
Microsoft.PowerShell.Management
応用としてのパイプラインやリダイレクションなどの利用ついては、本記事では示さず、 別の記事で示すことにします。
表2-1 ファイル・フォルダー操作のコマンドレット一覧
操作 | Windowsコマンドプロンプト | PowerShell |
---|---|---|
ファイルの一覧表示 | dir | Get-ChildItem |
カレントフォルダーの取得 | echo %CD% | Get-Location |
カレントフォルダーの移動 | cd | Set-Location |
空ファイルの作成 | copy nul test.txt | New-Item |
ファイルのコピー | copy | Copy-Item |
ファイルの移動 | move | Move-Item |
ファイルのリネーム | ren | Rename-Item |
ファイル削除 | del | Remove-Item |
フォルダーの作成 | mkdir | New-Item -ItemType "Directory" |
フォルダーのコピー | xcopy | Copy-Item |
フォルダーの移動 | move | Move-Item |
フォルダーのリネーム | ren | Rename-Item |
フォルダーの削除 | rmdir | Remove-Item |
ファイルの内容表示 | type | Get-Content |
ファイルへの書き込み | echo xxxx>test.txt | Set-Content |
ファイルへの追記 | echo xxxx>>test.txt | Add-Content |
ファイルを空にする | copy nul test.txt | Clear-Content |
ファイル中の文字検索 | findstr | Select-String |
ファイルの検索 | where /R c:\dev\ps\file\ *.txt | Get-ChildItem |
ファイルの属性変更 | attrib | Set-ItemPropath |
2.1 ファイル・フォルダーの一覧表示
指定のパス配下のファイルとフォルダーの一覧は、 “Get-ChildItem”で取得することができます。
2.1.1 単純な例
“-Path”を省略した場合は、カレントフォルダーの一覧を表示します。
デフォルトでは、Get-ChildItemは、アイテムのモード(Attributes)、LastWriteTime、
ファイルサイズ(Length)、およびNameをリストします。
Modeプロパティの文字は、次のように解釈できます
デフォルトの検索オプションでは、隠しファイルは表示されません。
“-Force”オプションを付与することで、隠しファイルも表示されるようになります。
2.1.2 ワイルカード表示
# ワイルドカードで指定する
PS C:\> Get-ChildItem -Path ./t*,r*
2.1.3 サブフォルダーの内容も再帰的に表示
“-Recurse”、または“-r”オプションを付けると、
サブフォルダーの内容を表示することができます。
# サブフォルダを再帰的に呼び出す
PS C:\> Get-ChildItem -Path ./testfolder -Recurse
PS C:\> Get-ChildItem -Path ./testfolder -r
2.2 カレントフォルダーの取得
現在作業しているカレントフォルダーの位置は、 “Get-Location”で取得することができます。
対話で実行している場合、プロンプトに既に表示されているので使う必要はないと思いますが、
スクリプトの中では使うことがあるのかもしれません。
PS C:\dev\ps\file> Get-Location
Path
----
C:\dev\ps\file
2.3カ カレントフォルダーの移動
カレントフォルダーは、 “Set-Location”で移動することができます。
Set-Location -Path c:\dev\
Set-Location -Path c:\d?v
Set-Location c:\d?v
他にも、次のコマンドレットでカレントフォルダーを移動することができます。
・ “Push-Location
”
・ “Pop-Location
”
2.4 空ファイルの作成
空のファイルの作成は、“New-Item”
に“-ItemType “File””を指定して実行します。
“-ItemType “File””が指定されなかった場合も、ファイルとして作成されます・
“-Path”オプションで、ファイルの作成位置を指定することができます。
PS C:\> New-Item test(1).txt -ItemType "File"
PS C:\> New-Item -Path C:\test\test(2).txt -ItemType "File"
PS C:\> New-Item -Name test(3).txt -ItemType "File"
PS C:\> New-Item ./漢字ファイル.txt
2.5 ファイルのコピー
ファイルのコピーは、 “Copy-Item”を使用します。
PS C:\> Copy-Item -Path test.txt -Destination folder
PS C:\> Copy-Item -Path test.txt,b.txt -Destination folder
PS C:\> Copy-Item -Path ./test1.txt -Destination test2.txt
PS C:\> Copy-Item -Path test*.txt -Destination folder
PS C:\> Copy-Item test*.txt folder
2.6 ファイルの移動
ファイルの移動は、 “Move-Item”を用いて行います。
PS C:\> Move-Item -Path a.txt -Destination b.txt
PS C:\> Move-Item -Path b.txt -Destination ./folder
# ワイルドカードを指定する例
PS C:\> Move-Item -Path a*.txt -Destination ./folder2
PS C:\> Move-Item b*.txt ./folder2
2.7 ファイルのリネーム
ファイルのリネームには、 “Rename-Item”を使用します。
PS C:\> Rename-Item -Path test.txt -NewName test2.txt
PS C:\> Rename-Item test2.txt test3.txt
2.8 ファイル削除
ファイルの削除は、 “Remove-Item”で行います。
PS C:\> Remove-Item -Path test.txt
PS C:\> Remove-Item -Path test.txt,test2.txt
PS C:\> Remove-Item -Path *.txt
PS C:\> Remove-Item *.txt
2.9 フォルダーの作成
フォルダーを作成する場合は、
“New-Item”に、“-ItemType "Directory"”を指定して
実行します。
パス中に存在しないフォルダーが混ざっていても、
途中の存在しないフォルダーを作成しながらフォルダーを作成していきます。
PS C:\> New-Item ./example -ItemType "Directory"
PS C:\> New-Item -Path ./subfolder/example2 -ItemType "Directory"
PS C:\> New-Item -Name example3 -ItemType "Directory"
PS C:\> New-Item ./subdir1,./subdir2 -ItemType "Directory"
PS C:\> New-Item ./subdir/grandchild -ItemType "Directory"
PS C:\> New-Item ./nonexist/child1/child2/child3/targetdir -ItemType "Directory"
# ワイルドカードの指定
PS C:\> New-Item -Path ./??? -Name subdir -ItemType "Directory"
2.10 フォルダーのコピー
ファイルのコピーと同様に、
“Copy-Item”を使用してフォルダーのコピーを行います。
コピー先に指定したフォルダーの配下にコピー先のフォルダーが作成されます。
PS C:\> Copy-Item -Path ./srcdir -Destination destdir -Recurse
2.11 フォルダーの移動
フォルダーの移動は、 “Move-Item”を用いて行います。
PS C:\> Move-Item -Path ./srcdir -Destination destdir -Recurse
2.12 フォルダーのリネーム
フォルダーのリネームには、 “Rename-Item”を使用します。
PS C:\> Rename-Item -Path oldfolder -NewName newfolder
PS C:\> Rename-Item oldfolder newfolder
2.13 フォルダーの削除
フォルダーの削除は、 Remove-Item”で行います。
PS C:\> Remove-Item folder
PS C:\> Remove-Item folder -Recurse
2.14 ファイルの内容表示
ファイルの内容表示を行うには、 “Get-Content”を使用します。
PS C:\> Get-Content -Path ../x.txt
PS C:\> Get-Content -Path x.txt,y.txt
PS C:\> Get-Content -Path *.txt
PS C:\> Get-Content *.txt
2.15 ファイルへの書き込み
“Set-Content”を用いることで、ファイルへの書き込みが行えます。
PS C:\> Set-Content -Path .\a.txt -Value 'Hello, World'
PS C:\> Set-Content -Path a1.txt,a2.txt -Value 'Hello, World'
PS C:\> Set-Content -Path .\b*.txt -Value 'Hello, World'
PS C:\> Set-Content .\c*.txt -Value 'Hello, World'
2.16 ファイルへの追記
“Add-Content”を用いることで、ファイルに更新が行えます。
PS C:\> Add-Content -Path .\a.txt -Value 'end of file'
PS C:\> Add-Content -Path a1.txt,a2.txt -Value 'end of file'
PS C:\> Add-Content -Path .\b*.txt -Value 'end of file'
PS C:\> Add-Content .\c*.txt -Value 'end of file'
2.17 ファイルを空にする
ファイルを削除しないが、内容を空にするには “Clear-Content”を使用します。
PS C:\> Clear-Content -Path a.txt
PS C:\> Clear-Content -Path a1.txt,a2.txt
PS C:\> Clear-Content -Path b*.txt
PS C:\> Clear-Content c*.txt -Force
2.18 ファイル中の文字検索
ファイル中の文字列検索には、 “Select-String”を使用します。
検索パターンや検索条件の指定にはいろいろあり、
またパイプを使っていろいろナコマンドレットと組み合わせて使うことが多いので、
本記事ではシンプルな検索例のみを示すだけにとどめます。
# カレントフォルダーのtxtファイル中にGetが含まれるものを列挙する
PS C:\> Select-String -Path .\*.txt -Pattern 'Get'
# cp932/unicode/utf(BOMあり)のファイルが検索可能
PS C:\> Select-String -Path .\*.txt -Pattern 'あ' -Encoding Default
# カレントフォルダーのtxtファイルでファイル名に1を含まないものを対象にGetが含まれるものを列挙する
PS C:\> Select-String -Path .\*.txt -Pattern 'Get' -Exclude *1*
# -NotMatchオプションでPatternに一致しない行を列挙する
PS C:\> Select-String -Path *.txt -Pattern "a" -NotMatch
2.19 ファイルの検索
ファイルの検索は、 “Get-ChildItem” の“-Filter”または“-Input”オプションを用います。
オプションだけで対応できない場合は、 “Where-Object”をパイプでつないで、プロパティを指定して条件を抽出します。
PS C:\> Get-ChildItem -Path c:\dev\ps\file\depfolder -Filter *.txt -Recurse -Force
PS C:\> Get-ChildItem -Path c:\dev\ps\file\deepfolder -Include *.txt -Recurse -Force
# 100バイトより大きいtxtファイルを取得
PS C:\> Get-ChildItem . -Filter *.txt -r | Where-Object { $_.Length -gt 100 }
2.20 ファイルの属性変更
“Set-ItemProperty”を使用すれば、
ファイルの属性と更新日、作成日、最終更新日を変更することができます。
# 読み取り専用にする
PS C:\> Set-ItemProperty -Path ./y.txt -Name IsReadOnly -Value $True
# 読み取り専用を解除
PS C:\> Set-ItemProperty -Path ./y.txt -Name IsReadOnly -Value $False
# 読み取り専用+システムファイル+隠しファイルとする
PS C:\> Set-ItemProperty -Path ./y.txt -Name Attributes -Value 'Hidden,System,ReadOnly'
# アーカイブ属性を付与
PS C:\> Set-ItemProperty -Path ./y.txt -Name Attributes -Value 'Archive'
# 複数ファイルを対象に操作
PS C:\> Set-ItemProperty -Path x.txt,y.txt -Name IsReadOnly -Value $True
PS C:\> Set-ItemProperty -Path *.txt -Name IsReadOnly -Value $True -WhatIf
PS C:\> Set-ItemProperty -Path *.txt -Name IsReadOnly -Value $True -Confirm
3 外部コマンドの実行
3.1 ネイティブコマンド
オペレーティング システムにインストールされている実行可能ファイルを
ネイティブコマンドと言います。
Windows標準の外部コマンドをはじめとするexe実行ファイルであれば、
コマンドプロンプトと同様に、
PowerShellプロンプトで実行ファイル名をコマンドとして入力するだけで実行できます。
① 直接コマンド名を入力する
② “Start-Process”コマンドレットにより起動する
【直接コマンド名を入力する】
Windows標準の外部コマンドをはじめとするexe実行ファイルであれば、
コマンドプロンプトと同様に、
PowerShellプロンプトで実行ファイル名をコマンドとして入力するだけです。
パスが通っていない場合、絶対パスもしくは相対パスでプログラムを実行することができます。
【“Start-Press”コマンドレットにより起動する】
以上
本記事の元となっているWordで作成したPDFを
ページ最後に貼り付けました。
少しでも役に立てていただければ、うれしく思います。
このPDFファイルは、自由に配布されてもかまいません。
ただし、再配布の際には、
入手元と著者名は明らかにしてください。
なお、上のPDFファイルの内容、また本文中の記述に、
誤字や脱字、誤った内容の記述など見つかりましたら、
下に示すフォームでご連絡いただければ幸いです。