バッチ処理的ファイルのコピー

コマンドプロンプト( ローカルファイル )
カレントの全てのファイルを、c:\tmp\backup に全てコピーします
但し常に上書きなので、大量のバックアップには向いていません
copy *.* c:\tmp\backup



コマンドプロンプト( ローカルファイルのカレントの全ての下層ファイルを新しいものだけ )
カレントの全ての下層ファイルの新しいものだけを、c:\tmp\backup に全てコピーします
大量のバックアップには向いています
xcopy.exe . c:\tmp\backup\ /D /E /C /S /Y



ファイルのダウンロード( http な小さなファイル )
VBScript から実行できますが、この方法はメモリへの圧迫が大きいので、
大きなファイルは無理です。大きなファイルは次のセクションの方法を使います
cscript.exe download.vbs
download.vbs
Set objSrvHTTP = Wscript.CreateObject("Msxml2.ServerXMLHTTP")

strUrl = "http://lightbox.on.coocan.jp/download/WinOfSql102.lzh"

on error resume next
Call objSrvHTTP.Open("GET", strUrl, False )
if Err.Number <> 0 then
	Wscript.Echo Err.Description
	Wscript.Quit
end if
on error goto 0

objSrvHTTP.Send

Set Stream = Wscript.CreateObject("ADODB.Stream")
Stream.Open
Stream.Type = 1	' バイナリ
Stream.Write objSrvHTTP.responseBody
Stream.SaveToFile "WinOfSql102.lzh", 2
Stream.Close



ファイルのダウンロード( http な大きなファイル )
php5 のパスが通っており、allow_url_fopen が true であれば
以下のようにコマンドラインがらファイルをダウンロードできます
php.exe -r copy('http://lightbox.on.coocan.jp/download/WinOfSql102.lzh','WinOfSql102.lzh');



ファイルのダウンロード( http な大きなファイルで進捗状況が欲しい )
Content-Length: が正しく戻されればうまく動きます
( エラーを想定してコードイングしてません )
<?

$target = "http://lightbox.on.coocan.jp/download/WinOfSql102.lzh";
$local = "WinOfSql102.lzh";

$fp = fopen( $target, 'rb' );

if ( $fp ) {
	$meta_data = stream_get_meta_data($fp);
	foreach($meta_data['wrapper_data'] as $response) {

		if (substr(strtolower($response), 0, 16) == 'content-length: ') {
			$size = str_replace("content-length: ", "", strtolower($response)) + 0;
		}
	}
	$fp2 = fopen( $local, 'wb' );

	$fs = 0;
	while( TRUE ) {
		if ( feof( $fp ) ) {
			break;
		}
		$ret = fread( $fp, 1024 );
		fwrite( $fp2, $ret );
		$fs += strlen($ret);
		printf( "%d %%",  ($fs*100)/$size );
		print chr(13);

	}

	fclose( $fp );
	fclose( $fp2 );
}
?>



ファイルのダウンロード( ftp なファイル )
まず、以下のような PHP のコードを用意します
ftp_download.php
<?

if ( $argc == 2 ) {
	$pass = $argv[1];
}
else {
	$pass = rtrim(fread( STDIN, 128 ));
}

$base_dir = "/lightbox.on.coocan.jp/homepage/download";
$file_name = "WinOfSql102.lzh";

$conn = ftp_connect("ftp.on.coocan.jp");
if (!$conn) {
	die('接続できません' . "\n");
}

$result = @ftp_login($conn, "lightbox.on.coocan.jp", $pass); 
if (!$result) {
	die('ログインできません' . "\n");
}

ftp_pasv($conn, true);

ftp_get($conn, $file_name, "$base_dir/$file_name", FTP_BINARY );

ftp_close($conn);

print "処理が終了しました\n";

?>
そして、以下のようなバッチファイルを作成して呼び出し、
パスワードを入力してダウンロードします。

パスワードはコンソール上に見えてしまいますが、引数が存在すればそちらを使用するので
VB.NET 等のアプリケーションでラップしてパスワードを渡す事が可能です。
echo off
php.exe ftp_download.php



ファイルのアップロード( ftp なファイル )
基本的にダウンロードと同じですが、ftp_get と ftp_put では、
ローカル・リモートファイルの引数での指定位置が互いに逆です。
<?

if ( $argc == 2 ) {
	$pass = $argv[1];
}
else {
	$pass = rtrim(fread( STDIN, 128 ));
}

$base_dir = "/lightbox.on.coocan.jp/homepage/download";
$file_name = "WinOfSql102.lzh";

$conn = ftp_connect("ftp.on.coocan.jp");
if (!$conn) {
	die('接続できません' . "\n");
}

$result = @ftp_login($conn, "lightbox.on.coocan.jp", $pass); 
if (!$result) {
	die('ログインできません' . "\n");
}

ftp_pasv($conn, true);

ftp_put($conn, "$base_dir/test.lzh", $file_name,  FTP_BINARY );

ftp_close($conn);

print "処理が終了しました\n";

?>