実践的 Igor メモ 2019

連番のファイルへの変換 ~~ Windows の Powershell の利用

OceanView で一定時間間隔でスペクトルデータを保存する際、誤って連番ではなく日付時刻形式でセーブしてしまった場合 (たとえばbk_Absorbance_15-32-56-943.txt, bk_Absorbance_15-33-06-801.txt, ・・・といった具合)、 エクスプローラーで一つ一つ手作業でファイル名を連番に変更していく(bk000.txt, bk001.txt,・・・)のは、 化学にとって大事な資質、忍耐力を鍛える上で推奨できる。 けれども十分そうした鍛錬を積んだ人であれば、Powershell を使う手がある。 ここではアドホックな手法を紹介する。

まずエクスプローラーで適当なフォルダーを作成し(「新しいフォルダー」としておく)、 一連のデータファイルをコピーする(元のファイルは消さないのが原則。誤って消去したりした時、取り返しがつかない)。 エクスプローラー上で、Shift キーを押しながら「新しいフォルダー」をこづいて出てくるメニューから「Powershellウィンドウをここで開く」を選択すると Powershell が起動する。 ここでまずファイルを確認するためコマンドプロンプト(「PS H:¥新しいフォルダー>」などと表示されているところ)に

dir↵

と打ち込もう(折り目正しくは Get-ChildItem。短縮コマンドは gci。Unix 好きは ls も可)。 するとファイル一覧が表示されるので、ファイルを確認しよう。 後は次のように入力していけばよい(>の前には「PS H:¥新しいフォルダー」とか付いているが省略)。

> [string[]]$FList = dir| sort LastWriteTime↵
> $n = 0↵
> ForEach($F in $FList){$NF = "ah" + $n.ToString("000") + ".txt"; ren $F $NF; $n++}↵

この後、もう一度 dir↵ と打ち込むと、 ファイル名がah000.txt、ah001.txt、ah002.txt、ah003.txt、・・・となっているはずである。 ah のところを mnk にすると、生成されるファイル名は mnk000.txt、mnk001.txt、・・・となる。 また $n.ToString("000") を $n.ToString("00") とすれば、 ファイル名は ah00.txt、ah01.txt、・・・となる。

ざっくり言うと、この操作では $FList にファイル名一覧の配列が入り (| sort LastWriteTime とすることで、更新時刻順になる)、 その中の要素それぞれ($F)について名前の変更を行っている。 ためしにこの一連の操作の後、$FList↵ と打ち込むと元のファイルの名前がずらりと表示されるのが分かるだろう。 なお ren は折り目正しくは Rename-Item とするところ。


表紙のページへ