14

I often find myself in the situation where I have to concatenate a string with a variable after a cmdlet. For example,

New-Item $archive_path + "logfile.txt" -type file

If I try to run this, PowerShell throws the following error:

New-Item : A positional parameter cannot be found that accepts argument '+'.

Am I not concatenating the string correctly? I'd like to not have to declare another variable before each cmdlet that I do this in (e.g., $logfile = $archive_path + "logfile.txt", and then do New-Item $logfile -type file). Also, I won't always be concatenating a file path.

0

1 Answer 1

23

You get that error because the PowerShell parser sees $archive_path, +, and "logfile.txt" as three separate parameter arguments, instead of as one string.

Enclose the string concatenation in parentheses, (), to change the order of evaluation:

New-Item ($archive_path + "logfile.txt") -Type file

Or enclose the variable in a subexpression:

New-Item "$($archive_path)logfile.txt" -Type file

You can read about argument mode parsing with Get-Help about_Parsing.

Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.