管理“无法将参数绑定到参数‘Path’,因为它为空

问题描述 投票:0回答:1

我有一个 powershell 脚本,可以将包含某些“关键字”的文件移动到各种 .csv 文件中列出的相应文件夹。虽然我似乎有移动文件的机制。我不断收到以下错误

Join-Path : Cannot bind argument to parameter 'Path' because it is null.
At C:\Users\superflysnooka\Documents\Support\Projects\REDTransferAnalysis\REDFileTransferR2.ps1:46 char:38
+         $destinationPath = Join-Path $destinationDirectory $fileName
+                                      ~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidData: (:) [Join-Path], ParameterBindingValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Microsoft.PowerShell.Commands.JoinPathCommand

我不确定这是否是因为我传递主代码执行所需参数的方式。

$sourceDirectory = "C:\Users\superflysnooka\Documents\Support\Projects\REDTransferAnalysis\staging\"

# Import analog and digital directories from CSV files
$analogDirectories = Import-Csv "C:\Users\superflysnooka\Documents\Support\Projects\REDTransferAnalysis\cfg\analog_folders.csv"
$digitalDirectories = Import-Csv "C:\Users\superflysnooka\Documents\Support\Projects\REDTransferAnalysis\cfg\digital_folders.csv"

# Create log file
$logFile = "C:\Users\superflysnooka\Documents\Support\Projects\REDTransferAnalysis\log\filetransferlog.txt"

# Get current date
$currentDate = Get-Date -Format "yyyy-MM-dd"

# Loop through files in the source directory
Get-ChildItem $sourceDirectory | ForEach-Object {
    $fileName = $_.Name
    $filePath = $_.FullName

    # Check if file contains "analog" or "digital"
    if ($fileName -like "*Analog*") {
        $destinationDirectories = $analogDirectories.Directory
    } elseif ($fileName -like "*Digital*") {
        $destinationDirectories = $digitalDirectories.Directory
    } else {
        Add-Content -Path $logFile -Value "[$currentDate] Failed to transfer file: $fileName"
        return
    }

    # Move or copy file to destination directories
    foreach ($destinationDirectory in $destinationDirectories) {
        $destinationPath = Join-Path $destinationDirectory $fileName
        if ($fileName -like "*Analog*") {
            Move-Item -Path $filePath -Destination $destinationPath
        } elseif ($fileName -like "*Digital*") {
            Copy-Item -Path $filePath -Destination $destinationPath
        }
        Add-Content -Path $logFile -Value "[$currentDate] Successfully transferred file: $fileName to $destinationDirectory"
    }
}

这是其中一个 .csv 文件的第一列的样子

Directory
C:\Users\superflysnooka\Documents\Support\Projects\COBETransferAnalysis\sites\Area1\Analog
C:\Users\superflysnooka\Documents\Support\Projects\COBETransferAnalysis\sites\Area2\Analog
C:\Users\superflysnooka\Documents\Support\Projects\COBETransferAnalysis\sites\Area3\Analog
C:\Users\superflysnooka\Documents\Support\Projects\COBETransferAnalysis\sites\Area4\Analog
powershell scripting powershell-3.0
1个回答
0
投票

通过以下方式解决

  • 确保文件确实存在
  • 文件名拼写正确,否则抛出异常。
© www.soinside.com 2019 - 2024. All rights reserved.