親フォルダ内に全てフォルダにある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以降インストール必要です。
ぜひ活用してみてください。