Se você tem um código Bash (não testei o script no seu post), você pode executá-lo no Windows por instalando o Ubuntu no Windows Subsystem para Linux . Depois de configurar o Ubuntu, você pode abrir um prompt do Bash usando o item Bash no Ubuntu no Windows no menu Iniciar (se presente) ou digitando bash
na caixa Executar. A estrutura C:\
do Windows está em /mnt/c/
no ambiente Bash.
Como alternativa, você pode usar o PowerShell!
$revPos = '670BA-XX-XXX'.Length
dir '670BA*.pdf' | group @{e={ $_.Name.Substring(0, $revPos) }} | % {
$revs = $_.Group | % { $_.Name.Substring($revPos).Split('.')[0] } | group Length | sort -Descending -Property @{e={ [int]$_.Name }} | % { $_.Group | sort -Descending }
$fileSet = $_.Name
$revs | % { $fileSet + $_ + '.pdf' } | select -Skip 1 | del
}
Vamos dividi-lo por linha e por componente do pipeline:
- Por conveniência, armazene o comprimento da peça que identifica o documento, ou seja, o índice da revisão. Isso pressupõe que os identificadores de documentos são sempre do mesmo tamanho.
- Obtenha todos os conjuntos de arquivos.
- Obtenha todos os arquivos no diretório atual que começam com
670BA
e são.pdf
s. - Agrupe-os pela primeira parte do nome, o identificador do documento. A empresa com o
@{e={
é uma propriedade personalizada . - Iterar sobre os grupos.
- Obtenha todos os arquivos no diretório atual que começam com
- Obtenha uma lista classificada de IDs de revisão para o grupo atual.
- A propriedade
Group
está nos objetos de saída dogroup
. - Para cada objeto de arquivo incluído no grupo, selecione a parte de seu nome após o identificador do documento, mas antes do período em
.pdf
. Este é o identificador de revisão. Se um arquivo não for revisado, essa será uma cadeia de comprimento zero. - Agrupe os IDs de revisão por tamanho.
- Classifique os objetos do grupo (não os itens neles) pelo comprimento de suas cadeias de membros. A propriedade
Name
do grupo contém o valor da propriedade que foi usada para agrupar os objetos. - Para cada um desses objetos de grupo, ordene seus membros em ordem alfabética. Isso agrupa todos os grupos na variável
$revs
, classificada de acordo com seu sistema de versão.
- A propriedade
- Armazene o valor
Name
do grupo de arquivos em uma variável diferente para mantê-lo acessível, pois outros para-cada (%
) irão sombrear a variável$_
. - Excluir tudo, exceto a revisão mais recente no grupo de documentos.
- Use as entradas na lista
$revs
. - Recomponha o nome completo do arquivo para cada identificador de revisão.
$_
agora contém identificadores de revisão de$revs
. - Ignore a primeira entrada, pois é a mais nova, a que queremos manter.
- Exclua os arquivos correspondentes a todas as entradas restantes no pipeline. Se você quiser testar o script sem excluir nada , adicione um espaço e a opção
-WhatIf
no final dessa linha. No modo hipotético,del
apenas imprimirá o que teria feito.
- Use as entradas na lista
- Encerra a iteração do grupo de documentos.
Para usar o script, salve-o como um arquivo .ps1
, por exemplo %código%. Se ainda não o fez, siga as instruções na seção Habilitando Scripts do wiki de tags do PowerShell . Então você pode colocá-lo em sua pasta de documentos, abrir o PowerShell e executá-lo assim:
.\revnewest.ps1