Script do Windows para criar diretórios de 3.000 arquivos

1

Temos algum arquivamento de e-mails que está descartando todos os e-mails em um diretório. Devido a algumas razões de desempenho com o servidor, quero configurar uma tarefa automatizada que executará um script uma vez por dia e, se houver mais de 3.000 (ou qualquer número) de arquivos no diretório principal, crie um novo diretório com a data e mova todos os arquivos do diretório principal para ele. Tenho certeza de que alguém já escreveu algo parecido, então, se alguém puder me indicar isso seria ótimo. Lote ou Powershell ficariam bem.

    
por user11956 08.06.2010 / 19:05

2 respostas

2

Escrito e testado. Copie o seguinte código em um arquivo * .bat. Você vai querer modificar o diretório onde os e-mails existem no início do código. A variável cBig já foi definida para 3000, mas você pode alterar isso se quiser. Na parte inferior, o movimento * .txt terá que ser alterado para refletir a extensão dos e-mails que você está movendo. Uma vez que você tenha testado e esteja feliz, você pode remover os comandos de pausa ... eles apenas ajudam a ver o que está acontecendo. Boa sorte!

echo off

REM **navigate to the directory
cd\bat_test

REM **store count of files to file count.txt (/a-d removes folders from count)
dir /b /a-d | find /v /c "::" > count.txt

REM **read count back in to variable (easiest way I knew how to do this)
set /p myvar=<count.txt

REM **set your upper limit (in your case 3000)
set cBig=3000



REM **quick display of the number of files
echo %myvar%

pause


REM **is the number of files larger than our upper limit? If so goto BIG
if '%myvar%' gtr '%cBig%' goto BIG



:SMALL
REM **do nothing
exit


:BIG
REM **create new directory with date and move all files
Set FDate=%Date:~-10,10%
Set Fdate=%FDate:/=-%
MD %FDate%
move *.txt ./%FDate%

pause
    
por 08.06.2010 / 19:57
0

Roteiro não testado .CMD.

REM @echo off
setlocal enableextensions enabledelayedexpansion

  rem Print all filenames (excl. folders) in current directory into temporary text-file
  set TMPTXT=%TEMP%\%~n0.%RANDOM%.TMP
  dir /B /A-D  1>%TMPTXT%

  rem Count number of files (lines) in text-file
  set FILECNT=0
  for /F %%i in (%TMPTXT%) do (
    set /A FILECNT=!FILECNT!+1
  )
  echo Number of files in folder: !FILECNT!

  rem Is number of files greater than expected?
  if /I !FILECNT! GTR 2999  call :MoveFiles

  del %TMPTXT%
  goto :EOF

:MoveFiles
  rem Construct a folder-name based on date (remember date changes at midnight)
  rem Since the date value is locale specific, you might want to fiddle with string-replacing.
  set SUBFLDR=%DATE%
  mkdir "%SUBFLDR%"
  if /I !ERRORLEVEL! NEQ 0 (
    echo Failed to create sub-folder '%SUBFLDR%'.
    goto :EOF
  )

  rem Move only those files found in text-file to the new folder.
  for /F %%f in (%TMPTXT%) do (
    move  "%%f"  "%SUBFLDR%\."
    if /I !ERRORLEVEL! NEQ 0  echo Failed to move file '%%f'
  )
  goto :EOF
    
por 08.06.2010 / 20:25