Rob*_*dge 5 windows-xp cmd sas mkdir
我想在Windows中从SAS中创建目录结构。最好使用一种允许我指定UNC命名约定的方法,例如:
\\computername\downloads\x\y\z
Run Code Online (Sandbox Code Playgroud)
我在网上看到了许多使用SAS mkdir命令通过%sysexec()或命令调用SAS的示例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"
Run Code Online (Sandbox Code Playgroud)
从SAS可以正常运行以下命令:
x mkdir d:\x;
x 'mkdir d:\y';
x 'mkdir "d:\z"';
x mkdir \\computername\downloads\x;
x 'mkdir \\computername\downloads\y';
Run Code Online (Sandbox Code Playgroud)
但是当从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;
Run Code Online (Sandbox Code Playgroud)
这是行不通的。不仅如此,即使我已options xwait指定,该窗口也会立即关闭,因此没有机会看到任何错误消息。我已经尝试了同时使用UNC路径和驱动器盘符路径的所有方法。D:\downloads\x\y\z。
如果我查看操作系统返回的错误消息:
%put %sysfunc(sysrc()) %sysfunc(sysmsg());
Run Code Online (Sandbox Code Playgroud)
我得到以下内容:
-20006 WARNING: Physical file does not exist, d:\downloads\x\x\x.
Run Code Online (Sandbox Code Playgroud)
查看该mkdir命令的文档,似乎仅在启用“命令扩展名”时才支持创建中间文件夹。这可以通过添加实现/E:ON到cmd.exe。我尝试更改代码以使用:
cmd.exe /c /E:ON mkdir "\\computername\downloads\x\y\z"
Run Code Online (Sandbox Code Playgroud)
仍然没有运气!
谁能告诉我,为什么除了我以外,互联网上的其他所有人似乎都能从SAS内部获得此功能?同样,它可以在DOS提示符下正常工作-而不是在SAS内部。
我希望有一个专门解决此问题的答案(我知道还有其他解决方案使用多个步骤或dcreate())。
我正在运行WinXP 32Bit,SAS 9.3 TS1M2。谢谢。
小智 2
您需要使用将创建所有子文件夹的mkdir选项-p
IE
x mkdir -p "c:\newdirectory\level 1\level 2";
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16128 次 |
| 最近记录: |