5

我想在 SAS 中在 Windows 中创建一个目录结构。最好使用允许我指定 UNC 命名约定的方法,例如:

\\computername\downloads\x\y\z

我在网上看到了很多使用 DOSmkdir命令的 SAS 示例 via%sysexec()xcommand。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.

如果我查看操作系统返回的错误消息:

%put %sysfunc(sysrc()) %sysfunc(sysmsg());

我得到以下信息:

-20006 WARNING: Physical file does not exist, d:\downloads\x\x\x.

查看mkdir命令的文档,它似乎只支持在启用“命令扩展”时创建中间文件夹。这可以通过添加/E:ONto来实现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

3

这是使用 LIBNAME 语句创建目录的技巧

options dlcreatedir; libname newdir "/u/sascrh/brand_new_folder";

我相信这比 X 语句更可靠。

资料来源:SAS 技巧:获取 LIBNAME 语句为您创建文件夹

于 2018-09-14T20:28:56.873 回答
2

我也在 WinXP 上,使用 SAS 9.3 TS1M1。以下为我宣传的工作:

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 回答
2

您需要使用将创建所有子文件夹的mkdir选项-p

IE

x mkdir -p "c:\newdirectory\level 1\level 2";
于 2013-07-30T16:46:15.650 回答
1

这似乎在dos窗口保持打开状态下工作得很好。您可能需要 XSYNC 选项。我在 MAC 上的 VMWARE 下使用 9.3 TS1M1 64 位:

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