Skip to main content

Move Old Files to an Archive Folder

I have a folders structure where I store my scripts, backups, documents as shown below


The folders becomes cluttered with old versions of the files. So I decided to create a script that will move old files from each of the folders beneath the root one (e.g., C:\WP) to an archive sub-folder (if it exists at the particular level).
So I decided to archive old files in the Backups, Exchange, and SharePoint folders.
I created sub-folders called 'ARCHIVE' under each of those three folders as shown below


And then I created the following batch file



@ECHO OFF
SETLOCAL


SET ArchiveFolder=Archive
SET OlderThan=2
SET Extensions=TXT CSV BAK LOG


REM starts from the current folder 
REM   [when it's a scheduled task this is configured as "START IN"]
REM CD C:\WP


SET debug=ECHO 
SET LogFile="%~dpn0.LOG"




FOR /F %%m in ('CD') Do SET StartDir=%%m
%debug%.>>%LogFile%
%debug%.>>%LogFile%
%debug%.>>%LogFile%
%debug%  ***** Started on [%date%]  at [%time%]   ***** >>%LogFile%
%debug%      The Top Directory [%StartDir%]  >>%LogFile%
%debug%      Moving files older than [%OlderThan%] days >>%LogFile%
%debug%      with extensions [%Extensions%]   >>%LogFile%
%debug%      into [.\%ArchiveFolder%] subfolder >>%LogFile%
%debug%  ********************************************** >>%LogFile%
%debug%.>>%LogFile%


FOR /F %%i in ('DIR . /AD /B /S') DO (
if EXIST "%%i\%ArchiveFolder%" (
  %debug%   Moving files from [%%i] to [.\]%ArchiveFolder%  >>%LogFile%
  Call :MoveFiles %%i %Extensions%
  )
)


%debug%.>>%LogFile%
%debug%  ********************************************** >>%LogFile%
%debug%  *** Complete on [%date%] at [%time%]    ***** >>%LogFile%
Goto :EOF


REM ------------------------------------------------------------------
REM MoveFiles SourcePath Ext1 Ext2 .... Ext4
REM from [SourcePath] to [SourcePath\%ArchiveFolde%]
REM older than %OlderThan% days
REM


:MoveFiles
SET CurP="%1"
SET CurA="%1\%ArchiveFolder%"


:MainLoop
 SHIFT
 rem Now %1 referes to the next parameter (Ext1 or Ext2 or ...)


 if [%1]==[] Goto :EOF
 FORFILES 1>nul 2>nul   /P %CurP% /M *.%1 /D -%OlderThan% /C "CMD /c %debug%       **  Moving @path  >>%LogFile% "
 FORFILES 1>nul 2>nul   /P %CurP% /M *.%1 /D -%OlderThan% /C "CMD /c MOVE /Y @path  %CurA%"


goto :MainLoop


REM --------------------------------------------------------------




and scheduled it to run daily and configured the 'Start in' as C:\WP.
This script enumerates all sub-folders (recursively) for the current folder and if the current folder has a subfolder called 'ARCHIVE' it will move all files from the current folder into ARCHIVE provided the files are older than 2 days (configured in the script SET OlderThan=2) and their extensions are one within the list (SET Extensions=TXT CSV BAK LOG) also configured.

If you need to run this script manually then un-rem REM CD C:\WP  and change it to point to your top level folder.


Comments

Popular posts from this blog

Joining Windows 10 to Azure AD Domain

As of October 2016 to join Windows 10 computers to Azure AD Domain service requires these steps: Create a VNET in the classic portal . The VNET must be placed to a region where Azure AD domain service is available (( https://azure.microsoft.com/en-us/regions/services/ )  In the classic portal  go to Directory -> Configure and enable the domain service. And wait for ~ 30 min When completed the IP address will be populated Go back to the VNET configuration and add a DNS server with the IP (10.0.0.4 in this case) Create the "AAD DC Administrator" administrators group (again in Directory -> Group). Members of this group are granted administrative privileges on machines that are domain-joined to the Azure AD Domain Services managed domain. Add to the group your users who are supposed to have the administrative access on a Windows 10 computer go to Settings -> Accounts (this is true for Windows 10 version  1607) then select 'Access work

Create 3-Node Windows 2012 Multi-subnet Cluster

Environment There are two Data centers connected via a WAN link. Two Windows 2012 Servers (called SQLDEV1 and SQLDEV2) are located in the Primary Data Center (on the IP subnet 192.168.79.0/24) and the third server is placed in the Secondary Data Center with the 192.168.69.0/24 subnet. We’ll be creating a three-node Windows cluster with no shared storage on the multi subnet network with a file share witness at the Primary Data Center. We’ll be using a file share witness to protect from the cluster failure in a situation when the network between the Data Centers is unavailable and one of the servers in the Primary Data Center is also down (or being rebooted). The final state will look like depicted above: -           Two Virtual IP’s will be assigned (192.168.76.218 and 192.168.69.134) to the cluster -           The servers at the Primary Data Center will have a vote (Vote=1) and the server at the Secondary Data Center will have no vote (Vote=0). The file share witness al

Generate Calendar Table in Power BI with Fiscal Year Attributes

In Power BI go to Get Data --> Blank Query and paste into the Function windows the text below. This function takes as parameters: - StartYear (e.g., 2012) - EndYear (e.g., 2018) -FiscalYearStartMonth (e.g., 4) And it will generate a calendar table for dates from Jan-1-<StartYear> till Dec-31-<EndYear> and columns for Fiscal Year, Fiscal Month, Fiscal Quarter, Fiscal Year Day where the Fiscal year begins on FiscalYearStartMonth = (StartYear as number, EndYear as number, FiscalYearStartMonth as number)=> let     //Capture the date range from the parameters     StartDate = #date(StartYear, 1, 1),     EndDate = #date(EndYear, 12, 31), //Get the number of dates that will be required for the table     GetDateCount = Duration.Days(EndDate - StartDate)+1, //Take the count of dates and turn it into a list of dates     GetDateList = List.Dates(StartDate, GetDateCount,     #duration(1,0,0,0)), //Convert the list into a table     DateListToTable