Dominik
Dominik

Reputation: 3

Powershell/ Print by filename

My English may not be perfect but I do my best.

I'm trying to write a Powershell script where the filename has a number at the end and it should print exactly that often. Is this somehow possible ? With the script it prints it only 1 time. For whatever reason..

param (
    [string]$file = "C:\Scans\temp\*.pdf",
    [int]$number_of_copies = 1
)
foreach ($onefile in (Get-ChildItem $file -File)) {
    $onefile -match '\d$' | Out-Null
    for ($i = 1; $i -le [int]$number_of_copies; $i++) {
        cmd /C "lpr -S 10.39.33.204 -P optimidoc ""$($onefile.FullName)"""
    }
}

Upvotes: 0

Views: 187

Answers (1)

Theo
Theo

Reputation: 61068

There is no need for parameter $number_of_copies when the number of times it should be printed is taken from the file's BaseName anyway.

I would change your code to:

param (
    [string]$path = 'C:\Scans\temp'
)

Get-ChildItem -Path $path -Filter '*.pdf' -File | 
    # filter only files that end with a number and capture that number in $matches[1]
    Where-Object { $_.BaseName -match '(\d+)$' } |
    # loop through the files and print 
    ForEach-Object {
        for ($i = 1; $i -le [int]$matches[1]; $i++) {
            cmd /C "lpr -S 10.39.33.204 -P optimidoc ""$($_.FullName)"""
        }
    }

Inside the ForEach-Object, on each iteration, the $_ automatic variable represents the current FileInfo object.

P.S. Your script prints each file only once because you set parameter $number_of_copies to 1 as default value, but the code never changes that to the number found in the file name.

BTW. Nothing wrong with your English

Upvotes: 1

Related Questions