无法将参数绑定到参数“Path”,因为它在powershell中为null错误

t8e9dugd  于 2023-01-02  发布在  Shell
关注(0)|答案(3)|浏览(398)

我试图在删除文件名中的特殊字符后将所有邮件移动到基于文件名的某个目的地。FOLDLIST是一个数组,其中包含条件变量和目标文件夹名称。

Set-Location 'C:\Users\abrahame\Desktop\Work\PSG Mail Movement\Mail'
    $DESLOC="c:\Temp\ua-closed bugs"
    $FOLDLIST = @(("UA", "CLOSE",  "ua-closed bugs"), ("VS", "CLOSE", "vs-closed-bugs"), ("CM", "CLOSED", "cm - closed-bugs"))
    gci | Foreach-object { $NEWN = $_.Name -replace '&',' ' -replace '_', ' ' -replace '#', ' ' -replace '!', ' '  -replace '@', ' '  -replace '$', ' '  -replace '%', ' '  -replace '^', ' '  -replace '&', ' '  -replace '\(', ' ' -replace '\)', ' '  -replace '\[', ' ' -replace '\]', ' ' -replace '\{', ' '  -replace '\}', ' ' -replace '\-', ' ';
            write-host $NEWN.Length
            if($NEWN.Length -gt  70){
                    $NEWN="$NEWN.Substring(1,70)"
                    $NEWN=$NEWN.msg

            }

            $FOLDLIST | ForEach-Object {
            $CXR=$_[0]
            $STAT=$_[1]

            if ($NEWN -match ("$CXR") -and $NEWN -match ("$STAT")){
            write-host $CXR -  $STAT
                    $DIR=$_[2]
                    $NEWN=$NEWN.trim()
                    $DPATH="$DESLOC\$DIR\$NEWN"
                    write-host $DPATH
                    mv $_.Name $DPATH
            }
            }

    }

我遇到这个错误。请告诉我哪里出错了。

67
    UA - CLOSE
    c:\Temp\ua-closed bugs\ua-closed bugs\RE  CLOSE OA TICKET   10350   OA   UAT PHASE FOR HP FARES  1 .msg
    Move-Item : Cannot bind argument to parameter 'Path' because it is null.
    At C:\Users\abrahame\Desktop\Work\PSG Mail Movement\mailmove_multdimentional.ps1:24 char:5
    +         mv <<<<  $_.Name $DPATH
        + CategoryInfo          : InvalidData: (:) [Move-Item], ParameterBindingValidationException
        + FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Microsoft.PowerShell.Commands.MoveItemCom
       mand
zujrkrfu

zujrkrfu1#

我猜测$_.Name不存在。
如果我是您,我会将脚本引入伊势并逐行运行,直到您到达那里,然后查看$_的值

fwzugrvs

fwzugrvs2#

$_是当前管道中的活动对象。您已使用$FOLDLIST | ...启动了一个新管道,因此$_表示该数组中沿管道传递的对象。您应将第一个管道中的FileInfo对象隐藏在一个变量中,然后在以后引用该变量,例如:

write-host $NEWN.Length
$file = $_
...
Move-Item $file.Name $DPATH
f0brbegy

f0brbegy3#

  1. PM〉卸载包实体框架-强制
  2. PM〉安装包实体框架-6.0.0之前版本
    我在NugetPackageConsole中用这个代码解决了这个问题。而且它很好用。问题出在version中。我认为它会帮助其他人。

相关问题