PNGファイルとJPGファイルをPDFファイルへ変換.Windows版のImageMagickをVimとWindows PowerShellで使うことを考える
2023/03/03
この記事では,Windows版のImageMagickとVim,Windows PowerShellで使って
PNGファイルとJPGファイルをPDFファイルへ変換することを試みる.
- 1 動機・経緯
- 2 ImageMagickのインストール
- 3 WindowsでのImageMagickの実行
- 4 Ghostscriptのインストール
- 5 あるディレクトリ内のPNGファイルを一括でPDFへ変換
Windows PowerShellでファイル名を一括変更する(Get-ChildItemとRename-Itemを使用)
2022/01/13
第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 : ソース パスとターゲット パスを同じにすることはできません。これを完全に回避する方法はよくわからない.
パスの最後を「*」にしてカレントディレクトリに入ってコマンドを入力したり,
考え付く範囲でパス指定やファイル名を変更すると通ることがあるようだ.
2014/06/27(金)EPSファイル(jw_cadで作成した図)をinkscapeで追加編集する
この場合,回りくどいがjw_cad→EPSプリンタで印刷→GsViewでSVG変換→inkscapeで開くという手順を踏むと問題なく編集できる.
最初,jw_cad→PDFプリンタ→inkscapeで読み込みという手順で編集したら,EPSで再保存する際に出力がおかしくなった.
この方法は,別のソフトで作成した図をinkscapeで編集する場合に広く利用できると思われる.
Windows版GvimでPowerShellを呼び出す.
2013/07/23
Windows版GvimでPowerShellを呼び出す
設定ファイル(“vimrc等”)に下記を追加すると,vim上で「:!プログラム名」とした際に起動するシェルがコマンドプロンプト(cmd.exe)から
Windows PowerShellに変更できる.
set shell=powershell.exePowerShellはコマンドプロンプトよりも高機能でパワフル*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