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
不会生成任何输出。
我最近正在尝试一些更高级的 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
不会生成任何输出。