
Estou tendo problemas para extrair alguns dados de um nome de arquivo, pois parece que adicionar um espaço ao final do nome extraído, mesmo que eu tente usar o truque .trim() para removê-lo, não funciona. Eu também tentei contar o comprimento do nome do arquivo -1 e ele deixou o espaço, mas removi o último caractere. Isso está tornando muito difícil para mim direcionar um caminho para uma pasta criada, pois estou colocando o espaço no caminho ..
Nomes de arquivos abaixo dos quais estou tentando extrair dados
12 Monkeys S02E10 - Fatherland.txt
Colony S02E01 - Eleven Thirteen.txt
Prison Break S05E05 - Contingency.txt
Estou tentando extrair o nome do programa de TV e criar uma pasta em um novo diretório e depois mover o arquivo para a pasta criada.
Aqui está o código que estou usando..
$TRANSFER = 'C:\Users\BRACEGIRDLE\Favorites\Desktop\TRANSFER\'
$TVSHOWS = 'C:\Users\BRACEGIRDLE\Favorites\Desktop\TV_SHOW\'
$pattern = ‘\s+\S[0-9][0-9].*’
Get-ChildItem "$TRANSFER/*.txt" |
ForEach-Object{
$target = $_.BaseName -split $pattern
Write-Host $target@123
$jon = $TVSHOWS+$target
If( -not (test-path $jon))
{
New-Item -ItemType Directory -force -Path $jon
}
Copy-Item -path $_.FullName -Destination $jon
}
E aqui está o erro
Quantico @123
Copy-Item : Could not find a part of the path
'C:\Users\BRACEGIRDLE\Favorites\Desktop\TV_SHOW\Quantico \Quantico S02E10 -
JMPALM.txt'.
At line:20 char:9
+ Copy-Item -path $_.FullName -Destination $jon
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Copy-Item], DirectoryNotFoundExcept
ion
+ FullyQualifiedErrorId : System.IO.DirectoryNotFoundException,Microsoft.PowerSh
ell.Commands.CopyItemCommand
Como você pode ver, nesta ilustração coloquei a variável (nome do programa de TV) em uma 'frase' para que você possa ver o espaço adicionado a ela. Tentei adicionar \s+ que remove um dos espaços, mas não consigo livre-se do outro, independentemente de usar o truque de corte ou não.
Alguém pode ajudar, obrigado Connor Bracegirdle
Responder1
Apenas para mostrar uma Expressão Regular adequada é muito bem capaz de
obter não apenas o nome, mas todos os elementos contidos no nome do arquivo
usando grupos de captura colocando as partes entre parênteses
** EDITAR veja o RegEX ao vivohttps://regex101.com/r/Vbhq7D/1**
## Q:\Test\2018\06\10\SU_1330038.ps1
$TRANSFER = 'C:\Users\BRACEGIRDLE\Favorites\Desktop\TRANSFER\'
$TVSHOWS = 'C:\Users\BRACEGIRDLE\Favorites\Desktop\TV_SHOW\'
$Pattern = '(.*)\s+S(\d{2})E(\d{2})[\- ]+(.*)'
Get-ChildItem $TVSHOWS *.txt| Where-Object BaseName -match $Pattern |
ForEach-Object{
$jon = Join-Path $TVSHOWS $Matches[1]
If( -not (Test-Path $jon)) {
New-Item -ItemType Directory -Force -Path $jon |Out-Null
}
$_ | Copy-Item -Destination $jon
[pscustomobject]@{
Name = $Matches[1]
Series = $Matches[2]
Episode= $Matches[3]
Title = $Matches[4]
}
}
O script faz a criação do subdiretório, a cópia e também mostra esta saída:
Name Series Episode Title
---- ------ ------- -----
12 Monkeys 02 10 Fatherland
Colony 02 01 Eleven Thirteen
Prison Break 05 05 Contingency
Exemplo de árvore no meu Ramdrive a:
> tree A: /F
A:\
│ 12 Monkeys S02E10 - Fatherland.txt
│ Colony S02E01 - Eleven Thirteen.txt
│ Prison Break S05E05 - Contingency.txt
│
├───12 Monkeys
│ 12 Monkeys S02E10 - Fatherland.txt
│
├───Colony
│ Colony S02E01 - Eleven Thirteen.txt
│
└───Prison Break
Prison Break S05E05 - Contingency.txt
Responder2
Verifique o resultado de -split. Ele cria uma matriz de 2 membros
10JUN2018:012955 /:> $txts = Get-ChildItem "$TRANSFER/*.txt"
10JUN2018:012955 /:> ($txts[0].basename -split $pattern).GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True String[] System.Array
10JUN2018:012955 /:>"some random stuff" -split " stuff"
some random
10JUN2018:013239 /:>("some random stuff" -split " stuff")[0]
some random
O código modificado com ajuste:
$TRANSFER = "E:\Code\PS\myPS\2018\Jun\10"
$TVSHOWS = "E:\code\PS\myPS\2018\Jun\TV_SHOW\"
$pattern = ‘\s+\S[0-9][0-9].*’
Get-ChildItem "$TRANSFER/*.txt"| ForEach-Object {
$target = ($_.BaseName -split $pattern)[0]
Write-Host "$target@123"
$jon = $TVSHOWS+$target
}
Saída:
12 Monkeys@123
Colony@123
Prison Break@123