【发布时间】:2012-09-13 09:20:31
【问题描述】:
我想在 SAS 中在 Windows 中创建一个目录结构。最好使用允许我指定 UNC 命名约定的方法,例如:
\\computername\downloads\x\y\z
我在网络上看到了许多使用 DOS mkdir 命令通过 %sysexec() 或 xcommand 调用的 SAS 示例。 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 添加到cmd.exe 来实现。我尝试更改要使用的代码:
cmd.exe /c /E:ON mkdir "\\computername\downloads\x\y\z"
还是没有运气!
谁能告诉我,为什么除了我之外,互联网上的其他人似乎都能够在 SAS 内部完成这项工作?同样,它在 DOS 提示符下工作正常 - 只是在 SAS 中不行。
我更喜欢专门解决此问题的答案(我知道还有其他使用多个步骤的解决方案或dcreate())。
我正在运行 WinXP 32Bit、SAS 9.3 TS1M2。谢谢。
【问题讨论】:
-
不只是你,我对 X 和 UNC 路径没有任何运气。我想知道它是否与网络设置有关,某些网络会阻止它正常工作。
-
我也会将此问题提交给 SAS 技术支持。也许他们以前见过。
-
我刚刚尝试在我同事的计算机上运行一些测试,并且对他们来说一切正常。看起来我的机器特别奇怪。谢谢大家的帮助。如果我弄清楚它是什么,我会做出回应。
标签: windows-xp cmd sas mkdir