Get-ChildItem 使用当前 Dir 而不是变量中指定的 Dir

Get-ChildItem is using current Dir instead of Dir specified in variable

欧线-

我有 300,000 多个包含子文件夹和文件的文件夹。

我正在尝试展平每个目录,以便删除子文件夹并将所有文件带到它们各自的父目录。

不幸的是,Get-ChildItem cmdlet 运行位于 .ps1 文件的位置,而不是 .txt 文件中指定的位置。

我已经尝试解决这个问题几个小时了,如果有任何帮助,我们将不胜感激。

进程-

首先,我 运行 一个 .ps1 文件,它从文本文件中检索父文件夹位置并调用自定义模块:

[System.IO.File]::ReadLines("C:\Users\ccugnet\Desktop\test.txt") | ForEach-Object {
    Import-Module MyFunctions
    fcopy -SourceDir $line -DestinationDir $line
    Remove-Module MyFunctions
}

其次,自定义模块将子项移动到父文件夹,在重复文件的文件名末尾附加递增数字:

function fcopy ($SourceDir,$DestinationDir)
{
    Get-ChildItem $SourceDir -Recurse | Where-Object { $_.PSIsContainer -eq $false } | ForEach-Object {
        $SourceFile = $_.FullName
        $DestinationFile = $DestinationDir + $_
        if (Test-Path $DestinationFile) {
            $i = 0
            while (Test-Path $DestinationFile) {
                $i += 1
                $DestinationFile = $DestinationDir + $_.basename + $i + $_.extension
            }
        } else {
            Move-Item -Path $SourceFile -Destination $DestinationFile -Verbose -Force -WhatIf
        }
        Move-Item -Path $SourceFile -Destination $DestinationFile -Verbose -Force -WhatIf
    }
}

文本文件内容:

"C:\Users\ccugnet\Desktop\Dir_Flatten\Fox, Hound & Hunter"
"C:\Users\ccugnet\Desktop\Dir_Flatten\Cat, Hat"
"C:\Users\ccugnet\Desktop\Dir_Flatten\Alice"
"C:\Users\ccugnet\Desktop\Dir_Flatten\Beetle | Juice"

您的 $line 是空的

PS P:\> [System.IO.File]::ReadLines("C:\Users\ccugnet\Desktop\test.txt") | ForEach-Object {
    $line
}

尝试$_

PS P:\> [System.IO.File]::ReadLines("C:\Users\ccugnet\Desktop\test.txt") | ForEach-Object {
    $_
}
"C:\Users\ccugnet\Desktop\Dir_Flatten\Fox, Hound & Hunter"
"C:\Users\ccugnet\Desktop\Dir_Flatten\Cat, Hat"
"C:\Users\ccugnet\Desktop\Dir_Flatten\Alice"
"C:\Users\ccugnet\Desktop\Dir_Flatten\Beetle | Juice"