Filetext çok fazla değer içeriyorsa hatalı taşıma ve spam klasörlerini önleme


1

Dosyaları bu .txt dosyasındaki bu uzun listeyi, dosyaları https://pastebin.com/raw/aRP94peb YIL klasörlerine taşımak için kullanıyorum.

Taşımak istediğim klasörde bu dosyalar (örnekler) var

Caccia a Ottobre Rosso.torrent
Caccia al delitto
caccia al delitto [divx, test 1986]

Bu yolu kullanıyorum, klasörler

C:\Path
Test4.txt
script_powershell.ps1

Dosyaları kendi YEAR klasörüne taşımak için bu betiği kullanıyorum : Aslında taşınması için powershell 5 ile test ettim

$movies = @()
(get-content C:\Path\Test4.txt) | foreach($_){
$properties = @{
date = $_.substring($_.IndexOf("(")+1,4)
name = $_.substring(0,$_.IndexOf("("))
}
write-host $date
write-host $name

$movies += New-Object PSObject -Property $properties
}

$torrentFiles = dir $torrentPath

foreach($movie in $movies){
$datePath = "C:\Path\$($movie.date)"
if(-not(test-path $datePath)) {
new-item $datePath -ItemType "directory"
}
$words = ($movie.name -split '\s') | ?{ $_.Length -gt 1}
$significant = $words.Count
 foreach($torrentFile in $torrentFiles){
 $matchingWords = 0
  foreach($word in $words){
   if($torrentFile.BaseName -match $word){
    $matchingWords += 1
   }
  }
  if($matchingWords -ge $significant){
  Move-Item -path $torrentfile -Destination $datePath
 }
 }
}

Ancak bu dosya

Caccia al delitto

1990klasöre taşınır ancak bunun yerine, dosyaya taşınmadı çünkü filetext listesinde yok.
1990klasör doğru üretilmiyor, aynı zamanda uzun.

Cont
1982
Zeff
Unde
Stal
Sara
Risi
Norm
Mani
Kasd
Hugh
Harl

Bu spam mekanizması nasıl önlenir?

Yanıtlar:


0

Yaklaşımınız / kodunuzla ilgili bazı kusurlar görüyorum.

  • Tarihi çıkarmak için en azından bir kapanış parantezle takip edilen bir yılı (4 basamaklı) tam olarak eşleştirmek için bir RegEx'e ihtiyacınız olacaktır. Pastebin dosyanız bazı desenler içeriyor (Mux by Little-Boy)veya (Zeffirelli,1990)alt dizininizin hatalı bir şekilde sürtünmesine çalışıyor.
  • Eşleme algorythminiz aşağıdaki $significantgibi satırlara tamamen yüksek bir değer katamaz :
    1990 - I guerrieri del Bronx (1982) [BDMux 1080p - H265 - Ita Aac Eng DTS] Azione, Fantascienza
    içeriği muhtemelen en fazla eşleşmeyecek bir dosyayla 1'den büyük olan her kelimeyi eşlemekle ilgisizdir. İçeriği köşeli parantezler ve muhtemelen takip eden kategorilerde hariç tutardım.
  • Kod, test4.txt dosyasındaki her satırı yineleyen, her dosyayı torrent yolundan yineleyen ve her sözcüğü geçerli dosya adlarından yineleyen oldukça verimsizdir.
  • kullanımınız, if($torrentFile.BaseName -match $word){eksik bir aralık olarak yorumlanan satır içeriğindeki köşeli parantezler nedeniyle hatalı olmalı; yerine kullanın:
    if($torrentFile.BaseName -match [RegEx]::Escape($word)){

Dolayısıyla, bu basitleştirilmiş komut dosyası yalnızca doğru yıl klasörleri oluşturacak,
a [veya (yukarı doğru
aktaran kelimeleri çıkarır ve torrent'deki ForEach sayma / sayma sözcüklerini tersine çevirir

## script_powershell.ps1
$torrentPath = 'A:\Path'
$templates   = 'A:\Test4.txt'

$movies = Select-String -Path $templates -Pattern "\((\d{4})\)" | ForEach-Object {
    $datePath = Join-Path $torrentpath $_.Matches.Groups[1].Value
    [PSCustomObject]@{
        datepath = $datePath
        name = ($_.Line -Replace '(\[|\().*$')
    }
    if(!(Test-Path $datePath)) {
        New-Item $datePath -ItemType "directory" | Out-Null
    }
}

$movies = $movies | Sort -unique Name

ForEach($torrentFile in (Get-ChildItem $torrentPath -File)){
    $words = @(($torrentfile.BaseName -Replace '(\[|\().*$' -split '\s|:|,|\.') -ne ''|
               Where-Object{ $_.Length -gt 1})
    $significant = $words.Count
    $datepath = ''
    ForEach($movie in ($movies|Where-Object Name -match $words[0])){
        $matchingWords = 0
        ForEach($word in $words){
            if($movie.Name -match $word){$matchingWords += 1 }
        }
        # "Movie:{0} `$matchingWords:{1},{2}" -f $movie.Name,$matchingWords,$significant
        if($matchingWords -ge $significant){$datepath = $movie.datepath }
    }
    if ($datepath){Move-Item -Path $torrentfile.FullName -Destination $datePath -confirm}
}

Betik yalnızca onaylandıktan sonra hareket eder,
bu test / güvenlik özelliğini kaldırmak -Confirmiçin Move-Item, yorum yapan / yorumlayan paragrafa .

Komut dosyasını çalıştırdıktan sonra test ortamım:

> tree \ /F
Auflistung der Ordnerpfade für Volume RamDisk
A:\
│   script_powershell.ps1
│   Test4.txt
└───PAth
    │   Caccia al delitto
    │   caccia al delitto [divx, test 1986]
    ├───1982
    └───1990
            Caccia a Ottobre Rosso.torrent

Merhaba LotPings. Senaryonuzu test ediyorum. 8418 dosyada sadece 2882 dosya işlendi. Burada, bu dosyalar taşındı ve yıl ile metin dosyaları birçok dizeleri vardır olmadığını kendinizi kontrol edebilirsiniz drive.google.com/file/d/1ePkteVKHvBhaQw-A_DSxRy62eWPVRqR8/... daha iyi taşımak için daha güçlü koşul var mı? -
Süper Sonic,
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.