朝顔日記

WinSCP は便利

2005-01-04

どうやったらローカルで日記を書いてサーバにアップしたりダウンしたりが便利になるかというのが、今回の指令です(何)。と、気張っていたんですが、実は WinSCP だけで用は足りました。WinSCP とはなんぞやというのは書くのが面倒なので、WinSCP Japanese site : about をご覧ください。で、WinSCP はしばらく前から使っていたんですが、今日始めてコマンドラインでも使えるということに気が付きました。

コマンドプロンプトを開いて、winscp3 /help などと打ち込めば使い方が表示されます。

winscp3.exe <session> /script=hoge

というのが書式です。<session> というのは、WinSCP でログインするときのアレ(どれ)ですね。で、WinSCP で接続した後に行う手順を script で指定したファイルに記述しておきます。WinSCP で使えるコマンドは、起動した後にコンソールで help などとすると一覧で表示されます。

WinSCP のヘルプ画面のスクリーンキャプチャ

さらに詳しいヘルプが必要な場合は、help sychronize のように知りたいコマンドを help コマンドの引数にしてやれば表示されます。

synchronize のヘルプ画面のスクリーンショット

これを使って、日記を更新する場所から、ローカルとリモートのファイルを同期させてから、rNote の記事作成用の何か で書いたスクリプトを走らせると、自動的にその日の書くべきファイル名で、指定したエディタ = xyzzy が立ち上がり該当ファイルを作ってくれます。ただ、ファイルを開くだけでは不便なので、template-insert.l を使って、rNote の xml 用のテンプレートを挿入します。これを使うと xyzzy で開くモードや文字コードも指定できるので便利です。

一応、日記書きの際に起動する diary.bat を書いておきましょう。


@echo off
d:
cd d:\web\noasobi\diary\entries\2005\
winscp3 セッション名 /script=d:\web\noasobi\diary\scp\scpdown.scr
php -q d:\web\noasobi\diary\scp\diary.php
call d:\web\noasobi\diary\scp\open.bat

ローカルで、鯖に上がっている日記を落としてくるディレクトリに移動しておいて、WinSCP で鯖からダウンして、diary.php で日記のファイル名やディレクトリを生成して、そのファイルを開く、バッチファイル(この場合、open.bat)を生成、最後にバッチファイルを実行という手順です。その後さらに、template-insert.l が起動してテンプレートが挿入されるわけですけども。

WinSCP に実行させる、ダウンロード用のスクリプトファイル(この場合、scpdown.scp)は以下のような感じ。


cd public_html/diary.noasobi.net/entries/2005
synchronize local
exit

で、日記を書き終わったらまた同じように、WinSCP を使ってリモートのファイルをローカルのファイルに同期させます。ちなみにそれを行うための、rnote.bat の内容は以下のような感じ。最後に start コマンドを使って、rnoteadmin ツールにアクセスしています。


@echo off
d:
cd d:\web\noasobi\diary\entries\2005\
winscp3 セッション名 /script=d:\web\noasobi\diary\scp\scpup.scr
start http://diary.noasobi.net/rnoteadmin.php

で、そのときに使う scpup.scr の内容が以下のような感じ。


cd public_html/diary.noasobi.net/entries/2005
synchronize remote
cd ../../img
lcd d:\web\noasobi\diary\img
synchronize remote
exit

こっちは画像ファイルの更新も行っています。

長々と書いて、かなり意味不明ぽいですが、WinSCP を使えば、バッチファイルふたつくらい書くだけで、ローカルとリモートのファイルの同期が取れて便利だなぁ、というようなことでした。

追記
私は、PuTTY Download Page にある、pageant.exe などを使うことで、パスフレーズの入力を省略しています。

「WinSCP は便利」へコメントをつける

書き込み時の挙動について
URI らしき文字列には自動的にリンクが張られます。また "<" や、">" は実体参照化されます。
スパム対策のため、リファラを切っていると投稿できません。

この記事へのツッコミ

1: あや (2005-02-20T11:36:36+09:00)
はじめまして!
こちらのページを見てにWindows間のファイル同期のバッチファイルを書きました。
とても参考になりました。
私の場合、パッチファイルに引数を渡して実行しようとしています。
そこで、ご存知でしたらご教示願いたいのですが、
バッチファイル中のスクリプト(この場合でしたらscpup.scr)にも引数を引きつがせることは可能なのでしょうか?
winscp3でスクリプトへ引数を受け渡すオプション(?)などはあるのでしょうか?
ご存知でしたらお助けください・・。
2: のり (2005-02-21T23:25:41+09:00) nori@noasobi.net
こんにちは。
えーと、よくわかっていないのですが、バッチファイルに引数を渡すと言うのは、
winscp3 <session> %1
みたいなことでしょうか? そう意味だとすると上記内容を、例えば test.bat とした場合、
test.bat /script=d:\hoge\hoge
などとして実行するとうまくいきませんね。
試しに、
test.bat "/script=d:\hoge\hoge"
のように、ダブルクォートで括ってみたところうまくいくようです。
もし話しが違っていたらごめんなさい。
3: あや (2005-02-24T23:54:29+09:00)
のりさん、ありがとうございます!
説明不足ですみません。
具体的な例を申し上げますと

-------------syncweb.bat
@echo off
cd C:\web\%1
winscp3 scp://webserver /script=c:\hoge\hoge\scpup.scr
-----------------------
------------------scp.scr
cd c:\inetpub\%1
synchronize remote
exit
----------------------

c:\web\aaa と webserverのc:\inetpub\aaa
で同期をとりたい場合
syncweb aaa
を実行して、
scp.scrの中で
cd c:\inetpub\aaa
とできるのかな。。と思いまして。

とりあえず、リダイレクトで

echo cd c:\inetpub\%1 >scpup.scr
echo synchronize remote >> scpup.scr
としました。
scp.scrが3行程度なのでこのようにしましたが、
引数を渡せる技をご存知でしょうか。。
4: のり (2005-03-01T00:02:13+09:00) nori@noasobi.net
ちょっと考えてみましたが、私には思いつかないですねぇ。すみません。

同期を取りたいディレクトリの数がそんなに多くないのであれば、バッチファイルとスクリプトを複数書くという手が思いつきますが。一度書いてしまえばあとは楽なので。
もしくは、何らかのスクリプトを使って、バッチファイルや winscp 用のスクリプト自体を動的に生成するとかも考えられますが。
5: あや (2005-03-02T23:14:18+09:00)
今回は同期を取りたいディレクトリはあまり多くないので、複数のバッチファイルで対応したいと思います。
ありがとうございました!

トラックバック

1: だわもん/WinSCPでスクリプトを使う場合 (2007-06-04T20:56:04+09:00)
WinSCPで スクリプトを使うのには, どうしたらよいの?
この記事の永続的 URI ならびに トラックバック ping URI
http://diary.noasobi.net/2005/01/diary_050104a.html