Criando uma pasta dos primeiros 5 caracteres do nome do arquivo em um arquivo de lote

5

Veja o que eu tenho:

C:\test345-test1.txt
C:\test456-test2.txt
C:\test444-test3.doc

Eu gostaria que o script lesse os primeiros 5 dígitos do arquivo, crie uma pasta com esses dígitos e inclua a letra T antes dela.

O resultado após a execução deve ser assim:

C:\test\T12345345-test1.txt
C:\test\T23456456-test2.txt
C:\test\T44444444-test3.doc

Atualmente, tenho isso, que faz a função; Eu simplesmente não consigo descobrir onde colocar o comando SET para extrair os 5 caracteres.

@echo off
for %%a in (*.*) do (
md "T%%a" 2>nul
move "%%a" "T%%~a"  
)

Acho que isso precisa ser adicionado para escolher apenas os 5 primeiros caracteres:

set first5=%%a:~5,1%

Pensamentos?

    
por billieh 25.10.2011 / 20:30

3 respostas

1

@echo off

for /f %%a in ('dir /a-d /b') do (
  if not "%%~dpnxa"=="%~dpnx0" call :func "%%~a"
)

goto :EOF

:func
set file=%~1
set dir=%file:~0,5%
md "T%dir%" 2>nul
move "%file%" "T%dir%" 
goto :EOF

Isso processará os arquivos (= no dirs) no diretório de trabalho. Eu também adicionei um cheque para evitar que o script mova o próprio arquivo de lote caso ele esteja localizado no diretório wd.

    
por 25.10.2011 / 21:02
1

Você pode usar isso para obter os cinco primeiros caracteres:

set first5=%a:~0,5%

set atribui o valor depois de = a first5 . %a% retornaria o valor da variável a , adicionando os seguintes caracteres que você faz referência ao intervalo, começando no caractere 0 e nos próximos cinco.

    
por 25.10.2011 / 20:45
0

Desde que você esteja com dificuldade para aprender alguma coisa, por que não aprender algo que valha a pena? No PowerShell:

$x = gci ; $x | % { $d = 'T' + $_.Name.Substring(0,5) ; mkdir $d ; move $_ $d } | Out-Null
    
por 26.10.2011 / 02:49