Muni Bus

パソコンの操作方法や設定方法を忘れないようにメモしています。ブログを一回引っ越ししているので、所々表示がかなり乱れています・・・

PowerShell

【PowerShell】ディレクトリ内のファイルの親ディレクトリを取得する

Get-ChildItemコマンドレットを使い、DirectoryプロパティのNameプロパティを参照する。 PS > (Get-ChildItem C:\Windows\Fonts\ms*.ttc).FullName C:\Windows\Fonts\msgothic.ttc C:\Windows\Fonts\msjh.ttc C:\Windows\Fonts\msjhbd.ttc C:\Windows\Fonts\…

【PowerShell】ディレクトリ内のファイルのフルパスを取得する

Get-ChildItemコマンドレットを使い、FullNameプロパティを参照する。 PS > Get-ChildItem C:\Windows\Fonts\ms*.ttc ディレクトリ: C:\Windows\Fonts Mode LastWriteTime Length Name ---- ------------- ------ ---- -a---- 2021/06/05 21:05 8990160 msgo…

【PowerShell】ディレクトリ内のファイルのファイル名を取得する

Get-ChildItemコマンドレットを使う。ファイル名だけ欲しければ-Nameオプションを付ける。Nameプロパティを参照しても結果は同じ。 PS > Get-ChildItem C:\Windows\*.exe ディレクトリ: C:\Windows Mode LastWriteTime Length Name ---- ------------- -----…

【PowerShell】フォルダーを開く

Invoke-Itemコマンドレットを使う。以下は「C:\Program Files」を開いた例。 PS > Invoke-Item "C:\Program Files"

【PowerShell】パイプライン利用による繰り返し処理の高速化

次の3つのスクリプトは、C:\Windows\System32以下のすべてのファイルとそのファイルサイズを一覧形式でCSV形式のファイルに出力するスクリプトである。それぞれ全く同じ結果が得られる。 1番目(mc1.ps1)は、ファイルの一覧を変数にすべて格納し、その後、…

【PowerShell】テキストファイルの一括読み込み

3通りの方法がある。 Get-Contentコマンドレットを使う Get-Content変数構文を使う System.IO名前空間のFileクラスのReadAllTextメソッドを使う 1と2は行単位で読み込むが、3は文字単位で読み込む。読み込み速度は早い順に3,2,1。以下はサイズが300万バイト…

【PowerShell】サイズが非常に大きなテキストファイルを簡単に作成する

動作確認でサイズが非常に大きなテキストファイルが必要なときがあるが、PowerShellでは文字リテラルに*演算子を使うことで、簡単に作成することができる。 以下の例ではWindows環境下においてサイズが5億バイト(≒477 MB)のファイルを、パイプラインを使…

【PowerShell】コマンドラインで次の行にも続けて入力をする

行の最後に「`」(グレーブアクセント)を入力して改行する。 PS > Write-Output ("ABC" + "123") ABC123 PS > Write-Output ("ABC"` >> + "123") ABC123

【PowerShell】エスケープシーケンスを行う

エスケープシーケンス(画面上で普通に表記できずキーボードからも直接入力できない特別な意味を持つ文字の表記)を行うには、「`」(グレーブアクセント)記号と特定の文字を組み合わせて表現する。 文字列の改行を表記する場合、通常は「`r`n」と入力する…

【PowerShell】ファイル作成時のデフォルトの改行コード

PS > "ABC" | Out-File temp.txt PS > Format-Hex .\temp.txt パス: ○○○\temp.txt 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 00000000 FF FE 41 00 42 00 43 00 0D 00 0A 00 .þA.B.C..... PS > "あいう" | Out-File -Append .\temp.txt PS > Format-…

【PowerShell】ファイル作成時のデフォルトの文字コード

PowerShellにおけるファイル作成時のデフォルトの文字コードはUTF-16。Out-Fileコマンドレットで試してみる。 PS > "A1`nあい" | Out-File temp.txt PS > Format-Hex .\temp.txt パス: ○○○\temp.txt 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 000000…

【PowerShell】あるディレクトリ以下のファイルすべてを絶対(相対)パスで得る

絶対パスはGet-ChildItemコマンドレットとFullNameプロパティを使うことで簡単に得ることができる。相対パスはパイプラインで-Relativeオプションを付けたResolve-Pathコマンドレットに渡す。 PS C:\> Set-Location Windows PS C:\Windows> (Get-ChildItem -…

【PowerShell】ファイルのパスを絶対パス(相対パス)を得る

PS C:\> Set-Location C:\Windows\System32 PS C:\Windows\System32> (Get-ChildItem drivers\etc).Name hosts lmhosts.sam networks protocol services PS C:\Windows\System32> (Get-ChildItem drivers\etc).FullName C:\Windows\System32\drivers\etc\hos…

【PowerShell】オブジェクトの型を調べる

GetTypeメソッドを使う。FullNameプロパティに型の完全修飾名が含まれている。 PS > (1).GetType().FullName System.Int32 PS > (2.3).GetType().FullName System.Double PS > ("A").GetType().FullName System.String PS > (1..10).GetType().FullName Syst…

【PowerShell】テンポラリファイル(一時ファイル)を作成する

New-TemporaryFileコマンドレットを使う。使ったらファイル名が返されるのではなく、使った時点でサイズが0のファイルが作成される。このファイルは自動で消されないため、作業が終わったら、手動で削除する必要がある。 PS > $tempfile = New-TemporaryFile…

【PowerShell】文字列を特定の文字または文字列で分割する

RegexクラスのSplitメソッドを使う。最初の例ではStringクラスのSplitメソッドを使用しているが、分割の基準となる文字を1つしか指定できないため、うまくいかない。そのため、その次の例のとおりに、正規表現のパターンを「[\s]+」(1つ以上の連続した空白…

【PowerShell】文字列の前後の空白を取り除く

Trimメソッドは文字列の前後、TrimStartは前、TrimEndは後の空白を取り除く。 PS > $s = " Hello. " PS > "|" + $s.Trim() + "|" |Hello.| PS > "|" + $s.TrimStart() + "|" |Hello. | PS > "|" + $s.Trimend() + "|" | Hello.| これらのメソッドは、引数に…

【PowerShell】コマンドラインで自作関数を使用する

コマンドラインで関数を定義したスクリプトを呼び出せばよい。ただし、実行時には実行演算子(&)で呼び出すのではなくドットソースをすること。ドットソースをすることで、スクリプト内で定義された変数と関数は、そのスクリプト終了後も持続する。スクリ…

【PowerShell】ファイルの更新日時を今の日時に修正する

Set-ItemPropertyコマンドレットとGet-Dateコマンドレットを使う。以下は実際に更新日時を今の日付に修正した例。Set-ItemPropertyコマンドレットはエイリアスspを使用している。 PS > (Get-ChildItem .\text.txt).LastWriteTime 2023年3月30日 22:57:54 PS …

【PowerShell】ファイルの作成日時、更新日時、アクセス日時を修正する

Set-ItemPropertyコマンドレットを使う。-NameオプションにそれぞれCreationTime, LastWriteTime, LastAccessTimeを指定すれば、それぞれの日時を修正することができる。以下の例では、最初にコマンドレットをそのまま使用しているが、それ以降は初期状態で…

【PowerShell】GUIDを作成する

System名前空間のGuid構造体のNewGuidメソッドを使う。 PS > [Guid]::NewGuid() Guid ---- bb47f880-1af8-4a71-9faa-2d739b7f6e55 PS > # バイト列で得る。 PS > [Guid]::NewGuid().ToByteArray() 225 238 3 62 117 14 162 68 142 73 168 38 188 122 189 94 …

【PowerShell】画像ファイルのファイル形式を判定する

System.Drawing名前空間のImageクラスとSystem.Drawing.Imaging名前空間のImageFormatクラスを使う。画像ファイルをImageクラスのFromFileメソッドで読み込み、RawFormatプロパティと比較をすればよい。 ImageクラスのRawFormatプロパティは指定したファイル…

【PowerShell】画像ファイルの色数を取得する

System.Drawing.Imaging名前空間のPixelFormat列挙型を使う。ImageクラスのFromFileメソッドで画像を読み込み、PixelFormat列挙型を確認すればよい。 最初にAdd-Typeコマンドレットを使用して、System.Drawing名前空間のクラスを使えるようにする。 PS > Add…

【PowerShell】画像ファイルのサイズを取得する

System.Drawing名前空間のImageクラスを使う。FromFileメソッドで画像を読み込み、プロパティを確認すればよい。以下は、横512ピクセル、縦256ピクセル、色数がモノクロ2階調のPNGファイルを読み込んで表示させた例。Width、Height、Sizeプロパティで、それ…

【PowerShell】カレントディレクトリを取得する

PowerShellにおけるカレントディレクトリは以下の2つが存在する。 プロンプトに表示されているディレクトリ PowerShellのウィンドウを表示するために実行されたpowershell.exe(PowerShellのウィンドウの実体)の作業フォルダー(ディレクトリ) 一般に「カ…

【PowerShell】カレントディレクトリを基準にして相対パスから絶対パスを得る

System.IO名前空間のPathクラスのGetFullPathメソッドを使う。このメソッドはファイルやディレクトリの存在の判定するメソッドではなく、あくまでカレントディレクトリを基準にして絶対パスを作るだけであることに注意。 なお、GetFullPathメソッドの基準と…

【PowerShell】NULL(ヌル)の判定

$null自動変数を使う。以下、実用的ではないがわかりやすい例。 C:\WindowsとC:\の親ディレクトリを取り出そうとするが、C:\Windowsの親ディレクトリはC:\だが、C:\はルートディレクトリであり親ディレクトリがないためにヌルが戻ってくる。それを判定してい…

【PowerShell】カルチャを得る

カルチャ(地域設定)を得るには、Get-Cultureコマンドレットを使う。 PS > Get-Culture LCID Name DisplayName ---- ---- ----------- 1041 ja-JP 日本語 (日本) PS > Get-Culture | Format-List Parent : ja LCID : 1041 KeyboardLayoutId : 1041 Name : j…

【PowerShell】数値や文字列を整形して出力する

StringクラスのFormatメソッドを使う。以下、実行例。 PS > $n = 2 PS > $d = 4.321 PS > $s = "*" PS > [String]::Format("結果[{0,2}] = {1,7:F4} {2}", $n, $d, $s) 結果[ 2] = 4.3210 *

【PowerShell】ファイルの各情報を得る

FileInfoクラスの各プロパティを参照する。ファイルを指定すれば、ファイルの置かれたディレクトリ名、ファイル名、拡張子、ファイルの大きさ(バイト単位)、最終書き込み日などを簡単に取り出すことができる。 以下は例としてD:\workに置いたファイルtext.…