如果文件存在只需更改文件名

If File Exists Just Change File Name

我是不是遗漏了明显的地方,还是我编码不正确?我只是想在处理我的语法时检查文件是否存在,如果存在,保存在完全相同的位置,但将单词“_RoundTwo”附加到第二个文件的末尾。我的语法没有错误,但从未创建第二个文件。有人可以指出我的错误吗?

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

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

该方法不会创建文件,它只是 returns 一个字符串,其中包含去掉扩展名的文件名。

如果你想复制文件,那么你需要复制,但是有一个更简单的方法,使用没有任何对象的管道什么都不做:

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

如果 dir 与文件不匹配,则管道上没有对象供 foreach-object 处理。此外,管道变量 $_ 包含大量可重复使用的信息(查看 dir afile | format-list * 的结果)。