我无法从管道中获取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。
答案 0 :(得分:1)
您正在测试$_.BaseName
(即:没有扩展名的文件的名称)。使用$_.Name
,您应该会得到预期的结果。