Script de Windows para crear directorios de 3.000 archivos

Script de Windows para crear directorios de 3.000 archivos

Tenemos un archivo de correo electrónico que descarga todos los correos electrónicos en un directorio. Debido a algunas razones de rendimiento con el servidor, quiero configurar una tarea automatizada que ejecutará un script una vez al día y si hay más de 3000 (o cualquier cantidad) de archivos en el directorio principal, creará un nuevo directorio con la fecha. y mueva todos los archivos del directorio principal a él. Estoy seguro de que alguien ya ha escrito algo similar, así que si alguien pudiera indicarmelo, sería genial. El archivo por lotes o Powershell estarían bien.

Respuesta1

Escrito y probado. Copie el siguiente código en un archivo *.bat. Querrá modificar el directorio donde existen los correos electrónicos al comienzo del código. La variable cBig ya se ha configurado en 3000, pero puedes cambiarla si lo deseas. En la parte inferior, deberá cambiar el archivo *.txt para reflejar la extensión de los correos electrónicos que está moviendo. Una vez que lo hayas probado y estés satisfecho, puedes eliminar los comandos de pausa... simplemente te ayudan a ver qué está pasando. ¡Buena suerte!

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

Respuesta2

Script .CMD no probado.

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

información relacionada