5

SAS 内から Windows にディレクトリ構造を作成したいと考えています。できれば、次のような UNC 命名規則を指定できる方法を使用します。

\\computername\downloads\x\y\z

mkdirvia%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 を実行しています。ありがとう。

4

5 に答える 5

2

SAS 9.3 TS1M1を使用して、WinXPも使用しています。宣伝されているように、次のように機能します。

122  options noxwait;
123  data _null_;
124    rc = system('mkdir \\W98052442n3m1\public\x\y\z');
125    put rc=;
126  run;

rc=0
NOTE: DATA statement used (Total process time):
      real time           1.68 seconds
      cpu time            0.03 seconds

これが私の実際のログ ファイルです。「public」は、そのネットワーク PC 上の Windows 共有フォルダーであり、パス全体が作成されました。おそらく、SYSTEM関数を使用するとうまくいきました。私は X コマンドを自分で使用したことはありません。

于 2012-09-21T00:25:09.060 に答える
2

x コマンドを引用符で囲む必要があります。

x 'mkdir "c:\this\that\something else"' ;

また、UNCパスの使用に問題があったことは一度もありません。

x "\\server.domain\share\runthis.exe" ;
于 2012-09-21T08:29:54.807 に答える
1

これは、DOS ウィンドウを開いたままにしておくと問題なく動作するようです。XSYNC オプションが必要な場合があります。MAC 上の VMWARE で 9.3 TS1M1 64 ビットを使用しています。

options xwait xsync;
x mkdir c:\newdirectory;
于 2012-09-21T00:34:34.603 に答える