Как удалить файлы в зависимости от состояния в powershell - PullRequest
0 голосов
/ 11 июля 2019

Я пытаюсь удалить все файлы jpg, которые не имеют текстовый файл с тем же именем файла.Например, файлы имеют имена: «output_1.jpg», «output_1.txt», «output_2.jpg», «output_2.txt», «output_3.jpg», «output_4.jpg», «output_4.txt»,...

В этом случае я хочу удалить output_3.jpg, поскольку у него нет txt-файла с его именем, но я не знаю, как это сделать на powershell.

Так что яЯ предполагаю, что псевдокод будет таким, если у меня есть 1000 наборов файлов:

for(i=0; i<1000; i++){ if(output_%i.txt exists) delete output_%i.jpg;}

Заранее спасибо.

1 Ответ

0 голосов
/ 11 июля 2019

Я считаю, что это должно сделать это. Обратите внимание на комментарии в коде и задавайте любые вопросы, которые у вас могут возникнуть!

# Variable to store the folder within which we are searching for them files
[string]$folder = "C:\temp\"

# Now go find all of the files in that folder with either extension
$files = Get-ChildItem -Path $folder | Where-Object Extension -in (".txt", ".jpg")

# Then group by the basename (filename without extension) and return the basenames of those where only 1 file is found
$fileBaseNamesToDelete = ($files | Group-Object BaseName | Where-Object Count -eq 1).Name

# Here's your list to delete!
$filesToDelete = Get-ChildItem -Path $folder | Where-Object BaseName -in ($fileBaseNamesToDelete)

# Go delete 'em!
$filesToDelete | Remove-Item
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...