SAS 内から Windows にディレクトリ構造を作成したいと考えています。できれば、次のような UNC 命名規則を指定できる方法を使用します。
\\computername\downloads\x\y\z
mkdir
via%sysexec()
またはコマンドと呼ばれるDOS コマンドを使用して、SAS の Web 上の多くの例を見てきましたx
。mkdir コマンドの優れた点は、中間フォルダーが存在しない場合に中間フォルダーを作成することです。プロンプトから以下のコマンドを正常にテストしたところ、期待どおりに動作しました (パス名にスペースがないため、引用符は問題ではないようです)。
mkdir \\computername\downloads\x\y\z
mkdir d:\y
mkdir d:\y\y
mkdir "d:\z"
mkdir "d:\z\z"
mkdir \\computername\downloads\z\z\z
mkdir "\\computername\downloads\z\z\z"
以下は SAS から正常に実行されます。
x mkdir d:\x;
x 'mkdir d:\y';
x 'mkdir "d:\z"';
x mkdir \\computername\downloads\x;
x 'mkdir \\computername\downloads\y';
ただし、これらは SAS から実行すると機能しません。たとえば、次のようになります。
x mkdir d:\x\x;
x 'mkdir d:\y\y';
x 'mkdir "d:\z\z"';
x mkdir \\computername\downloads\x\y\z ;
x 'mkdir "\\computername\downloads\z"';
** OR **;
%sysexec mkdir "\\computername\downloads\x\y\z ";
** OR **;
filename mkdir pipe "mkdir \\computername\downloads\x\y\z";
data _null_;
input mkdir;
put infile;
run;
それは動作しません。これだけでなく、options xwait
指定したにもかかわらずウィンドウがすぐに閉じてしまうため、エラー メッセージが表示される機会がありません。UNCパスとドライブ文字パスの両方を使用してすべての方法を試しました。D:\downloads\x\y\z
.
OS から返されるエラー メッセージを見ると、次のようになります。
%put %sysfunc(sysrc()) %sysfunc(sysmsg());
私は以下を取得します:
-20006 WARNING: Physical file does not exist, d:\downloads\x\x\x.
コマンドのドキュメントを見ると、mkdir
「コマンド拡張機能」が有効になっている場合にのみ中間フォルダーの作成がサポートされているようです。これは、 に を追加することで実現でき/E:ON
ますcmd.exe
。私は自分のコードを使用するように変更しようとしました:
cmd.exe /c /E:ON mkdir "\\computername\downloads\x\y\z"
それでも運が悪い!
私を除いて、インターネット上の他の誰もがSAS内からこれを機能させることができるように見える理由を誰か教えてもらえますか? 繰り返しますが、DOS プロンプトからは正常に動作しますが、SAS 内からではありません。
この問題に具体的に対処する回答を希望します(複数の手順またはを使用する他のソリューションがあることは知っていますdcreate()
)。
WinXP 32Bit、SAS 9.3 TS1M2 を実行しています。ありがとう。