PowerShell 脚本不从变量中移动项目

PowerShell script not moving items from variable

我最近正在尝试一些更高级的 PowerShell 脚本,我的一位同事要求我制作一些东西,将 16 个第一个创建的文件从一个文件夹移动到另一个文件夹,除非它不为空。 我检查并列出了这 16 个文件,但无法将它们移动到特定文件夹。

目前的代码如下:

$OriginPath = "D:\test\files"
$DestinationPath = "D:\test\test"
$MoveNr = "16"
$MoveFiles = ""
$LogFile = "D:\test\files\Move-Log.log"
$TimeStamp = Get-Date -Format "dd-MM-yyyy_hh-mm-ss"

# Check if Destination folder is empty.
if ((Get-ChildItem $DestinationPath -Filter *.uni | Measure-Object).Count -eq 0) {
    # Folder is Empty
    echo 'Moved ' $TimeStamp >> $LogFile
    Write-Warning "Files are moving, one moment"
    $MoveFiles = Get-ChildItem $OriginPath -Filter *.uni |
                 Sort -Property LastWriteTime |
                 Select -First $MoveNr |
                 Out-File $LogFile
    ForEach-Object $MoveFiles | Move-Item -Path $OriginPath -Destination $DestinationPath >> $LogFile
} else {
    # Folder is not empty
    Write-Warning "Folder not empty!"
}
Write-Warning "Now back to work!"

它运行一切都没有错误,但没有移动任何东西,也没有像预期的那样写入日志文件,列表确实被插入了。

出现此问题是因为您在将文件集合生成到 $MoveFiles 的行的末尾使用了 | Out-File。因为 Out-File 不创建对象输出,所以不会填充该变量。

改为这样做:

$MoveFiles = Get-ChildItem $OriginPath -Filter *.uni |
             Sort -Property LastWriteTime |
             Select -First $MoveNr
$MoveFiles | Out-File $LogFile

你也可能不需要在这之后的行上使用 ForEach-Object(你对它的使用是无效的),也不应该在 Move-Item 中声明 -Path,因为那来自管道。例如:

$MoveFiles | Move-Item -Destination $DestinationPath

应该可以。

此处的 >> $LogFile 可能是多余的,因为 Move-Item 不会生成任何输出。