Simon Paris
Simon Paris

Reputation: 139

If File Exists Just Change File Name

Am I missing the obvious here, or have I coded incorrectly? I simply want to when processing my syntax check if the file exists, if it does, save in the exact same location, but append the words "_RoundTwo" to the end of the second file. My syntax doesn't error, but the second file is never created. Can someone point out my err?

$SaveLocation = "C:\Completed\"
$WorkbookName = "Intro"

if ((Test-Path $SaveLocation\$WorkbookName + ".csv"))
{
[IO.Path]::GetFileNameWithoutExtension($WorkbookName) + "_RoundTwo" + [IO.Path]::GetExtension($WorkbookName)
}

Upvotes: 0

Views: 62

Answers (1)

Richard
Richard

Reputation: 108975

[IO.Path]::GetFileNameWithoutExtension

That method will not create a file, it just returns a string containing the filename with its extension stripped off.

If you want to copy the file, then you need to copy, but there is a simpler way by making use of a pipeline without any objects does nothing:

dir $SaveLocation\$WorkbookName + ".csv" |
  foreach-object {
    $dest = $_.DirectoryName +
         '\' + 
         [io.path]::GetFileNameWithoutExtension($_.FullName) +
         $_.Extension
    copy-item $_ $dest
  }

If the dir does not match a file, then there is no object on the pipeline for foreach-object to process. Also the pipeline variable $_ contains lots of information to reuse (look at the results of dir afile | format-list *).

Upvotes: 2

Related Questions