1. Computer problem? Tech Support Guy is completely free -- paid for by advertisers and donations. Click here to join today! If you're new to Tech Support Guy, we highly recommend that you visit our Guide for New Members.

Solved: Need to create a .BAT for Regular Backups using RAR and XCopy by Date

Discussion in 'All Other Software' started by billiehawkins, May 5, 2010.

Thread Status:
Not open for further replies.
Advertisement
  1. billiehawkins

    billiehawkins Thread Starter

    Joined:
    May 5, 2010
    Messages:
    14
    Goal: Backup log files from each server to a backup server, creating RAR of them to save space, then doing some cleanup to remove old files. I would like to do this with a batch file, as I am limited with our work servers.

    I am terrible at explaining things, so I have created an example below that I think will help illustrate what I am trying to accomplish.

    Batch file Goal:

    1. At 2:00 AM each day, create a .RAR of each file in a directory that is more than 7 days old
    2. Backup that created RAR to a separate server for archival
    3. Delete the RAR and the log file on the original server to recover the space, ignoring files less than 7 days old. This will keep the RAR and .log on both servers for 7 days.
    4. After 365 days, remove old archives from the backup server
    5. Single Log file created with completed tasks (to be overwritten daily, or append for a couple days would be nice)


    *****
    Example: Say that Today's Date is 3-10-10 ; folder contents

    //Server1/IISLog/daily_03-10-10.log
    //Server1/IISLog/daily_03-09-10.log
    //Server1/IISLog/daily_03-08-10.log
    //Server1/IISLog/daily_03-07-10.log
    //Server1/IISLog/daily_03-06-10.log
    //Server1/IISLog/daily_03-05-10.log
    //Server1/IISLog/daily_03-04-10.log
    //Server1/IISLog/daily_03-03-10.log
    //Server1/IISLog/daily_03-02-10.log
    //Server1/IISLog/daily_03-01-10.log
    (there are ~3 more years worth of files before this date)



    Example Result:

    //Server1/IISLog/daily_03-03-10.log compressed to RAR //BackupServer/Server1/IISLog/daily_03-03-10.rar
    //Server1/IISLog/daily_03-02-10.log compressed to RAR //BackupServer/Server1/IISLog/daily_03-02-10.rar
    //Server1/IISLog/daily_03-01-10.log compressed to RAR //BackupServer/Server1/IISLog/daily_03-01-10.rar
    (Apply to every file in the directory before the +7 day window)

    //Server1/IISLog/daily_03-03-10.log deleted
    //Server1/IISLog/daily_03-02-10.log deleted
    //Server1/IISLog/daily_03-01-10.log deleted
    (Apply to every file in the directory before the +7 day window)

    //BackupServer/Server1/IISLog/daily_03-10-09.rar deleted
    (Apply to every file in the directory before the +365 day window)

    //Server1/IISLog/BackupActivity.log created with the following:

    ** -- Daily Backup Activity --
    ** //Server1/IISLog/daily_03-03-10.log deleted
    ** //Server1/IISLog/daily_03-02-10.log deleted
    ** //Server1/IISLog/daily_03-01-10.log deleted
    ** (etc)
    **
    ** //Server1/IISLog/daily_03-03-10.log compressed to RAR //BackupServer/Server1/IISLog/daily_03-03-10.rar
    ** //Server1/IISLog/daily_03-02-10.log compressed to RAR //BackupServer/Server1/IISLog/daily_03-02-10.rar
    ** //Server1/IISLog/daily_03-01-10.log compressed to RAR //BackupServer/Server1/IISLog/daily_03-01-10.rar
    ** (etc)
    **
    ** //BackupServer/Server1/IISLog/daily_03-10-09.rar deleted
    ** (etc)
    **
    ** Activity completed at 3:15 AM on 3/10/10

    I think this can all be done as a batch file using XCOPY and RAR (maybe with @listfiles?), but I can't figure out how to only work with file dates (date added). I have done some of these things individually, but making them work as a smooth one click process that I can make a Windows Scheduled Task is quite another feat.
     
  2. TheOutcaste

    TheOutcaste

    Joined:
    Aug 7, 2007
    Messages:
    9,028
    Welcome to TSG!

    Will this be running on Windows 2000, or WinXP?
    Do you have the Forfiles.exe program from the Win2K Resource Kit (works on XP)
    Win2K Version can be found here or a slightly larger version from Microsoft that includes a Y2K update here.

    If you have Windows 2003 or Vista/Windows 7, they include a version of forfiles, but the syntax is different. The Win2K3 version will also run on XP.

    It can be done without forfiles, but doing date math in a batch file is a bit complex.
     
  3. billiehawkins

    billiehawkins Thread Starter

    Joined:
    May 5, 2010
    Messages:
    14
    Thank you for the welcome!

    To answer:

    - This will be running on Win 2K3 Server.
    - Yes, I can run forfiles from the command line on this server.
     
  4. TheOutcaste

    TheOutcaste

    Joined:
    Aug 7, 2007
    Messages:
    9,028
    There is one problem, and that is that Forfiles does not support UNC paths (\\machine\share). You'd need to have the share(s) mapped to a drive letter. If that's not possible, there is a work-around, but you would have to have an available drive letter for each UNC path.
    Another little glitch that will work itself out: Since you have three years of data, the first time the file is run, it will create rar files for all of the files and delete the logs older than 7 days from the main server.

    However, since the rar files are being created today, none will be older than 365 days, so none will be deleted from the backup server for the next 365 days. On day 366 all of the ones created today will be deleted. After that, it will delete the oldest every day.

    So, the file will first check for and delete any logs older than 365 days from the main server, no sense creating an archive that will be deleted.

    If you want to delete the older archives during the first year, you'd have to parse the date from the file name and check it. Not too hard to do if needed.

    The log file will just keep appending. Don't know if you want to set a max size or just keep the entries for the last X runs. We can also set it so the entries are most recent first instead of last. Once it's up and running there will only be 9 lines created each day, 6 of those will be the date and time stamp and separator line.

    Code:
    @Echo Off
    SetLocal
    If "%~1"=="Archive" Shift&Goto :_Archive
    If "%~1"=="Delete" Shift&Goto :_Delete
    If "%~1"=="FirstRun" Shift&Goto :_FirstRun
    :: Edit paths as needed
    Set _Source=C:\TestScr
    Set _Dest=C:\TestBak
    Set _Logfile=%_Source%\ArchiveLog.txt
    Set _Rar=%ProgramFiles%\Utilities\WinRar\Rar.exe
    :::::::::::::::::::::::::::::::::::::::::::::::::::::
    :: Do not Edit below this line
    :::::::::::::::::::::::::::::::::::::::::::::::::::::
    Set _Sep=  ===================================================================
    (Echo.
    Echo.Date: %date%
    Echo.Time: %Time%
    Echo.)>>"%_LogFile%"
    Set _Days=365
    2>Nul ForFiles /P "%_Source%" /M *.log /D -%_Days% /C "Cmd /C Call %0 FirstRun @Path"
    2>Nul ForFiles /P "%_Dest%" /M *.rar /D -%_Days% /C "Cmd /C Call %0 Delete @Path"
    Set _Days=7
    2>Nul ForFiles /P "%_Source%" /M *.log /D -%_Days% /C "Cmd /C Call %0 Archive @Path"
    (Echo.
    Echo.%_Sep%)>>"%_LogFile%"
    Goto :EOF
    :_Archive
    Set _Fname=%~n1
    >Nul "%_Rar%" a "%_Dest%\%_Fname%.rar" "%~1"
    Del "%~1"
    >>"%_LogFile%" Echo "%~1" compressed to RAR file "%_Dest%\%_Fname%.rar"
    >>"%_LogFile%" Echo "%~1" deleted, More than %_Days% days old
    Goto :EOF
    :_Delete
    Del "%~1"
    >>"%_LogFile%" Echo "%~1" deleted, More than %_Days% days old
    Goto :EOF
    :_FirstRun
    Echo.Line=%*=
    Del "%~1"
    >>"%_LogFile%" Echo "%~1" deleted, More than %_Days% days old
    
     
  5. billiehawkins

    billiehawkins Thread Starter

    Joined:
    May 5, 2010
    Messages:
    14
    1. Wow, thank you VERY much for the rapid response and clean code!

    2. I'll see what I can do about mapping \\Server\path, but I doubt this will be a good option, because I cannot set 'reconnect on reboot' or whatever. I would have to go with the second option - we have 15+ drive letters that are not used, that we can specify as needed, they just don't stick. I am guessing this is with NET USE applied before the Set Commands?

    "NET USE X: \\Server1\Folder"

    3. I figured that the First Run would cause issues with the date. As long as all the RAR files get copied to the BackupServer, I can go in after first run and delete the Originating Server RARs.
     
  6. billiehawkins

    billiehawkins Thread Starter

    Joined:
    May 5, 2010
    Messages:
    14
    With regard to the log file, can we have it append for the last 60 runs? I don't want to create bloat, since this will run every day.
     
  7. TheOutcaste

    TheOutcaste

    Joined:
    Aug 7, 2007
    Messages:
    9,028
    Actually there's an easier way to map a drive without having to know what letters are available. PushD will map to the next available letter. PopD will unmap.

    This seems to do what you want, works with both UNC and Non-UNC paths. Limits the log file to 60 records. You may have to tweak the Timeout value in Line 35. If the logfile is stored on a network share, it may misscount the number of records in the file (it misses the one just added if it checks too fast, so you end up with 61 instead of 60).
    If the Logfile is local, that timeout line shouldn't be needed.
    Also, if the logfile is stored in the Source folder, and it can't be mapped for some reason, that error can't be logged. The program will quit with a couple of errors beacause it can't find the logfile. One option would be to use a local log file just for errors.

    Give this a try and see how it works:

    Code:
    @Echo Off
    SetLocal EnableDelayedExpansion
    If "%~1"=="Archive" Shift&Goto :_Archive
    If "%~1"=="Delete" Shift&Goto :_Delete
    Set _Source=%_DL%\TestScr
    Set _Dest=%_DL%\TestBak
    Set _Rar=%ProgramFiles%\Utilities\WinRar\Rar.exe
    Set _Records=60
    :::::::::::::::::::::::::::::::::::::::::::::::::::::
    :: Do not Edit below this line
    :::::::::::::::::::::::::::::::::::::::::::::::::::::
    :: Check if Source is a UNC path
    Set _Src=%_Source%
    If "%_Source:~,2%"=="\\" (
      PushD "%_Source%"||Goto _SourceError
      Set _Src=!CD:~,2!)
    Set _Logfile=%_Src%\ArchiveLog.txt
    :: Check if Dest is a UNC path
    Set _Dst=%_Dest%
    If "%_Dest:~,2%"=="\\" (
      PushD "%_Dest%"||Goto _DestError
      Set _Dst=!CD:~,2!)
    Set _Sep=  ===================================================================
    (Echo.Date: %date%
    Echo.Time: %Time%
    Echo.)>>"%_LogFile%"
    Set _Days=365
    2>Nul ForFiles /P "%_Dst%" /M *.rar /D -%_Days% /C "Cmd /C Call %~f0 Delete @Path"
    Set _Days=7
    2>Nul ForFiles /P "%_Src%" /M *.log /D -%_Days% /C "Cmd /C Call %~f0 Archive @Path"
    (Echo.
    Echo.%_Sep%
    Echo.)>>"%_LogFile%"
    :_Cleanup
    >Nul Timeout /T 5
    :: Check Log file size
    Set _NumRec=
    For /F "Tokens=3 Delims=:" %%I In ('Find /C "%_Sep%" "%_LogFile%"') Do Set /A _NumRec=%%I
    If %_NumRec% LEQ %_Records% Goto _Done
    Set /A _Remove=_NumRec-%_Records%
    Set _Count=0
    Set _Flag=0
    For /F "Tokens=1 Delims=" %%I In ('Type "%_LogFile%"') Do (
      If !_Flag!==1 (
        If "%%I"=="%_Sep%" (
          (Echo.
          Echo.%_Sep%
          Echo.)>>"%_LogFile%.tmp"
        ) Else (
          Echo.%%I>>"%_LogFile%.tmp"
        )
      ) Else (
        If "%%I"=="%_Sep%" (
          Set /A _Count+=1
          If !_Count!==%_Remove% Set _Flag=1
    )))
    >Nul Move "%_LogFile%.tmp" "%_LogFile%"
    :_Done
    PopD
    PopD
    Goto :EOF
    :_Archive
    Set _Fname=%~n1
    >Nul "%_Rar%" a "%_Dst%\%_Fname%.rar" "%~1"
    Del "%~1"
    >>"%_LogFile%" Echo "%_Source%\%_Fname%%~x1" compressed to RAR file "%_Dest%\%_Fname%.rar"
    >>"%_LogFile%" Echo "%_Source%\%_Fname%%~x1" deleted, More than %_Days% days old
    Goto :EOF
    :_Delete
    Del "%~1"
    >>"%_LogFile%" Echo "%_Dest%\%~nx1" deleted, More than %_Days% days old
    Goto :EOF
    :_SourceError
    >>"%_LogFile%" Echo.Error mapping Source UNC path %_Source%
    Goto _Done
    :_DestError
    >>"%_LogFile%" Echo.Error mapping Destination UNC path %_Dest%
    Goto _Cleanup
     
  8. billiehawkins

    billiehawkins Thread Starter

    Joined:
    May 5, 2010
    Messages:
    14
    The new script seems to work great, short of a couple modifications, and one issue with \\ paths.

    Original:
    Set _Source=%_DL%\TestScr
    Set _Dest=%_DL%\TestBak
    Set _Rar=%ProgramFiles%\Utilities\WinRar\Rar.exe
    Set _Records=60

    Works:
    Set _Source=C:\test\source
    Set _Dest=C:\test\dest
    Set _Rar=%ProgramFiles%\WinRar\Rar.exe
    Set _Records=60

    File xfer and delete work, log works, RAR doesn't:
    Set _Source=\\mt-002\C$\test\source
    Set _Dest=\\mt-002\C$\test\dest
    Set _Rar=%ProgramFiles%\WinRar\Rar.exe
    Set _Records=60

    same directories. Both times, Script launched locally on test machine (c:\test\testscript.bat which is \\mt-002\c$\testscript.bat)

    I am guessing that Rar.exe can't use UNC paths?
     
  9. TheOutcaste

    TheOutcaste

    Joined:
    Aug 7, 2007
    Messages:
    9,028
    The Rar program isn't being given a UNC path. The PushD commands map the folders to drive letters, and those letters are used.
    Here's the lines when I run it on a Win2K3 system with the Echo Off statement commented out, using folders on a 2nd Win2K3 system. Note that I renamed the TestScr Share/folder to TestSrc.
    Code:
    C:\Scripts>Set _Source=\\Win2K3-Ent-Dino\TestSrc
    C:\Scripts>Set _Dest=\\Win2K3-Ent-Dino\TestBak
    C:\Scripts>Set _Rar=C:\Program Files\Utilities\WinRar\Rar.exe
    C:\Scripts>Set _Records=60
    C:\Scripts>Set _Src=\\Win2K3-Ent-Dino\TestSrc
    C:\Scripts>If "\\" == "\\" (
    [COLOR=Red][B]PushD[/B][/COLOR] "\\Win2K3-Ent-Dino\TestSrc"  || Goto _SourceError
     Set _Src=!CD:~,2!
    )
    [COLOR=Red][B]Z:[/B][/COLOR]\>Set _Logfile=Z:\ArchiveLog.txt
    Z:\>Set _Dst=\\Win2K3-Ent-Dino\TestBak
    Z:\>If "\\" == "\\" (
    [COLOR=Red][B]PushD[/B][/COLOR] "\\Win2K3-Ent-Dino\TestBak"  || Goto _DestError
     Set _Dst=!CD:~,2!
    )
    [COLOR=Red][B]Y:[/B][/COLOR]\>Set _Sep=  ===================================================================
    
    \\Win2K3-Ent-Dino\TestSrc is mapped as Drive Z:
    \\Win2K3-Ent-Dino\TestBak is mapped as Drive Y:
    And this is the actual line that is given to the rar.exe program, you can see it's using Y: and Z:, not the UNC paths
    Code:
    Z:\>"C:\Program Files\Utilities\WinRar\Rar.exe" a "Y:\daily_03_11_10.rar" "Z:\daily_03_11_10.log" 1>Nul
    Comment out the Echo Off line, and remove the >Nul statements so output from the commands will be displayed, and run it after opening a command prompt. Hopefully there's an error that will be displayed that will show why the RAR files aren't being created.

    I find it easier to copy the entire command prompt screen to a text editor, makes searching for a particular line to see the output easier.
    Right click the Title bar of the Command Prompt, point to Edit, click Select All. This will highlight everything
    Press Enter to copy to the clipboard, then you can paste to your favorite text editor.

    Make sure you've increased the Command Prompt screen buffer from the default of 300 lines; My test folder has just 15 files (14 were rared) and generates 342 lines of output.

    You can attach/paste it here if you want me to look through it, just make sure it doesn't contain any file/folder names you don't want posted, like a user name in a profile folder path that may be displayed in the prompt.

    I haven't tried using a UNC path to the same system, was running from a different system. I'll give that a try in a bit, see if I have the same problem.
     

    Attached Files:

  10. TheOutcaste

    TheOutcaste

    Joined:
    Aug 7, 2007
    Messages:
    9,028
    OK, PushD works differently if you are mapping to a share on the same PC vs a share on a Remote system. It maps to C$, then changes to the folder, so the mapped letter is to C$, not C$\Share:
    Code:
    Microsoft Windows [Version 5.2.3790]
    (C) Copyright 1985-2003 Microsoft Corp.
    
    C:\Documents and Settings\Administrator>PushD "\\Win2K3-Ent-Dino\C$\TestSrc"
    
    Z:\TestSrc>net use
    New connections will not be remembered.
    
    
    Status       Local     Remote                    Network
    
    -------------------------------------------------------------------------------
    OK           Z:        \[COLOR=Red][B]\Win2K3-Ent-Dino\C$[/B][/COLOR]      Microsoft Windows Network
    The command completed successfully.
    
    
    [COLOR=Red][B]Z:\TestSrc>[/B][/COLOR]
    When connecting from a different System, it maps to the share:
    Code:
    Microsoft Windows [Version 5.2.3790]
    (C) Copyright 1985-2003 Microsoft Corp.
    
    C:\Documents and Settings\Administrator>PushD "\\Win2K3-Ent-Dino\TestSrc"
    
    Z:\>net use
    New connections will be remembered.
    
    
    Status       Local     Remote                    Network
    
    -------------------------------------------------------------------------------
    OK           Z:        [COLOR=Red][B]\\Win2K3-Ent-Dino\TestSrc[/B][/COLOR] Microsoft Windows Network
    The command completed successfully.
    
    
    [COLOR=Red][B]Z:\>[/B][/COLOR]
    Same thing happens with the Destination folder, Y: is mapped to the c$ share.

    The batch file expects the Mapped drive letters (Y: and Z: in this case) to be to the shared folder, not c$, so doesn't add the folder to the path. Forfiles can find the files because the path is specified as the drive letter only, so it uses the current directory that the drive is set to, which is the correct location, but the destination is using the variables %_Src% and %_dst% which get set to the Drive letter only if using a UNC path, otherwise it's the drive letter and path.
    So the Rar files are being created in C:\, not C:\TestBak, as is the logfile, Archivelog.txt
    I added a 2nd variable for the source and path drives, so this version should work for all three of these situations:
    Running Local using a local path (C:\Path)
    Running Local using a UNC path (\\Server\C$\Share)
    Running Remote using a UNC path (\\Server\Share)

    Code:
    @Echo Off
    SetLocal EnableDelayedExpansion
    If "%~1"=="Archive" Shift&Goto :_Archive
    If "%~1"=="Delete" Shift&Goto :_Delete
    Set _Source=\\Win2K3-Ent-Dino\C$\TestSrc
    Set _Dest=\\Win2K3-Ent-Dino\C$\TestBak
    Set _Rar=%ProgramFiles%\Utilities\WinRar\Rar.exe
    Set _Records=60
    :::::::::::::::::::::::::::::::::::::::::::::::::::::
    :: Do not Edit below this line
    :::::::::::::::::::::::::::::::::::::::::::::::::::::
    :: Check if Source is a UNC path
    Set _Src=%_Source%
    Set _SrcDr=%_Source%
    If "%_Source:~,2%"=="\\" (
      PushD "%_Source%"||Goto _SourceError
      Set _Src=!CD!
      Set _SrcDr=!CD:~,2!)
    Set _Logfile=%_Src%\ArchiveLog.txt
    :: Check if Dest is a UNC path
    Set _Dst=%_Dest%
    Set _DstDr=%_Dest%
    If "%_Dest:~,2%"=="\\" (
      PushD "%_Dest%"||Goto _DestError
      Set _Dst=!CD!
      Set _DstDr=!CD:~,2!)
    Set _Sep=  ===================================================================
    (Echo.Date: %date%
    Echo.Time: %Time%
    Echo.)>>"%_LogFile%"
    Pause
    Set _Days=365
    2>Nul ForFiles /P "%_DstDr%" /M *.rar /D -%_Days% /C "Cmd /C Call %~f0 Delete @Path"
    Pause
    Set _Days=7
    2>Nul ForFiles /P "%_SrcDr%" /M *.log /D -%_Days% /C "Cmd /C Call %~f0 Archive @Path"
    (Echo.
    Echo.%_Sep%
    Echo.)>>"%_LogFile%"
    :_Cleanup
    :: Check Log file size
    Set _NumRec=
    For /F "Tokens=3 Delims=:" %%I In ('Find /C "%_Sep%" "%_LogFile%"') Do Set /A _NumRec=%%I
    If %_NumRec% LEQ %_Records% Goto _Done
    Set /A _Remove=_NumRec-%_Records%
    Set _Count=0
    Set _Flag=0
    For /F "Tokens=1 Delims=" %%I In ('Type "%_LogFile%"') Do (
      If !_Flag!==1 (
        If "%%I"=="%_Sep%" (
          (Echo.
          Echo.%_Sep%
          Echo.)>>"%_LogFile%.tmp"
        ) Else (
          Echo.%%I>>"%_LogFile%.tmp"
        )
      ) Else (
        If "%%I"=="%_Sep%" (
          Set /A _Count+=1
          If !_Count!==%_Remove% Set _Flag=1
    )))
    >Nul Move "%_LogFile%.tmp" "%_LogFile%"
    :_Done
    PopD
    PopD
    Goto :EOF
    :_Archive
    Set _Fname=%~n1
    >Nul "%_Rar%" a "%_Dst%\%_Fname%.rar" "%~1"
    Del "%~1"
    >>"%_LogFile%" Echo "%_Source%\%_Fname%%~x1" compressed to RAR file "%_Dest%\%_Fname%.rar"
    >>"%_LogFile%" Echo "%_Source%\%_Fname%%~x1" deleted, More than %_Days% days old
    Goto :EOF
    :_Delete
    Del "%~1"
    >>"%_LogFile%" Echo "%_Dest%\%~nx1" deleted, More than %_Days% days old
    Goto :EOF
    :_SourceError
    >>"%_LogFile%" Echo.Error mapping Source UNC path %_Source%
    Goto _Cleanup
    :_DestError
    >>"%_LogFile%" Echo.Error mapping Destination UNC path %_Dest%
    Goto _Cleanup
     
  11. TheOutcaste

    TheOutcaste

    Joined:
    Aug 7, 2007
    Messages:
    9,028
    Just a side note, you can use \\Server\Share to map to a share on the same server, which would have worked fine, you don't need to use \\Server\C$\Folder. The C$ is only needed if the folder isn't shared.
     
  12. billiehawkins

    billiehawkins Thread Starter

    Joined:
    May 5, 2010
    Messages:
    14
    Thank you for all your help - I will try that on Monday :)
     
  13. billiehawkins

    billiehawkins Thread Starter

    Joined:
    May 5, 2010
    Messages:
    14
    Well, From the testing I did (single server) and the Local applications I've applied it to; this works great.

    Thank you for all of your help on this!

    For anyone else who wishes to use this - just make sure you have WinRar installed BEFORE running this. It won't error out when processing, and you could lose files. (it will delete files and not have RAR'd them).
     
  14. TheOutcaste

    TheOutcaste

    Joined:
    Aug 7, 2007
    Messages:
    9,028
    Good point, I didn't think about that. Easy to check for. Right after the line that specifies the path to WinRar (line 7) add this line:
    Code:
    If Not Exist "%_Rar%" (Echo.Unable to find RAR.EXE at %_Rar%. Exiting Program)&Pause&Goto:EOF
    
     
  15. Sponsor

As Seen On
As Seen On...

Welcome to Tech Support Guy!

Are you looking for the solution to your computer problem? Join our site today to ask your question. This site is completely free -- paid for by advertisers and donations.

If you're not already familiar with forums, watch our Welcome Guide to get started.

Join over 733,556 other people just like you!

Loading...
Thread Status:
Not open for further replies.

Short URL to this thread: https://techguy.org/921296

  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice