PNGファイルとJPGファイルをPDFファイルへ変換.Windows版のImageMagickをVimとWindows PowerShellで使うことを考える

2023/03/03
非常にタイトルが長い…….そして記事も恐らく長い.
この記事では,Windows版のImageMagickとVim,Windows PowerShellで使って
PNGファイルとJPGファイルをPDFファイルへ変換することを試みる.


続きを読む

Windows PowerShellでファイル名を一括変更する(Get-ChildItemとRename-Itemを使用)

2022/01/13
数年の沈黙を破り,このWikiを更新します.非公開のWikiばかり更新していたのですが,公開できる記事を少しずつ公開していくつもりです.
第1弾はWindows PowerShellでのファイル名一括置換操作.私がPowerShellのコマンドで使うもの上位です.

リネームソフトは世の中にたくさんあると思いますが,Windows環境で何も準備せずに使えてパワフルなので気に入っています.
ただし,よくわかってないところがあります.使えてるからいいか,くらいの認識でいるので,ご使用の際は注意してください.

説明

概要

Windows PowerShell上で正規表現を使ったファイル名の一括置換を行いたい場合,次の書式でコマンドを入力する.
Get-ChildItem -r 「パス」 | Rename-Item -NewName { $_.Name -replace 'Old','New' }
入力の例.これはカレントディレクトリ以下のファイルの変更を行いたい場合である.
> Get-ChildItem -r . | Rename-Item -NewName { $_.Name -replace '0405','0404' }
意味はファイル名に『0405』という文字列が含まれている場合,それをすべて『0404』に置換するというもの.

注意点

正規表現の書式
第一引数(元となる文字列,上の'Old')は正規表現に則ったエスケープが必要だが,第二引数(新しい文字列,上の'New')はエスケープを書くと逆にエラーになる*1
PS C:\Users\user\Desktop\Renamed\○○○○> Get-ChildItem -r C:\Users\user\Desktop\Renamed\○○○○\* `
| Rename-Item -NewName { $_.Name -replace '(X\+092_Y\+092)', 'X-095_Y\+092_moto\($1\)'}
Rename-Item : 指定された対象がパスまたはデバイス名を表しているため、名前を変更できません。
発生場所 行:1 文字:98
+ Get-ChildItem -r C:\Users\user\Desktop\Renamed\○○○○\* | Rename-Item <<<<
  -NewName { $_.Name -replace '(X\+092_Y\+092)', 'X-095_Y\+092_moto\($1\)'}
    + CategoryInfo          : InvalidArgument: (:) [Rename-Item]、PSArgumentException
    + FullyQualifiedErrorId : Argument,Microsoft.PowerShell.Commands.RenameItemCommand

PS C:\Users\user\Desktop\Renamed\○○○○>
PS C:\Users\user\Desktop\Renamed\○○○○> Get-ChildItem -r .\* | Rename-Item -NewName { $_.Name -replace '(X\+092_Y\+092)', 'X-095_Y+092_moto($1)'}
PS C:\Users\user\Desktop\Renamed\○○○○>
Get-ChildItemのパス指定部
Get-ChildItemのパス指定部は絶対パスでも相対パスでもよいが,何かをきっかけに変なエラーが出る.
Rename-Item : ソース パスとターゲット パスを同じにすることはできません。
これを完全に回避する方法はよくわからない.
パスの最後を「*」にしてカレントディレクトリに入ってコマンドを入力したり,
考え付く範囲でパス指定やファイル名を変更すると通ることがあるようだ.

*1 : 以下の例は仕事で使った処理(文字列)を公開しても良い文字列に手動で書き換えて,表示結果を推測しています.挙動が違う可能性もあるので注意してください.

2014/06/27(金)EPSファイル(jw_cadで作成した図)をinkscapeで追加編集する

jw_cadで作成した図面に,数式や文字,色などの情報を追加したいことはままあること.

この場合,回りくどいがjw_cad→EPSプリンタで印刷→GsViewでSVG変換→inkscapeで開くという手順を踏むと問題なく編集できる.

最初,jw_cad→PDFプリンタ→inkscapeで読み込みという手順で編集したら,EPSで再保存する際に出力がおかしくなった.

この方法は,別のソフトで作成した図をinkscapeで編集する場合に広く利用できると思われる.

Windows版GvimでPowerShellを呼び出す.

2013/07/23未分類import

Windows版GvimでPowerShellを呼び出す

設定ファイル(“vimrc等”)に下記を追加すると,
vim上で「:!プログラム名」とした際に起動するシェルがコマンドプロンプト(cmd.exe)から
Windows PowerShellに変更できる.
set shell=powershell.exe
PowerShellはコマンドプロンプトよりも高機能でパワフル*1なので,運用の幅が広がる.

*1 : だけどコマンド体系がわかりづらく,日本語のまともな資料もあまりないので非常に使いづらい.

呼び出したPowerShell上で別プロセスとしてプログラムを実行する

TeXのコンパイルは結構な時間が掛かるため,
VimでTeXを編集しているときに,普通にVimからPowerShellを呼び出し,
その上でプログラム(実行用バッチファイル)を実行しコンパイルすると,
数十秒から最悪数分間も処理で編集作業が出来なくなってしまう.

PowerShellでは“Start-Process”というコマンドで,プログラムを実行中のシェルとは別のプロセスで実行できる.
これを利用すればこのロスをなくせる.Vimのコマンドモード上で以下を実行すれば良い.
:!Start-Process -FilePath .\lualatex-set.bat 
“lualatex-set.bat”の中身は以下の通りである.
“jlreq-text.*”はバッチファイルと同じフォルダにある編集中のTeX関連ファイルたちである.
このように本文のほかに索引や参考文献も組み込み,
各カウンタの数字が正しく出力されるまで複数回コンパイルすると,相応の時間が掛かってしまう.
lualatex.exe jlreq-text.tex
mendex.exe -s jlreq-text.ist jlreq-text.idx
pbibtex.exe jlreq-text
lualatex.exe jlreq-text.tex
lualatex.exe jlreq-text.tex
さらに発展したものとして,実行される別プロセスのウィンドウをフォーカスしない(非選択状態)で実行するオプションは以下.
:!Start-Process  {.\lualatex-set.bat} -WindowStyle Minimized