powershell - 如何从数组中获取多个文件夹中的所有文件
问题描述
我有一系列路径
$to_delete = @(
"D:\test\to_delete\",
"E:\test\to_delete\",
"F:\test\to_delete\"
)
我需要选择这些文件夹中的文件,然后如果满足条件,我将从其中一个文件夹中删除一个文件,并将新创建的文件放入“新建”文件夹中的同一驱动器中
$final_dir = @(
"D:\test\new\",
"E:\test\new\",
"F:\test\new\"
)
请注意,这些文件夹的名称可能不同。
所以我到目前为止是:
$number = 0
$window_title = $host.UI.RawUI.WindowTitle
while($true){
$new_file = Get-ChildItem -Path C:\zips\ -Filter *.zip | Select-Object -First 1
if ($new_file.count -gt 0){
$number++
$move_to = $number % $to_delete.count
$delete = Get-ChildItem -Path $to_delete[$move_to] | Select-Object -First 1
write-host "Deleting, $($delete.fullname)"
Remove-Item -Path $delete.fullname -Force
write-host "Moving #$($number), $($new_file)"
Move-Item -Path $new_file.fullname -Destination $final_dir[$move_to] -force
write-host "Finished moving"
write-host "Moved files: $($number)"
$host.UI.RawUI.WindowTitle = "$($window_title) -- moved $($number) files --"
}
Start-Sleep -s 10
}
现在,您可能已经注意到的问题是选择删除文件时。如果该文件夹中没有文件,则应尝试其他驱动器。仅使用$move_to变量,因此它不会一次填充一个驱动器。如果不可能,我愿意不使用它。但是我仍然会遇到选择删除文件的问题,因为我无法扫描所有文件夹以找到下一个要删除的文件,并且需要将新文件放入相应驱动器的文件夹中。
-C:\zips文件夹是新创建的文件所在的位置,首先脚本应该从文件夹$ to_delete中删除一个文件,并将新文件放入相应的$final_dir
另外,我想知道这是否会从执行下一行直到移动完成?
解决方案
[cmdletbinding()]
param()
$folder_pairs = @(
@{
to_delete = 'C:\temp\move_delete_test\to_delete\1'
final_dir = 'C:\temp\move_delete_test\new\1'
},
@{
to_delete = 'C:\temp\move_delete_test\to_delete\2'
final_dir = 'C:\temp\move_delete_test\new\2'
},
@{
to_delete = 'C:\temp\move_delete_test\to_delete\3'
final_dir = 'C:\temp\move_delete_test\new\3'
}
)
$zipFolder = 'C:\temp\move_delete_test\zipfiles'
# 1..5 | ForEach-Object { $folder_pairs | Get-Random | ForEach-Object { New-Item -Path $_.to_delete -Name "test_$(Get-Random).txt" } }
# 1..5 | ForEach-Object { New-Item -Path $zipFolder -Name "$(Get-Random).zip" }
$window_title = $host.UI.RawUI.WindowTitle
$number = 0
while ($true) {
if ($zipFile = Get-ChildItem $zipFolder -Filter *.zip | Select-Object -First 1) {
Write-Verbose "Zip File: $($zipFile.FullName)"
while (-not ($fp = $folder_pairs | Where-Object { ($script:file_to_delete = Get-ChildItem -Path $_.to_delete | Select-Object -First 1) } | Select-Object -First 1) ) {
Start-Sleep -Seconds 1
}
Write-Verbose "Delete: $($file_to_delete.FullName)"
Remove-Item $file_to_delete.FullName -Force
Write-Verbose "Move Zip to $($fp.final_dir)"
$zipFile | Move-Item -Destination $fp.final_dir -Verbose
$host.UI.RawUI.WindowTitle = "$($window_title) -- moved $((++$number)) files --"
}
Start-Sleep -Seconds 10
}
推荐阅读
- c - 如何反转数组并将反转数组的值存储在新数组中
- python - 机器学习 Python Traceback 错误
- label - 交易视图 pinescript 标签重叠
- powershell - Powershell:停止进程
- c# - 如何检查图标元素是否可见?
- c++ - 使用 DIPlib 进行垫圈测量
- python - 正则表达式模式匹配 terraform 模块代码
- javascript - 如何在express-js中将变量从一个路由传递到另一个路由
- shortest-path - GraphFrames Shortest Paths 给出距离而不是实际路径
- java - PDFBox - 关于如何创建表格视图