我有这样的文件
Taxi driver.torrent
Tabu - Gohatto.txt
Troll 2 (1990)..zip
在我的filelist.txt文件中,我有这样命名的文件
Troll 2 (1990) [BDrip 1080p - H264 - Ita Ac3] Horror, Commedia
Troll 2 (1990) [XviD - Ita Mp3]
Taxi Driver (1976) Mastered..
Tabù - Gohatto (N. Oshima, 1999)
我只有类似的文件夹
1976
1990
1999
我想通过这种方式将文件移到正确的Year文件夹中
1976
|__ Taxi driver.torrent
1990
|__ Troll 2 (1990)..zip
1999
|__ Tabu - Gohatto.txt
我使用此路径,文件夹
C:\Path
Test4.txt
script_powershell.ps1
我实际上使用Powershell 5进行了测试
$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
}
}
}
编辑:
此poweshell存在许多问题。例如
Caccia al delitto
被移到了1990年的文件夹中...但是.. Caccia al delitto是1986年。 我拥有的内部文件文字
Caccia a Ottobre Rosso (1990) [DivX - Ita Mp3] Guerra [CURA] Russia
Caccia a Ottobre Rosso (1990) [VP9 - Ita Eng Opus] Thriller
我没有关于Caccia al delitto的文本字符串(我将其删除以进行测试)
答案 0 :(得分:1)
$movies = @()
$movieLocation = 'C:\Path'
$torrentPath = '.'
(get-content "$movieLocation\Test4.txt") | foreach($_) {
# Check for braces.
if (-not($_ -match ".*\(.*\).*")) {return}
$properties = @{
date = ($_ -replace ".+?\(.*?(\d{4}).*?\).*", '$1')
name = $_.substring(0, $_.IndexOf("(")).Trim()
}
# Add items that have a 4 digit date.
if ($properties.date -match "^\d{4}$") {
'Name: "' + $properties.name + '" Date: "' + $properties.date + '"'
$movies += New-Object PSObject -Property $properties
}
}
$torrentFiles = dir $torrentPath
foreach ($movie in $movies) {
$datePath = "$movieLocation\$($movie.date)"
if (-not(test-path "$datePath")) {
new-item "$datePath" -ItemType "directory"
}
foreach ($torrentFile in $torrentFiles) {
# Get percentage based on length.
$pc = [int]($movie.name.length / $torrentFile.basename.length * 100)
# Only between 80% and 100% in length.
if ($pc -gt 100) {continue}
if ($pc -lt 80) {continue}
if ($torrentFile.basename -match $movie.name) {
# Items that match.
'Torrent: {0,-40} Date: {1,-5} Match: {2}' -f $torrentFile.basename, $movie.date, $movie.name
if (-not(test-path "$datePath\$torrentfile")) {
Move-Item -LiteralPath "$torrentPath\$torrentfile" -Destination "$datePath"
}
}
}
}
使用正则表达式对date
进行了适度的修复。
name
需要修剪以删除尾随空格。
我在test-path
之前添加了move-item
,以防找不到文件。
自从上次使用Powershell以来已有很长时间了,因此也许可以进一步改善。
我在路径.
中进行了测试,因此希望C:\Path
也能正常工作。