親フォルダ内に全てフォルダにあるPDFファイル数とページ数を数えてくれるバッチファイル
仕事であるフォルダにある全てPDFファイルの数とページ数集計必要なときこのバッチファイルで5秒以内で数えてくれるんです。
非常に便利ですね。やっぱりDOSは最強だなぁ~
コードは下記となります。
@echo off 2>nul 3>nul
::.Net Framework 2.0インストール必要です。
::集計フォルダ指定
set "fd=C:\Users\user\Documents\"
if not exist "%fd%" echo;フォルダパスエラー&pause&exit
set "netpath=%systemroot%\Microsoft.NET\Framework"
for /f "delims=" %%a in ('dir /ad /b "%netpath%\v?.*"') do (
if exist "%netpath%\%%a\csc.exe" (
set "cscpath=%netpath%\%%a\csc.exe"
goto :0
)
)
echo;.Net Framework 2.0インストールされていません。&pause&exit
:0
>"%tmp%\$" more +20 "%~f0"
"%cscpath%" /out:"%tmp%\$getpages.exe" "%tmp%\$"
echo;サーチ中,しばらくおまちください...
::集計結果をtxtファイル書き込したい場合下行を「>"test.txt" "%tmp%\$getpages.exe" "%fd%"」に修正してください。
"%tmp%\$getpages.exe" "%fd%"
pause&exit
using System;
using System.IO;
using System.Text.RegularExpressions;
namespace GetPages
{
class PDFPageCount
{
static void Main(string[] args)
{
int i=0,s=0;
String path = args[0].ToString();
String[] files = Directory.GetFiles(path, "*.pdf", SearchOption.AllDirectories);
foreach (string file in files)
{
FileStream fs = new FileStream(file, FileMode.Open, FileAccess.Read);
StreamReader sr = new StreamReader(fs);
string pdfText = sr.ReadToEnd();
Regex regexp = new Regex(@"/Type\s*/Page[^s]");
MatchCollection matches = regexp.Matches(pdfText);
i++;
s+=matches.Count;
Console.WriteLine(file+"\t"+matches.Count);
}
Console.WriteLine("----------------------\r\n"+i+" Files\t"+s+" Pages");
}
}
}
使うときは集計フォルダを指定してください。
set “fd=C:\Users\user\Documents\“ ここをPDF保存されているフォルダに修正してください。
集計データをtext.txtファイルに書き込みたい場合19行目を>”test.txt” “%tmp%\$getpages.exe” “%fd%”」に修正してください。
※実行ファイル(.bat)は同じフォルダに保存する必要です。
環境:.Net Framework 2.0以降インストール必要です。
ぜひ活用してみてください。


