This same script I’ve originally written a few days ago is morphing again for another purpose and does the following.
- Create a Logs Directory Locally and a Timestamped Sub Directory
- SFTP an entire remote directory tree to this Local Directory
@echo off
REM ######################################################
REM #### BEGIN - Do Not Touch - Misc Setup Variables: ####
REM ######################################################
REM SCRIPT_DIRECTORY is defined as the directory that this script currently exists in
SET "SCRIPT_DIRECTORY=%~dp0"
SET "SCRIPT_DIRECTORY=%SCRIPT_DIRECTORY:~0,-1%"
for /f "delims=" %%a in ('wmic OS Get localdatetime ^| find "."') do set VARIABLE_DATETIME=%%a
set VARIABLE_YEAR=%VARIABLE_DATETIME:~0,4%
set VARIABLE_MONTH=%VARIABLE_DATETIME:~4,2%
set VARIABLE_DAY=%VARIABLE_DATETIME:~6,2%
set VARIABLE_HOUR=%VARIABLE_DATETIME:~8,2%
set VARIABLE_MINUTE=%VARIABLE_DATETIME:~10,2%
set VARIABLE_SECOND=%VARIABLE_DATETIME:~12,2%
set VARIABLE_TIMESTAMP=%VARIABLE_YEAR%-%VARIABLE_MONTH%-%VARIABLE_DAY%
REM ####################################################
REM #### END - Do Not Touch - Misc Setup Variables: ####
REM ####################################################
REM #######################################################
REM ### BEGIN - Customized Remote/Local Setup Variables ###
REM #######################################################
REM PLINK and PSFTP Application Paths
SET "PLINK=C:/Program Files/Putty/plink.exe"
SET "PSFTP=C:/Program Files/Putty/psftp.exe"
REM Setup - Remote Linux Host, Username, and Potential Command to Run
SET "REMOTE_HOSTNAME=hostname.com"
SET "REMOTE_USERNAME=username"
REM Setup - Private Key for Authentication
SET "LOCAL_PRIVATE_KEY=%SCRIPT_DIRECTORY%\private_key.ppk"
REM Setup - Local File To Transfer - Local Filename Variables including Name, Path, and Timestamp
SET "LOCAL_DIRECTORY=%SCRIPT_DIRECTORY%\Logs"
SET "LOCAL_DIRECTORY_TIMESTAMPED=%LOCAL_DIRECTORY%\%VARIABLE_TIMESTAMP%"
REM Setup - Final Transfer Path to Remote Server - Remote Directory and Final Filename to Transmit
SET "REMOTE_DIRECTORY=/remote/path/to/logs"
REM #####################################################
REM ### END - Customized Remote/Local Setup Variables ###
REM #####################################################
REM #####################################################
REM ### BEGIN - Script Actions Using Setup Variables ###
REM #####################################################
mkdir "%LOCAL_DIRECTORY%"
mkdir "%LOCAL_DIRECTORY_TIMESTAMPED%"
REM Change to Timestamp Directory
cd /d "%LOCAL_DIRECTORY_TIMESTAMPED%"
REM SFTP - Stage SFTP Commands in Temp Script
SET "TEMP_BATCH_FILE=%SCRIPT_DIRECTORY%\psftp.batch"
echo cd %REMOTE_DIRECTORY% > "%TEMP_BATCH_FILE%"
echo get -r %REMOTE_DIRECTORY% >> "%TEMP_BATCH_FILE%"
REM SFTP - Execute Transfer
"%PSFTP%" -i "%LOCAL_PRIVATE_KEY%" ^
-b "%TEMP_BATCH_FILE%" ^
"%REMOTE_USERNAME%@%REMOTE_HOSTNAME%"
REM SFTP - Remove Temp Script
del /f "%TEMP_BATCH_FILE%"
REM ###################################################
REM ### END - Script Actions Using Setup Variables ###
REM ###################################################
pause