作成したWordファイルのページ数を取得したいことがありませんか?
類似システムのWordファイルの頁数を基に、設計作業の見積り根拠にしたり、
成果物の納品報告書の頁数を記入したり。。。等々
対象のファイルが数ファイルなら、1ファイルずつ開いて確認できます。
ですが、複数ファイルもあったり、フォルダがネストして格納していると、指定が面倒です。
そういう時は、次のPowerShellを使って、一括に取得してしまいましょう。
ソース(page-count.ps1)
# 結果出力(C:\temp\output.csvに結果を出力する)
$outpath = “C:\temp”
$output = $outpath + “/output.csv”
# 引数チェック
function usage {
Write-Host “Usage: “page-output.ps1 Input-dir “<directory path>”
exit 1
}
if ($args.length -eq 0) {
usage
}
$inpath= $args
# 出力ファイルを削除
if (Test-Path $output) {
Remove-Item -Path $output
}
# 指定されたパス配下のファイルを取得(サブフォルダも対象+docファイルのみ)
$target = Get-Childitem $inpath -r -include *.doc -exclude *コピー*,*.back,~* | Where-Object {-not $_.PSIsContainer}
# WSHのShellオブジェクトを生成
$shell = New-Object -Com Shell.Application
# ファイル分だけ繰り返す
$target | ForEach-Object {
# GetDetailsOfに必要なオブジェクト
$folderobj = $shell.NameSpace($_.DirectoryName)
$item = $folderobj.ParseName($_.name)
# ファイル出力
$_.DirectoryName + “\” + $_.name + “`,” + $folderobj.GetDetailsOf($item,157) | Add-Content $output
}
プロパティの取得(ページ数を表す番号を確認する)
もし、GetDetailsOf($item,157)でページ数が取得できない場合に下記のソースを実行して、番号(=157)を確認する
$sh = New-Object -ComObject Shell.Application
$folderobj = $sh.Namespace(‘C:\test’)
$item = $folderobj.ParseName(‘サンプル.docx’)
for($i = 0; $i -lt 300; $i++){
echo ([string]$i + ” : ” + $folderobj.GetDetailsOf($item, $i))
}
実行
PS C:\> page-count.ps1 対象ディレクトリ名 ※C:\temp\output.csvに結果が出力されます。
コマンドの解説(備忘録)
ファイルの絞り込み -include
# 単一の拡張子で絞り込む場合(例:docファイルのみ取得)
PS C:\> Get-ChildItem -File -r -include *.doc
# 複数の拡張子で絞り込む場合(例:docファイル、dotファイルを取得)
PS C:\> Get-ChildItem -File -r -include *.doc,*.dot
ファイルの除外 -exclude
# 単一の拡張子で除外する場合(例:docファイルを除外)
# 例)jpg拡張子を含まないファイルを取得する
PS C:\> Get-ChildItem -File -r -exclude *.doc
# 複数の拡張子で除外する場合(例:docファイル、dotファイルを除外)
PS C:\tmp> Get-ChildItem -File -r -exclude *.doc,*.dot