arquivo em lote segregar por nome de arquivo mmdd

1

então eu tenho essa idéia de segregar nossos arquivos por data. temos esses arquivos nomeados como Zxxx seguidos por mmdd onde x são números e mmdd é mês e data. meu pensamento inicial é segregar um por um

@echo off 
cd C:\folder

set /p var="Enter mmdd: "

md %var%

copy c:\folder\*%var%.txt c:\folder\%var%

exit

Agora, minha pergunta é ... existe uma maneira de criar automaticamente pastas e mover arquivos com o mesmo mmdd no pasta mmdd criada. Um tipo de usuário, clique em arquivo em lote, em seguida, o computador viu 5 itens que é 1208 mmdd e 3 1209 mmdd. isto  cria a pasta 1208 e a pasta 1209 e coloca os arquivos nela, respectivamente.

EDIT: Então tentei usar para loop e existe

 @echo off

FOR /L %%x IN (101,1,931) DO ( IF EXIST "????0%%x.txt" MKDIR 0%%x )
FOR /L %%x IN (101,1,931) DO ( IF EXIST "????0%%x.txt" MOVE "????0%%x.txt" 
@echo off 
cd C:\folder

set /p var="Enter mmdd: "

md %var%

copy c:\folder\*%var%.txt c:\folder\%var%

exit
%%x\ ) FOR /L %%x IN (1001,1,1231) DO ( IF EXIST "????%%x.txt" MKDIR 0%%x ) FOR /L %%x IN (1001,1,1231) DO ( IF EXIST "????%%x.txt" MOVE "????0%%x.txt"
 @echo off

FOR /L %%x IN (101,1,931) DO ( IF EXIST "????0%%x.txt" MKDIR 0%%x )
FOR /L %%x IN (101,1,931) DO ( IF EXIST "????0%%x.txt" MOVE "????0%%x.txt" %pre%%%x\ )
FOR /L %%x IN (1001,1,1231) DO ( IF EXIST "????%%x.txt" MKDIR 0%%x )
FOR /L %%x IN (1001,1,1231) DO ( IF EXIST "????%%x.txt" MOVE "????0%%x.txt" %pre%%%x\ )
pause
%%x\ ) pause

mas com um erro "Não é possível mover vários arquivos para um único arquivo."

Eu

    
por Mj Abawag Vega 25.01.2017 / 17:14

2 respostas

0

Você pode usar uma substring da variável date para isso.

Syntax:
      %variable:~num_chars_to_skip%
      %variable:~num_chars_to_skip,num_chars_to_keep%

Extraído do SS64.

Funciona assim para extrair ano, mês e dia:

set year=%date:~-4%
set month=%date:~-7,2%
set day=%date:~-10,2%

Agora você pode referenciá-los, por exemplo usando mkdir C:\folder\%year%\%month%-%day% para criar uma estrutura como C:\folder17-25\ .

Se você precisar de recursos mais avançados para o manuseio de data, considere mudar para o PowerShell.

    
por 25.01.2017 / 18:02
0
@Echo off&SetLocal EnableExtensions EnableDelayedExpansion
cd /D C:\folder
For %%A in (z*.txt) Do Echo:%%A|Findstr /i "^z[0-9][0-9][0-9][01][0-9][0-3][0-9].txt$" >NUL 2>&1 &&(
  Set Filename=%%A
  Set MMDD=!Filename:~3,4!
  If Not Exist !MMDD! MD !MMDD!
  Move %%A !MMDD!
)
  • O para itera sobre os arquivos correspondentes
  • Echo: %% A | Findstr ... valida o padrão de 7 números verificando grosseiramente MM / DD
  • O uso de ! em vez de % para as vars é necessário porque isso está dentro de um (bloco de códigos) que requer expansão atrasada.
  • !Filename:~3,4! é uma expressão de subseqüência extraída de números da 4ª posição com base em zero 4.
por 26.01.2017 / 22:16