Lyubomir Grancharov
Lyubomir Grancharov

Reputation: 23

Test-Path - Illegal characters in path when using a variable

I m fairly new to PowerShell and I apologize in advance if this is a dumb question.

I am trying to construct a new destination/filename where I take the old filename and increment its prefix with +1

$destination = Split-Path -Path 'C:\Users\tom\Desktop\test\0_InstalledPrograms.log'
$file =  split-path "C:\Users\tom\Desktop\test\0_InstalledPrograms.log" -Leaf

$array = $file -split '_'
$prefix = $array[0] + 1
$suffix = $array[1]
$newFile = $prefix + '_' + $suffix
$newFile = Out-String -InputObject $newFile
$destination = $destination + '\' + $newFile

Test-Path $destination

Test-Path : Illegal characters in path.
At C:\Users\tom\Desktop\incrementFileName.ps1:18 char:1
+ Test-Path $destination
+ ~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (C:\Users\lgranc...dPrograms.log
:String) [Test-Path], ArgumentException
    + FullyQualifiedErrorId : ItemExistsArgumentError,Microsoft.PowerShell.Commands.TestPathCommand

False

Upvotes: 2

Views: 1195

Answers (2)

Shadowfax
Shadowfax

Reputation: 586

You can do it easily as follows:

$file = "C:\Users\tom\Desktop\test\0_InstalledPrograms.log"
$splittedName = (Split-Path $file -leaf).split('_')
$newFileName = [string]([int]$splittedName[0] + 1) +'_'+ $splittedName[1]

Move-Item -Path $file -Destination (Join-Path (Split-path $file) -ChildPath $newFileName)

Upvotes: 0

Mathias R. Jessen
Mathias R. Jessen

Reputation: 174435

This statement:

$newFile = Out-String -InputObject $newFile

adds a new line (CR+LF) to the string, and is completely unnecessary ($newFile is already a string).

Remove that line and it'll work :)

Upvotes: 2

Related Questions