Re: IrfanView:
IrfanView (http://www.irfanview.com/) definitely does very sophisticated batch operations for reducing colour depth and what not.
Also, I just ripped this out of one of my programs if you want to go the C# route:
bitmap = ResizeBitmap(bitmap, (int)width, (int)height);
ImageCodecInfo[] info = ImageCodecInfo.GetImageEncoders();
EncoderParameters parameters = new System.Drawing.Imaging.EncoderParameters(1);
parameters.Param[0] = new EncoderParameter(Encoder.Quality, 60);
bitmap.Save(saveFileDialog.FileName, info[1], parameters);