- ベストアンサー
SPOOL出力先のフォルダにSpaceがある時
SQL*PlusでSPOOLコマンドを使用してログファイルを出力する場合に、 フォルダ名を指定したいのですが、フォルダ名にSpaceがある時に エラーになってしまいます。 (エラーがでる例) SQL>SPOOL C:\Documents and Settings\All Users\デスクトップ\TEST.log SP2-0333: 不正なスプール・ファイル名: "C:\Documents and Settings\All Users\デスクトップ"(不正文字: ' ') フォルダ名とファイル名全体を、''で囲んでも同じエラーがでます。 よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
8.3形式を利用したらできないかな? ※8.3形式について http://e-words.jp/w/82E3E5BDA2E5BC8F.html 今気づいたんだけど、XPってフォルダのプロパティを見ても、旧形式のフォルダパスって出ないのですね。。。 http://www.atmarkit.co.jp/fwin2k/win2ktips/606dirx/dirx.html のような方法もあるようですが、、、面倒そうなので、簡単なVBスクリプトを作ってみたので張っておきます。 応用したら、バッチの作成のスクリプトも作成できるかと思います。 もし、VBスクリプトが未経験であれば、、、、、 http://okwave.jp/qa1559190.html の#3の手順4~6を読みながら、以下のコードを貼り付けてください。 Option Explicit Dim objArgs Set objArgs = WScript.Arguments Call GetShortPath(objArgs) Set objArgs = Nothing Private Sub GetShortPath(arg) Dim fsoObj Dim fsoDir Dim objParam if arg.Count() < 1 Then MsgBox "このスクリプトファイルに、任意のフォルダをドラッグしてください。" Exit Sub End If Set fsoObj = CreateObject("Scripting.FileSystemObject") 'パラメータループ For Each ObjParam in arg 'フォルダであるかをチェック If fsoObj.FolderExists(objParam) Then 'フォルダが見つかった場合、出力を行う Set fsoDir = fsoObj.GetFolder(objParam) Call InputBox(fsoDir.Path, "フォルダを8.3形式に変換", fsoDir.ShortPath) '一個だけ、処理をしたら、本メソッドは終了する Exit Sub End If Next 'ここまでステップが行われた場合は、フォルダがひとつもドラッグされなかったことを意味する MsgBox "このスクリプトは、フォルダのみに対応しています。任意のフォルダをドラッグしてください。" End Sub
その他の回答 (3)
- ossan_hiro
- ベストアンサー率66% (88/132)
もう解決かもしれませんが sqlplusを実行する前に cdコマンドでカレントディレクトリを変更してみては? cd "C:\Documents and Settings\All Users\デスクトップ\" sqlplus /nolog connect ユーザ/パスワード@接続文字列 spool TEST.log
お礼
回答ありがとうございます。 今回は、1050YENさんの方式でやってみようと思います。 回答は、今後の参考にさせて頂きます。 ありがとうございました。
- ishi7474
- ベストアンサー率32% (71/216)
ファイル名をシングルクオーテーションで囲うと、動作しませんか。
補足
質問が見にくくて申し訳ありません。 最後から2行目の '' はシングルクォーテションを2つ並べています。 シングルクォーテションで囲ってもやはり同じエラーがでます。 念の為、ダブルクォーテションも試しましたが、同じでした。
- k_o_r_o_c_h_a_n
- ベストアンサー率55% (526/942)
仕様上無理なモノは無理です。 SUBST等で仮想ドライブへマウントするなど代替え策を考えるしかありません。
お礼
SUBSTを試して問題なく出力できることを確認しました。 ただ、エクスプローラなどにも仮想ドライブが表示されてしまうので、 今回は、1050YENさんの方式でやってみようと思います。 回答ありがとうございました。
お礼
回答ありがとうございます。 8.3形式について、回答を参考にさせて頂き、 いろいろと調べてみたところ、この方法で問題なさそうです。 丁度、VBアプリケーションから、SQLファイル作成~ SQL*Plusを直接呼び出して、SQLファイルを実行する処理を 行っていましたので、SQLファイルを作成する直前に8.3形式の フォルダ名を取得できるので、問題も発生しないと思います。 本当に、ありがとうございました。