Muni Bus

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

【PowerShell】コマンドの実行時間を測定する

Measure-Commandコマンドレットを使う。Measure-Commandの後に、実行時間を測定したいコマンドなどを波括弧「{ }」で挟んで入力して、このコマンドレットを実行する。

以下は、フォルダーC:\Windows\SysWOW64(サブディレクトリ内も含む)から、note~で始まるファイルを検索した例。

PS > Measure-Command {Get-ChildItem C:\Windows\SysWOW64 -include note* -recurse -name}
Days : 0
Hours : 0
Minutes : 0
Seconds : 10
Milliseconds : 122
Ticks : 101224232
TotalDays : 0.000117157675925926
TotalHours : 0.00281178422222222
TotalMinutes : 0.168707053333333
TotalSeconds : 10.1224232
TotalMilliseconds : 10122.4232

実行時間は見てのとおり。この例では、約10.12秒かかったということ。

【PowerShell】文字列の入力を読み取る

Read-Hostコマンドレットを使う。このコマンドレットを使うと、Enterキーの入力待ち状態になる。入力された文字列は返される。プロンプトに表示する文字列を指定することができるが、最後に1バイトのコロンが強制的に付与される。

PS > Read-Host
abc
abc
PS > Read-Host "入力をどうぞ"
入力をどうぞ: abc
abc

返された文字列は変数に代入できる。

PS > $r = Read-Host "入力をどうぞ"
入力をどうぞ: abc
PS > $r
abc

【Vim】検索するときに英文字の大文字小文字を区別する

Vimは「/」(スラッシュ)コマンドを使用して検索をするとき、初期状態では英文字(半角のA~Zとa~z)の大文字と小文字は区別されずに検索される(例えばAAAを検索するとAAaにもヒットする)。これを区別するには以下のコマンドを次移行する

:set noignorecase

検索時の英文字の大文字小文字を同一視することを明示的に設定するには、以下のようにする。

:set ignorecase

上記の設定をしなくても、検索する文字列に「\c」を含めると、上記の設定を無視して大文字小文字を無視して検索をする。「\C」を含めるとsetコマンドによる設定を無視して強制的に大文字小文字を区別して検索する。


/String\c

String、STRING、stringなどを検索

 

/String\C

Stringのみを検索

【R】正規表現のパターンに一致した文字列のみを取り出す

regmatches関数とregexpr関数を組み合わせることで、正規表現のパターンに一致したその文字のみを取り出すことができる。

以下は、文字型ベクトルからパターンに一致した文字のみをとりだした例。パターン「^1\\.[1-2]」の解釈は、「先頭文字が「1」で次の文字が「.」(ピリオド)でその次の文字が「1」か「2」」である(\\と\を2個並べていることに注意)。よって該当する文字は「1.1」と「1.2」のみであり、ベクトルの1つ目と2つ目の要素が該当し、そのパターンに一致した「1.1」と「1.2」が返されている。

> st <- c("1.1.1", "1.2.1", "1.3.1")
> regmatches(st, regexpr("^1\\.[1-2]", st))
[1] "1.1" "1.2"

これを利用すると、例えばApacheのログファイルから、アクセス元のIPアドレスのみを簡単に抜き出すことができる。Apacheのログは、通常は以下のような書式である。

XX.XX.XX.XX - - [XX/XXX/XXXX:XX:XX:XX +0900] "GET ~"
XX.XX.XX.XX - - [XX/XXX/XXXX:XX:XX:XX +0900] "GET ~"
・・・

この各行が1行ごとにベクトルvに代入されている場合は、以下のようにすれば、先頭のIPアドレスのみを文字ベクトルとして抜き出すことができる。

> regmatches(v, regexpr("^[0-9]{1,3}(\\.[0-9]{1,3}){3}", v))
[1] "XX.XX.XX.XXX" "XXX.XXX.X.XX" "X.XXX.XX.X"
・・・

【make】makefileの例(複数のファイルから1つのファイルを作成する)

複数のファイルから1つのファイルを作成する場合の例。

upLaTeXでPDFファイルを作成する

元ファイル doc.tex docsub1.tex docsub2.tex
作成するPDFファイル doc.pdf

doc.pdf: doc.tex docsub1.tex docsub2.tex
     ptex2pdf -l -u $<

自動変数「$<」は、1行目の一番左に書いたものに自動で置き換わる。

【PowerShell】ディレクトリー(サブディレクトリー含む)からファイル名を指定してファイルを検索する

Get-ChildItemコマンドレットは、ファイル名を指定してファイルの検索を行うことができる。-Recurseオプションをつけると、そのフォルダーにある全てのサブディレクトリの中も検索する。

以下は、ディレクトリーC:\Windowsおよびそのサブディレクトリーから、ファイル名がnoteで始まりかつ拡張子がexeのファイルを検索した例。-nameオプションをつけることで、ファイル名のみが表示されるようになる。

PS > Get-ChildItem C:\Windows -include note*.exe -recurse -name
notepad.exe
System32\notepad.exe
SysWOW64\notepad.exe

【フォント】「メイリオ」と「Meiryo UI」

メイリオ

ClearTypeに最適化された画面上の見やすさを重視した日本語フォント。文字幅は全角幅(非日本語入力時に入力できる「A」や「1」などの英数字の2倍の幅)でデザインされているが、プロポーショナルフォントである。

 

Meiryo UI

メイリオ同様にClearTypeに最適化された画面上の見やすさを重視した日本語フォント。プロポーショナルフォント。UIとして多用されるひらがなやカタカナについて、狭い領域でも読みやすくなるように文字と文字の間隔などを調整したフォント。Windows 7から導入されたリボンインターフェースで文字を読みやすくするために導入された。

 

マイクロソフトによる、公式の情報は以下のページにある。
https://msdn.microsoft.com/ja-jp/library/windows/desktop/aa511282.aspx

【Windows PowerShell】ファイルの日付(最終更新日)を得る

Get-ItemPropertyコマンドレットを使用して得られるLastWriteTimeプロパティに、ファイルの最終更新日が格納されている。

PS > (Get-ItemProperty C:\Windows\explorer.exe).LastWriteTime
2018年7月6日 23:17:10
PS > (Get-ItemProperty C:\Windows\notepad.exe).LastWriteTime
2018年7月7日 5:56:52

このファイルの最終更新日は、変数に代入することもできる。

PS > $dt1 = (Get-ItemProperty C:\Windows\explorer.exe).LastWriteTime
PS > $dt2 = (Get-ItemProperty C:\Windows\notepad.exe).LastWriteTime

この日付は比較も行える。

PS > $dt1 -lt $dt2
True

【Windows PowerShell】ファイルからファイル名のフルパスなどを取り出す

ファイル名から、ファイル名のフルパス、ファイル名から拡張子を取り除いたもの、拡張子のみ、を取り出すには、Get-ChildItemコマンドレットによりファイルを取得して、そのFileInfoオブジェクトのプロパティを参照すると、簡単に取り出せる。

 

FullName
→ドライブ名や親ディレクトリ名も含める(いわゆるフルパス表記)

BaseName
→ファイル名から拡張子を(1つだけ)取り除いたもの

Extension
→ファイル名から拡張子だけ取り出したもの

 

以下は、カレントディレクトリに「aaa.txt」と「bbb.ccc.txt」という2つのファイルがある場合の使用例。

PS > Get-ChildItem -Name *.txt
aaa.txt
bbb.ccc.txt
PS > (Get-ChildItem aaa.txt).FullName
○:\○○\○○\aaa.txt
PS > (Get-ChildItem aaa.txt).BaseName
aaa
PS > (Get-ChildItem aaa.txt).Extension
.txt
PS > (Get-ChildItem bbb.ccc.txt).FullName
○:\○○\○○\bbb.ccc.txt
PS > (Get-ChildItem bbb.ccc.txt).BaseName
bbb.ccc
PS > (Get-ChildItem bbb.ccc.txt).Extension
.txt

Extensionプロパティの値は「.」(ピリオド)が先頭に付いていることに注意。