Batch renomear arquivos e mover para subpastas (que devem ser criadas)

0

Eu tenho uma pasta cheia de arquivos com o formato "10389-2001.pdf", então primeiro um número de cinco dígitos, um número de quatro dígitos e um número de quatro dígitos. Eu quero renomear tudo para que o arquivo em si só é chamado "2001.pdf", mas que é movido para uma nova subpasta "10389". Como essa subpasta ainda não existe, seria necessário criá-la.

Estou aberto a sugestões de como fazer isso na linha de comando do Windows, o Powershell ou o Cygwin.

    
por user1769925 31.08.2017 / 16:42

2 respostas

1

Um script do PowerShell:

Get-ChildItem *-*.pdf|Foreach-object {
    $Dir, $File = $_.Name.Split('-')[0,1]
    if (!(Test-Path $Dir)){MD $Dir}
    $_| Move -Destination ("$Dir\$File") 
}

O lote:

@echo off
for /F "Tokens=1* delims=-" %%A in ('Dir /B "*-*.pdf"') do (
    If not exist ".\%%A" MD ".\%%A"
    Move "%%A-%%B" "%%A\%%B"
)

Árvore antes:

> tree /f .
Z:\
    10389-2001.pdf
    10815-2017.pdf

Árvore depois:

> tree /f .
Z:\
├───10389
│       2001.pdf
│
└───10815
        2017.pdf
    
por 31.08.2017 / 18:35
-1

Fácil com o VBS. Copie o código para um arquivo com extensão '.vbs'

on Error Resume Next   
sFolder = "D:\test\"
dFolder = "D:\test1\"
Set oFSO = CreateObject("Scripting.FileSystemObject")

For Each oFile In oFSO.GetFolder(sFolder).Files
    NameParts = split(oFile.Name,"-")
    Set f = oFSO.CreateFolder(dFolder & NameParts(0))
    set fi = oFSO.GetFile(oFile)
    fi.Copy dFolder & NameParts(0) & "\" & NameParts(1)
Next

ajuste a pasta de origem e destino. Não esqueça "\" no final. A pasta de destino deve existir. Quick'n'dirty codificado. Somente ?????-????? arquivos no sourceFolder.

    
por 31.08.2017 / 17:11