• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:WSHの文字置換ツールについて(エラー処理))

WSH文字置換ツールのエラー処理について

このQ&Aのポイント
  • Windows2003server上で動作する文字列置換ツールのエラー処理について困っています。
  • Readエラー時にスクリプトエラーが発生し落ちてしまうため、解決策を探しています。
  • 無効なフォルダ名や空白、存在しないファイル名を処理しない方法や、バッチの作り方についてのアドバイスをお待ちしています。

質問者が選んだベストアンサー

  • ベストアンサー
  • SHIMAPEE
  • ベストアンサー率75% (154/203)
回答No.2

@ITのサンプルプログラムは置換する複数ファイルをドラッグ&ドロップで受け入れるため、存在しないファイル名などのエラー処理は省かれています。 一つアドバイスを申し上げますと、スクリプトは手軽にエディタで内容を書き換えて実行できることが利点ですから、とにかく当面の目的を果たしたいのでしたら、サンプルプログラムのまま、ドラッグ&ドロップを複数回繰り返すのも手だと思います。別質問の置換文字列の外出しもせずに、ハードコーディングした複数のスクリプトを作って使えばよいのでは。 時間をかけて勉強して汎用的なスクリプトを作りたいのでしたら、WSHの本を買って読むことをお奨めします。 あるいはWSHで検索すればたくさんヒットしますので、それを見て勉強してはどうでしょうか。例えば、 http://www.atmarkit.co.jp/fwin2k/tutor/cformwsh01/cformwsh01_01.html http://www.roy.hi-ho.ne.jp/mutaguchi/wsh/wshtop.htm 特におすすめします。この方が書かれた本はわかりやすいと思います。 http://www.happy2-island.com/vbs/ ドキュメントは一通り読み、すぐ参照できるようにしておくべきです。 http://www.microsoft.com/japan/msdn/scripting/ マイクロソフトのスクリプトセンターはサンプルが豊富です。ただしサンプルはVBScriptが多いです。 http://technet.microsoft.com/ja-jp/scriptcenter/default.aspx ----- どういうスクリプトにしたいかはgya-1274さんの考え方次第なので、このようなQ&Aサイトで完成までやり取りするのは難しいです。 あえて「フォルダや空白、存在しないファイル名が代入された場合は無視する」ことについて回答しますと、WSHではFileSystemObjectのFileExistsメソッドでファイルの存在をチェックできますのでそれを使います。 if (objFs.FileExists(objArg(i))) // ファイルがあるときの処理 else // ファイルがないときの処理 なお、On Error Resume NextはVBScriptの構文です。WSHではJScriptとVBScriptが標準で用意されており、@ITのサンプルプログラムはJScriptで書かれていますのでOn Error Resume Nextは使えません(VBScriptで書いたとしても、ファイルの存在チェックはFileExistsメソッドで確認すべきです)。 JScriptとVBScriptがある、というはWSHの基本の基本ですので、ここから勉強するとなるとゴールは相当遠いものになると思われます。というわけで最初のアドバイスを申し上げた次第です。悪しからず。

gya-1274
質問者

お礼

とりあえずは、if (objFs.FileExists(objArg(i)))を使って Readエラーを回避することには成功し、スクリプトを使うことができました。 サンプルプログラムは明らかにVBScriptとは違っているのは気づいていたので WSHはJScriptとVBScriptが使えることで、少し納得しました。 これ以上のカスタマイズは、上記URLで勉強しながら進めて行こうと思います。 ありがとうございました。

その他の回答 (1)

noname#259269
noname#259269
回答No.1

On Error Resume Next を使う、でよいと思います。 On Error Resume Next ...(エラーが発生し得るコーディング。ファイルオープンなど) If Err.Number = 0 Then 'エラーが無い時 ...(続きの処理) End If どこまでできてどこで躓いているのか、 ソースコードも提示すれば回答が付きやすくなると思います。

gya-1274
質問者

補足

回答ありがとうございます。やはりOn Error Resume Nextなんですね。 下記のようにしてますが、「';'がありません。」 という構文エラーになります。 色々試しましたが、どこがおかしいのか分かりませんでした。 <?xml version="1.0" encoding="Shift_JIS" standalone="yes" ?> <package> <job id="WordReplace"> <?job error="True" debug="True" ?> <object id="objFs" progid="Scripting.FileSystemObject" /> <script language="JavaScript"> <![CDATA[ strRepl="Shift_JIS"; /* 置換対象文字列 */ strWith="EUC-JP"; /* 置換文字列 */ var objArg=WScript.Arguments; for(i=0;i<objArg.length;i++){ strTmp= objFs.BuildPath (objFs.GetParentFolderName (WScript.ScriptFullName), objFs.GetTempName ()); On Error Resume Next; ←追記 var objTs =objFs.OpenTextFile(objArg(i),1,false); var objTs2=objFs.OpenTextFile(strTmp,2,true); If Err.Number = 0 Then  ←追記 do{ strLne=objTs.ReadLine(); strLne=strLne.replace(strRepl,strWith); objTs2.WriteLine(strLne); }while(!objTs.AtEndOfStream); objTs.Close(); objTs2.Close(); objFs.DeleteFile(objArg(i)); objFs.MoveFile(strTmp,objArg(i)); End If  ←追記 } ]]> </script> </job> </package>

関連するQ&A

専門家に質問してみよう