У меня есть папка, содержащая кучу файлов с изображениями, и формат имен похож на:
kitty_BW.jpg
puppy_B_W.jpg
ball_BlWh.jpg
rope_bw.jpg
shoe_Bw.jpg
kitty_C.jpg
puppy_Color.jpg
ball_c.jpg
rope_color.jpg
shoe_col.jpg
чтобы переместить нужные мне файлы я создал список
kitty
puppy
ball
rope
shoe
так что мне нужно переместить файлы, которые НЕ в списке файлов TXT И старше этого месяца ,
Я начинал с этим кодом
$file_list = Get-Content C:\photoList.txt
$search_folder = "D:\photos"
$destination_folder = "C:\Backup"
foreach ($file in $file_list) {
$file_to_move = Get-ChildItem -Path $search_folder -Filter $file -Recurse -ErrorAction SilentlyContinue -Force | % { $_.FullName}
if ($file_to_move) {
Move-Item $file_to_move $destination_folder
}
}
но это работает, только если полное имя файла находится в списке, а перемещаемый файл включен в список, но я хочу переместить файлы, которых нет в списке и которые старше этого месяца, поэтому я могу избавиться от них.
EDIT
Я пробовал все виды вещей, но по какой-то причине это не сравнивается
$file_list = "C:\FAphotoList.txt"
$search_folder ="C:\FAphotos"
$destination_folder = "C:\Backup\"
$first_day = $(Get-Date -UFormat "%Y / %m ") + "/ 01"
$list = (Get-ChildItem $search_folder | ? LastWriteTime -lt $first_day).name
echo $list | Select-String -Pattern '0183444'
Get-Content $file_list | % {
$list2 = ($list | Select-String -Pattern $_)
}
echo list2
echo $list2
#here is my problem
$list2 | % {
[array]::indexof($list,$_)
}
echo "final list"
echo $list
проблема в том, что когда я пытаюсь сравнить список с [array]::indexof($list, "kitty_BW.jpg")
это работает, но когда я пробую это как в примере, я ничего не получаю.
РЕДАКТИРОВАТЬ 2
$file_list = "C:\FAphotoList.txt"
$search_folder ="C:\FAphotos"
$destination_folder = "C:\Backup\"
$first_day = $(Get-Date -UFormat "%Y / %m ") + "/ 01"
$list = (Get-ChildItem $search_folder | ? LastWriteTime -lt $first_day).name
echo lista
Get-Content $file_list | % {
$list.Remove(($list | Select-String -Pattern $_))
}
$list | % {
Move-Item $file_to_move $destination_folder
}
echo "final list"
$list = (Get-ChildItem $search_folder | ? LastWriteTime -lt $first_day).name
echo $list
получает мне эту ошибку
Exception calling "Remove" with "1" argument(s): "Collection was of a fixed size."
At C:\FAphotos.ps1:17 char:5
+ $list += $list.Remove(($list | Select-String -Pattern $_))
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : NotSupportedException
поэтому я пытался привести к списку массивов, но это не сработало, поэтому я пробовал много разных вещей.