私には非常に具体的な要件があります。秘密鍵を使用するsftp経由でファイルをアップロードしようとしています。ホストに接続してファイルをアップロードするbatファイルがすでにありますが、完了したらアップロードしたファイルを別のパスに移動する必要があります。
最初のbatファイルはstart.bat
と呼ばれます。これはsftpサーバーに接続し、ファイルをアップロードします。 winscpを使用してホストに接続しています。
2番目のbatファイルはdone.bat
と呼ばれます。これにより、ファイルが1つのディレクトリから別のディレクトリに移動します。
call done.bat
を使用して、最初から2番目のbatファイルを呼び出しています。私が抱えている問題は、最初のバッチファイルが認証、ログイン、アップロードの機会を得る前に、done.bat
が完了していることです。
アップロードが完了してからファイルを移動したいだけです。何らかの理由でアップロードが失敗した場合、2番目のファイルは実行されません。
BatファイルはWindows XPマシン上にあります。
使用する start /wait winscp ...
ファイル転送を開始するには、winscpが終了するまでバッチスクリプトを一時停止します。その行の後にmoveコマンドを追加するか、call done.bat
start /wait winscp ...
call done.bat
これを Mark Allen によって提案されたエラーチェックと組み合わせる必要があります
個人的には、この種の問題を回避できると思うコマンドラインSFTPクライアント(PuTTYまたはOpenSSHで提供されるものなど)を使用します。
Start.batを変更して、winscp.exe側の障害を検出します。 winscp.exeが終了コード0で終了する場合にのみ、done.batを呼び出します。
次のようなものを試してください。
winscp.exe blah blah blah
if not errorlevel 0 goto end
call done.bat
:end
Winscp.exeがエラー時に1以上で終了すると想定しているだけであることに注意してください。 winscp.exeのドキュメントを確認してください。
以下を含むように編集します。
Winscp.exeが成功または失敗を示すために終了コードを使用しないとしましょう。あなたは何か違うことをする必要があるかもしれません。
winscp.exe /log=%temp%\wscpresults.log *other parameters here*
ping -n 300 -w 1000 127.0.0.1 > nul
find /i "success" %temp%\wscpresults.log
if errorlevel 0 goto end
call done.bat
:end
どこ: