How to Use PngCon Plus Converter to Batch Convert Images Like a Pro
PngCon Plus is a lightweight Windows utility that converts PNG files into multi-size ICO icon files. Although the official app converts one PNG at a time, you can batch-process many images quickly by combining PngCon Plus with a simple automated workflow. Below is a step-by-step, practical guide that assumes Windows ⁄11 and no extra paid software.
What you’ll need
- PngCon Plus Converter installed (Windows).
- A folder with your PNGs (input).
- An empty folder for results (output).
- Optional: a free command-line tool (PowerShell is built into Windows).
Steps — quick version
- Install PngCon Plus and confirm it converts a single PNG to ICO manually.
- Place all PNG files to convert in an input folder (e.g., C:\Images\ToConvert).
- Create an output folder (e.g., C:\Images\Converted).
- Use a PowerShell script to loop through PNG files and open PngCon Plus for each file automatically (see script below).
- Let the script run; PngCon Plus will create ICO files in its default save location — move them to your output folder.
- Optionally verify and rename files as needed.
PowerShell automation script (example)
- Save this as BatchConvert-PngCon.ps1 and run from PowerShell (run as Administrator if needed).
powershell
\(pngConPath</span><span> = </span><span class="token" style="color: rgb(163, 21, 21);">"C:\Program Files\PngConPlus\pplus.exe"</span><span></span><span class="token" style="color: rgb(0, 128, 0); font-style: italic;"># adjust if installed elsewhere</span><span> </span><span></span><span class="token" style="color: rgb(54, 172, 170);">\)inputFolder = “C:\Images\ToConvert”
\(outputFolder</span><span> = </span><span class="token" style="color: rgb(163, 21, 21);">"C:\Images\Converted"</span><span> </span><span></span><span class="token" style="color: rgb(57, 58, 52);">New-Item</span><span> </span><span class="token" style="color: rgb(57, 58, 52);">-</span><span>Path </span><span class="token" style="color: rgb(54, 172, 170);">\)outputFolder -ItemType Directory -Force
Get-ChildItem -Path \(inputFolder</span><span> </span><span class="token" style="color: rgb(57, 58, 52);">-</span><span class="token" style="color: rgb(0, 0, 255);">Filter</span><span> </span><span class="token" style="color: rgb(57, 58, 52);">*</span><span class="token" style="color: rgb(57, 58, 52);">.</span><span>png </span><span class="token" style="color: rgb(57, 58, 52);">|</span><span> </span><span class="token" style="color: rgb(57, 58, 52);">ForEach-Object</span><span> </span><span class="token" style="color: rgb(57, 58, 52);">{</span><span> </span><span> </span><span class="token" style="color: rgb(54, 172, 170);">\)png = \(_</span><span class="token" style="color: rgb(57, 58, 52);">.</span><span>FullName </span><span> </span><span class="token" style="color: rgb(57, 58, 52);">Start-Process</span><span> </span><span class="token" style="color: rgb(57, 58, 52);">-</span><span>FilePath </span><span class="token" style="color: rgb(54, 172, 170);">\)pngConPath -ArgumentList “"</span><span class="token" style="color: rgb(54, 172, 170);">$png</span><span class="token" style="color: rgb(163, 21, 21);">”” -Wait Start-Sleep -Milliseconds 500 # If PngCon saves to the same folder as source or fixed folder, move ICOs:
\(icoName</span><span> = </span><span class="token">[System.IO.Path]</span><span>::ChangeExtension</span><span class="token" style="color: rgb(57, 58, 52);">(</span><span class="token" style="color: rgb(54, 172, 170);">\)_.Name, ”.ico”)
\(possiblePaths</span><span> = @</span><span class="token" style="color: rgb(57, 58, 52);">(</span><span> </span><span> </span><span class="token" style="color: rgb(57, 58, 52);">Join-Path</span><span> </span><span class="token" style="color: rgb(54, 172, 170);">\)inputFolder \(icoName</span><span class="token" style="color: rgb(57, 58, 52);">,</span><span> </span><span> </span><span class="token" style="color: rgb(57, 58, 52);">Join-Path</span><span> </span><span class="token" style="color: rgb(163, 21, 21);">"</span><span class="token" style="color: rgb(54, 172, 170);">\)env:USERPROFILE\Documents” \(icoName</span><span class="token" style="color: rgb(57, 58, 52);">,</span><span> </span><span> </span><span class="token" style="color: rgb(57, 58, 52);">Join-Path</span><span> </span><span class="token" style="color: rgb(57, 58, 52);">(</span><span class="token" style="color: rgb(57, 58, 52);">Split-Path</span><span> </span><span class="token" style="color: rgb(54, 172, 170);">\)pngConPath) \(icoName</span><span> </span><span> </span><span class="token" style="color: rgb(57, 58, 52);">)</span><span> </span><span> </span><span class="token" style="color: rgb(0, 0, 255);">foreach</span><span> </span><span class="token" style="color: rgb(57, 58, 52);">(</span><span class="token" style="color: rgb(54, 172, 170);">\)p in \(possiblePaths</span><span class="token" style="color: rgb(57, 58, 52);">)</span><span> </span><span class="token" style="color: rgb(57, 58, 52);">{</span><span> </span><span> </span><span class="token" style="color: rgb(0, 0, 255);">if</span><span> </span><span class="token" style="color: rgb(57, 58, 52);">(</span><span class="token" style="color: rgb(57, 58, 52);">Test-Path</span><span> </span><span class="token" style="color: rgb(54, 172, 170);">\)p) {
Move-Item -Path \(p</span><span> </span><span class="token" style="color: rgb(57, 58, 52);">-</span><span>Destination </span><span class="token" style="color: rgb(57, 58, 52);">(</span><span class="token" style="color: rgb(57, 58, 52);">Join-Path</span><span> </span><span class="token" style="color: rgb(54, 172, 170);">\)outputFolder \(icoName</span><span class="token" style="color: rgb(57, 58, 52);">)</span><span> </span><span class="token" style="color: rgb(57, 58, 52);">-</span><span>Force </span><span> </span><span class="token" style="color: rgb(0, 0, 255);">break</span><span> </span><span> </span><span class="token" style="color: rgb(57, 58, 52);">}</span><span> </span><span> </span><span class="token" style="color: rgb(57, 58, 52);">}</span><span> </span><span></span><span class="token" style="color: rgb(57, 58, 52);">}</span><span> </span></code></div></div></pre> <p>Notes:</p> <ul> <li>Adjust \)pngConPath to where PngCon Plus is installed.PngCon Plus may save ICOs to a fixed location; the script checks common places and moves found ICOs to the output folder. Add longer waits (Start-Sleep) if conversions take time. Tips to work “like a pro”
- If you have many files, split them into smaller batches to avoid errors.
- Keep source PNGs square and high resolution for better icon results.
- If PngCon lacks options you need (size/quality), use a pre-processing step with a tool like ImageMagick to resize/adjust PNGs before converting. Example: convert input.png -resize 128x128 output.png
- Automate post-processing (rename, organize) in the same PowerShell loop.
- Test the workflow on 5–10 files before running large batches.
Troubleshooting
- If PngCon fails to open via script, run it once as admin to confirm no elevation prompts.
- If ICOs aren’t where expected, search recent files by extension (*.ico) and timestamp, then move them.
- For non-PNG inputs, pre-convert images to PNG (ImageMagick or Paint).
Example workflow with ImageMagick (optional)
- Resize originals: mogrify -path C:\Images\ToConvert -resize 256x256 *.png
- Run the PowerShell script above.
If you want, I can:
- Provide a tested script that locates the exact PngCon save folder automatically, or
- Give an ImageMagick pre-processing batch script for resizing/format standardization.
Comments
Leave a Reply