親フォルダ内に全てフォルダにあるPDFファイル数とページ数を数えてくれるバッチファイル

スポンサーリンク

親フォルダ内に全てフォルダにある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以降インストール必要です。

ぜひ活用してみてください。

タイトルとURLをコピーしました