Pages

Saturday, June 19, 2010

DOS Batch - FTP Scripts

File Transfer with FTP, One-File Solutions.













































TOP


2008-01-01

Classic FTP - Executing a FTP script

















Description:

The FTP command support the "-s:ftpscript.txt" option. The FTP commands listed in ftpscript.txt will automatically run after FTP starts. The FTP command can be started from a batch file.


Example:

  • FTP -v -i -s:ftpscript.txt


See also command line help: "C:>ftp -?"
Script:







1.


2.


3.


4.


5.


6.


7.


8.


9.


10.

open example.com


username


password


!:--- FTP commands below here ---


lcd c:\MyLocalDirectory


cd public_html/MyRemoteDirectory


binary


mput "*.*"


disconnect


bye


Script Output:









DOS Script Ouput


ftp> open example.com
User (Username:(none)):

ftp> !:--- FTP commands below here ---
ftp> lcd c:\MyLocalDirectory
Local directory now c:\MyLocalDirectory.
ftp> cd public_html/MyRemoteDirectory
ftp> binary
ftp> !: mput "*.*"
ftp> disconnect
ftp> bye





TOP


2008-01-01

FTP - Simple Single Batch - FTP script and batch in a single file

















Description:

Embed FTP script into a batch script. Add this line at the beginning of the FTP script:


@ftp -i -s:"%~f0"&GOTO:EOF

The "FTP -s:ftpscript.txt" option executes a FTP script wheres "%~f0" resolved to the name of the running batch file. "GOTO:EOF" ends the batch script and makes sure the FTP script doesn`t run as part of the batch.


Good: You end up with only one file that contains the batch script and the FTP script combined.


Minor flaw: The batch command in the first line causes an "Invalid command." error when executed in FTP context, however the FTP execution will continue.


Features:

  • Single file to distribute combining batch and FTP script


Script:







1.


2.


3.


4.


5.


6.


7.


8.


9.


10.


11.

@ftp -i -s:"%~f0"&GOTO:EOF


open example.com


username


password


!:--- FTP commands below here ---


lcd c:\MyLocalDirectory


cd public_html/MyRemoteDirectory


binary


mput "*.*"


disconnect


bye


Script Output:









DOS Script Ouput


ftp> @ftp -i -s:"%~f0"&GOTO:EOF
Invalid command.
ftp> open example.com
User (Username:(none)):

ftp> !:--- FTP commands below here ---
ftp> lcd c:\MyLocalDirectory
Local directory now c:\MyLocalDirectory.
ftp> cd public_html/MyRemoteDirectory
ftp> binary
ftp> !: mput "*.*"
ftp> disconnect
ftp> bye





TOP


2009-12-06

FTP - Automatic Login - Automatically login to your FTP session with a single click

















Description:

If you frequently find yourself calling FTP from the command line, each time having to login and change directory and change FTP modes, until you finally get where you want be in order to do some real work then you may wish to get there with a singe click.


This little batch can connect to your FTP server and logs you in before it gives you the prompt. You can easily add more FTP commands to it, like changing directories or switching to binary mode or whatever you like to be done before taking over control on the FTP prompt.


The FTP connection information is embedded within the batch itself. The batch connects to an FTP server by executing itself in FTP context using the FTP -s option. Once executing in FTP context it executes all FTP commands listed in the file. By omitting the final FTP "bye" command it will stop at the FTP prompt and wait for user input.


Optionally a FTP script can be provided as input stream, that way multiple FTP scripts can share the same login information. Example:


FtpLogin.bat <script1.ftp


Script:Download: FtpLogin.bat







1.


2.


3.


4.


5.

@ftp -i -s:"%~f0"&GOTO:EOF


open example.com


username


password


pwd


Script Output:









DOS Script Ouput


ftp> @ftp -i -s:"%~f0"&GOTO:EOF
Invalid command.
ftp> open example.com
Connected to example.com.
220-
220 FTP Server ready
User (example.com:(none)):
331 Password required

230 User logged in
ftp> pwd
257 "/" is the current directory
ftp>





TOP


2009-12-06

FTP Scripts Sharing Login Info - Manage the FTP login separately from your FTP scripts













Description:

If you have multiple FTP scripts that all use the same login information to your FTP site then you may wish to manage the login information separately from your FTP scripts in a single place. That way if the username, password or hostname for the FTP connection changes you only need to edit a single place instead of having to edit all FTP scripts one by one.


This automatic login script (also described in detail earlier) can be used to execute different FTP scripts that share the same login information stored within the batch file.


Example: FtpLogin.bat script1.ftp


Note: The FTP scripts passed into the batch must have the login sequence removed.


Note: The FTP script executes even if the connection sequence fails potentially causing `Not connected` and other errors. This is no different from regularly executing FTP with -s option.


Script:Download: FtpLoginSharing.bat







1.


2.


3.


4.

@type %1|ftp -i -s:"%~f0"&GOTO:EOF


open example.com


username


password






TOP


2008-10-17

FTP - Resolving Environment Variables - Creating FTP script on the fly at runtime and using variables within the FTP script













Description:

This batch executed the FTP script embedded within the batch. All variables in the FTP script will be resolved.


The FOR loop extracts the FTP script into a temporary file. It the ECHO command is being CALLed for each line in order to resolve the variables.


Variables can be used within the FTP script the same way as in a batch script, including any string manipulation and command line arguments like %1 %2 %~n0 %* and so on.


All batch lines start with semicolon so that they will be ignored by the FOR loop. Semicolon is the default end-of-line (EOL) character used by the FOR command.


Script:







1.


2.


3.


4.


5.


6.


7.


8.


9.


10.


11.


12.


13.


14.


15.

;@echo off


;(for /f "usebackq delims=" %%A in ("%~f0") do call echo.%%A)>"%temp%\%~n0.ftp"


;ftp -i -s:"%temp%\%~n0.ftp"


;GOTO:EOF




open example.com


username


password


!:--- FTP commands below here ---


cd public_html/%COMPUTERNAME%


binary


hash on


%*


disconnect


bye






TOP


2010-02-05

FTP - Download Only New Files - Ftp script to download only files that don`t exist in local folder, i.e. to avoid overwrite













Description:This batch connects twice to the FTP server. First time it retrieves a list of files on the FTP server. This list is being trimmed to contain only files that don`t already exist locally. The files in the trimmed list are then downloaded during a second connection.

Note: Since all files are passed into the FTP`s MGET command there might be a limit to the number of files that can be processed at once.


Script:Download: BatchFtpDownloadOnlyNewFiles.bat







1.


2.


3.


4.


5.


6.


7.


8.


9.


10.


11.


12.


13.


14.


15.


16.


17.


18.


19.


20.


21.


22.


23.


24.


25.


26.


27.


28.


29.


30.


31.


32.


33.


34.


35.


36.


37.


38.


39.


40.


41.


42.


43.


44.


45.


46.


47.


48.


49.


50.


51.


52.


53.


54.


55.


56.


57.


58.


59.


60.


61.


62.


63.


64.


65.


66.


67.


68.


69.


70.

@Echo Off




REM -- Define File Filter, i.e. files with extension .txt


Set FindStrArgs=/E /C:".txt"




REM -- Extract Ftp Script to create List of Files


Set "FtpCommand=ls"


Call:extractFileSection "[Ftp Script 1]" "-">"%temp%\%~n0.ftp"


Rem Notepad "%temp%\%~n0.ftp"




REM -- Execute Ftp Script, collect File Names


Set "FileList="


For /F "Delims=" %%A In ('"Ftp -v -i -s:"%temp%\%~n0.ftp"|Findstr %FindStrArgs%"') Do (


Call Set "FileList=%%FileList%% "%%A""


)




REM -- Extract Ftp Script to download files that don't exist in local folder


Set "FtpCommand=mget"


For %%A In (%FileList%) Do If Not Exist "%%~A" Call Set "FtpCommand=%%FtpCommand%% "%%~A""


Call:extractFileSection "[Ftp Script 1]" "-">"%temp%\%~n0.ftp"


Rem Notepad "%temp%\%~n0.ftp"




For %%A In (%FtpCommand%) Do Echo.%%A




REM -- Execute Ftp Script, download files


ftp -i -s:"%temp%\%~n0.ftp"


Del "%temp%\%~n0.ftp"


GOTO:EOF






:extractFileSection StartMark EndMark FileName -- extract a section of file that is defined by a start and end mark


:: -- [IN] StartMark - start mark, use '...:S' mark to allow variable substitution


:: -- [IN,OPT] EndMark - optional end mark, default is first empty line


:: -- [IN,OPT] FileName - optional source file, default is THIS file


:$created 20080219 :$changed 20100205 :$categories ReadFile


:$source http://www.dostips.com


SETLOCAL Disabledelayedexpansion


set "bmk=%~1"


set "emk=%~2"


set "src=%~3"


set "bExtr="


set "bSubs="


if "%src%"=="" set src=%~f0& rem if no source file then assume THIS file


for /f "tokens=1,* delims=]" %%A in ('find /n /v "" "%src%"') do (


if /i "%%B"=="%emk%" set "bExtr="&set "bSubs="


if defined bExtr if defined bSubs (call echo.%%B) ELSE (echo.%%B)


if /i "%%B"=="%bmk%" set "bExtr=Y"


if /i "%%B"=="%bmk%:S" set "bExtr=Y"&set "bSubs=Y"


)


EXIT /b






[Ftp Script 1]:S


!Title Connecting...


open example.com


username


password




!Title Preparing...


cd public_html/MyRemoteDirectory


lcd c:\MyLocalDirectory


binary


hash




!Title Processing... %FtpCommand%


%FtpCommand%




!Title Disconnecting...


disconnect


bye






TOP


2010-02-05

FTP - Upload Only New Files - Ftp script to upload only files that don`t exist in remote folder, i.e. incremental upload













Description:This batch connects twice to the FTP server. First time it retrieves a list of files on the FTP server. Local files that are are not in this list will then be uploaded during a second connection.

Note: Since all files are passed into the FTP`s MPUT command there might be a limit to the number of files that can be processed at once.


Script:Download: BatchFtpUploadOnlyNewFiles.bat







1.


2.


3.


4.


5.


6.


7.


8.


9.


10.


11.


12.


13.


14.


15.


16.


17.


18.


19.


20.


21.


22.


23.


24.


25.


26.


27.


28.


29.


30.


31.


32.


33.


34.


35.


36.


37.


38.


39.


40.


41.


42.


43.


44.


45.


46.


47.


48.


49.


50.


51.


52.


53.


54.


55.


56.


57.


58.


59.


60.


61.


62.


63.


64.


65.


66.


67.


68.


69.


70.


71.


72.


73.


74.

@Echo Off


Setlocal Enabledelayedexpansion




REM -- Define File Filter, i.e. files with extension .txt


Set FindStrArgs=/E /C:".txt"




REM -- Extract Ftp Script to create List of Files


Set "FtpCommand=ls"


Call:extractFileSection "[Ftp Script 1]" "-">"%temp%\%~n0.ftp"


Rem Notepad "%temp%\%~n0.ftp"




REM -- Execute Ftp Script, collect File Names


Set "FileList="


For /F "Delims=" %%A In ('"Ftp -v -i -s:"%temp%\%~n0.ftp"|Findstr %FindStrArgs%"') Do (


Call Set "FileList=%%FileList%% "%%A""


)




REM -- Extract Ftp Script to upload files that don't exist in remote folder


Set "FtpCommand=mput"


For %%A In (%FileList%) Do set "Exist["%%~A"]=Y"


For /F "Delims=" %%A In ('"dir /b "%localdir%"|Findstr %FindStrArgs%"') Do (


If Not defined Exist["%%~A"] Call Set "FtpCommand=%%FtpCommand%% "%%~A""


)


Call:extractFileSection "[Ftp Script 1]" "-">"%temp%\%~n0.ftp"


rem Notepad "%temp%\%~n0.ftp"




For %%A In (%FtpCommand%) Do Echo.%%A




REM -- Execute Ftp Script, download files


ftp -i -s:"%temp%\%~n0.ftp"


Del "%temp%\%~n0.ftp"


GOTO:EOF






:extractFileSection StartMark EndMark FileName -- extract a section of file that is defined by a start and end mark


:: -- [IN] StartMark - start mark, use '...:S' mark to allow variable substitution


:: -- [IN,OPT] EndMark - optional end mark, default is first empty line


:: -- [IN,OPT] FileName - optional source file, default is THIS file


:$created 20080219 :$changed 20100205 :$categories ReadFile


:$source http://www.dostips.com


SETLOCAL Disabledelayedexpansion


set "bmk=%~1"


set "emk=%~2"


set "src=%~3"


set "bExtr="


set "bSubs="


if "%src%"=="" set src=%~f0& rem if no source file then assume THIS file


for /f "tokens=1,* delims=]" %%A in ('find /n /v "" "%src%"') do (


if /i "%%B"=="%emk%" set "bExtr="&set "bSubs="


if defined bExtr if defined bSubs (call echo.%%B) ELSE (echo.%%B)


if /i "%%B"=="%bmk%" set "bExtr=Y"


if /i "%%B"=="%bmk%:S" set "bExtr=Y"&set "bSubs=Y"


)


EXIT /b






[Ftp Script 1]:S


!Title Connecting...


open example.com


username


password




!Title Preparing...


cd public_html/MyRemoteDirectory


lcd c:\MyLocalDirectory


binary


hash




!Title Processing... %FtpCommand%


%FtpCommand%




!Title Disconnecting...


disconnect


bye



Source : http://www.dostips.com/DtTipsFtpBatchScript.php

No comments: