测试路径不起作用

时间:2013-04-26 20:36:35

标签: powershell-v2.0

我无法从管道中获取Test-Path。由于某种原因,命令总是计算为false并执行IF语句中包含的命令。

代码如下所示:

$BACKUPFOLDER = "F:\TEST\Old\"
Get-ChildItem "$SrcFolder\*.pgp" | Where-Object {!$_.PsIsContainer} | ForEach-Object {
        Add-Content -Path $LOGFILE -Value "`r`n - Decrypting file $_ -"
        Decrypt-Files $_ "$SrcFolder$($_.BaseName)" $Credential $DecryptionLogFile        

        if (!(Test-Path "$BackupFolder$($_.BaseName)")) {
            Add-Content -Path $LOGFILE -Value "`n`rMoving $_ to $BackupFolder"
            Move-Item $_ $BackupFolder
        }
        else {
            Add-Content -Path $LOGFILE -Value "`n`rCould not move $_ to $BackupFolder. Destination file already exists."
        }

我得到的错误是使用Move-Item命令:

Move-Item : Cannot create a file when that file already exists.

At F:\Scripting\1-Dev\Modules\Include.ps1:505 char:26
+                 Move-Item <<<<  $_ $BackupFolder
+ CategoryInfo          : WriteError: (F:\TEST...201301.xlsx.pgp:FileInfo) [Move-Item], IOException
+ FullyQualifiedErrorId : MoveFileInfoItemIOError,Microsoft.PowerShell.Commands.MoveItemCommand

我很困惑,因为该文件已经存在于备份文件夹中,但由于某种原因,脚本仍然通过IF语句并执行move-item命令。我的语法对Test-Path不好吗?

我正在解密的文件将命名为VPAS-201301.xlsx.pgp,我正在提取的文件将是VPAS-201301.xlsx。

1 个答案:

答案 0 :(得分:1)

您正在测试$_.BaseName(即:没有扩展名的文件的名称)。使用$_.Name,您应该会得到预期的结果。