最近,我正在尝试一些更高级的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!"
它可以无错误地运行所有内容,但不会移动任何内容,也不会像预期的那样写入日志文件,列表确实会被插入。
答案 0 :(得分:1)
之所以出现此问题,是因为您在生成| Out-File
中的文件集合的行的末尾使用了$MoveFiles
。由于Out-File
不创建任何对象输出,因此不会填充该变量。
执行此操作:
$MoveFiles = Get-ChildItem $OriginPath -Filter *.uni |
Sort -Property LastWriteTime |
Select -First $MoveNr
$MoveFiles | Out-File $LogFile
此后,您可能也不需要在行上使用ForEach-Object
(并且对它的使用无效),也不必在-Path
中声明Move-Item
,因为这即将到来从管道。例如:
$MoveFiles | Move-Item -Destination $DestinationPath
应该工作。
此处的>> $LogFile
可能是多余的,因为Move-Item
不会产生任何输出。