Script em lote para remover # de um nome de arquivo (somente em um diretório específico)

1

Estou procurando um script para remover o caractere # de qualquer nome de arquivo em um diretório específico (documentos PDF).

Eu tenho visto alguns exemplos semelhantes, mas é um pouco confuso!

    
por David 01.11.2013 / 12:49

2 respostas

2

Em 2013, você deve usar o PowerShell:

Get-ChildItem | Where-Object {$_.Name -match '#'} | ForEach-Object { Rename-Item -Path $_.Name -NewName $($_.Name -Replace "#", "") -WhatIf }

Navegue até o diretório em questão e execute a linha. Ele encontra todos os arquivos com um # e renomeia cada um deles. Remova o '-Whatif' para realmente executar a operação.

Uma versão mais curta usando aliases e padrões seria:

ls | ? {$_.Name -match "#"} | ForEach { rni $_.Name $($_.Name -Replace "#", "")}

Pelo menos, a versão longa parece mais legível para mim do que a sintaxe de lote dos anos 80. A única parte oculta aqui é o '$ .Name', '$ ' no PowerShell refere-se ao objeto atual no loop. Aqui, em todos os casos, para o arquivo atual. Como precisamos de uma expressão para o parâmetro -NewName, precisamos envolvê-la em $ ()

    
por 01.11.2013 / 18:44
1
@echo off &setlocal
cd /d c:\users\data
for /f "delims=" %%a in ('dir /b /a-d *#*.pdf') do (
    set "fname=%%~a"
    setlocal enabledelayedexpansion
    set "nname=!fname:#=!"
    ren "!fname!" "!nname!"
    endlocal
)
    
por 01.11.2013 / 17:22