我想在 SAS 中在 Windows 中创建一个目录结构。最好使用允许我指定 UNC 命名约定的方法,例如:
\\computername\downloads\x\y\z
我在网上看到了很多使用 DOSmkdir
命令的 SAS 示例 via%sysexec()
或x
command。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:ON
to来实现cmd.exe
。我尝试更改我的代码以使用:
cmd.exe /c /E:ON mkdir "\\computername\downloads\x\y\z"
仍然没有运气!
谁能告诉我为什么除了我之外,互联网上的其他人似乎都能够从 SAS 内部完成这项工作?同样,它在 DOS 提示符下工作正常——只是在 SAS 中不行。
我更喜欢一个专门解决这个问题的答案(我知道还有其他使用多个步骤或的解决方案dcreate()
)。
我正在运行 WinXP 32Bit、SAS 9.3 TS1M2。谢谢。