removendo caracteres especiais da estrutura de diretório inteira

1

Gostaria de saber se é possível REMOVER caracteres especiais recursivamente no PowerShell de todos os arquivos em uma estrutura de diretório inteira?

por exemplo, se eu tiver um arquivo chamado:

my presentation (fix).xlsx

Eu gostaria de renomeá-lo para:

my presentation fix.xlsx

obrigado pela sua orientação.

o motivo pelo qual precisamos fazer isso é que estamos migrando muitos arquivos para o sharepoint 2010 e o sharepoint não gosta de arquivos com caracteres especiais!

    
por l--''''''---------'''''''''''' 03.04.2013 / 23:03

1 resposta

1

O comando a seguir percorrerá recursivamente sua correspondência de estrutura de diretório e, para cada arquivo ou diretório correspondente, executará uma renomeação nesse arquivo, substituindo cada um dos caracteres ofensivos por um caractere vazio usando o operador powershell -replace .

Note que você terá que criar uma expressão regular que corresponda a todos os caracteres regulares que você deseja filtrar. Para corresponder ao exemplo fornecido e remover parênteses, a expressão regular seria:

$re = "[()]"

Se você deseja adicionar colchetes, é necessário evitá-los usando barras invertidas:

$re = "[\[\]()]"

continue adicionando caracteres entre os colchetes externos conforme necessário:

$re = "[\[\]()!]"

Aqui está o script, observe o bit de dança para que o operador -replace atue somente na parte base do nome em cada iteração:

dir -Recurse | ?{$_.Name -match $re}  | %{ren -literalpath $_.FullName -newname (join-path (get-item $_.PSPArentPath) $($_.Name -replace $re,""))}

Algumas notas:

  • O argumento -LiteralPath no comando ren é necessário para substituir arquivos com colchetes: [] está disponível apenas no Powershell v3 IIRC.
  • Você pode acabar com colisões de nomes após a renomeação, esse script não lida com isso.
por 04.04.2013 / 00:02