2017-03-08 36 views
0

在windows sas 9.4中,我尝试使用Using X命令使用mkdir创建文件夹。如果路径包含空格,可以这样做吗?SAS X命令 - 尝试在路径中使用空格执行mkdir

试图在日志和列表的proc printto之前进行设置。下面的测试代码似乎因为空格而失败。

 
    options mprint compress=yes reuse=yes; 

    %let qtr=%str(2); 
    %let yr=%str(2012); 
    %let logout=%str(program_name_&yr.&qtr._&sysdate.); 

    %let logname=%str(C:\Users\doe_j\folder\sub-folder1\sub folder2\subfolder3 &yr.\q&qtr.\logs\&logout..log); 

    %let logfolder=%str(C:\Users\doe_j\foler\sub-folder1\sub folder2\subfolder3 &yr.\q&qtr.\logs); 

    x "if not exist ""&logfolder.\"" mkdir -p &logfolder."; 
+0

您是否试过'mkdir“”&logfolder。“”'?什么是“-p”? – aschipfl

回答

1

我认为增加引号的logfolder变量本身应该使其工作。里面的%str()你必须有一个%签不成对引号的前面,所以它应该是这样的

%let logfolder = %str(%"C:\Users\doe_j\folder\sub-folder1\sub folder2\subfolder3 &yr.\q&qtr.\logs%");

然后你只需要一组报价在X声明

x "if not exist &logfolder.\ mkdir -p &logfolder.";

+0

谢谢@M_CE_A!这工作就像一个魅力! – patrickjlong1

1

我觉得你很亲密。看起来像第二次出现的&logfolderX语句中需要被第一次出现的转义双引号括起来。下面的稍微改动过的代码工作对我来说:

options noxwait mprint symbolgen compress=yes reuse=yes; 

%let qtr=%str(2); 
%let yr=%str(2012); 
%let logout=%str(program_name_&yr.&qtr._&sysdate.); 
%let logfolder=%str(C:\Users\jdoe\Desktop\sub-folder1\sub folder2 space\year &yr.\q&qtr.\logs); 
%let logname=%str(&logfolder.\&logout..log); 

x "if not exist ""&logfolder."" mkdir ""&logfolder."""; 
+0

Thanks @Hugs。你的代码也适用于我。我个人更喜欢另一种解决方案,但是可以工作。 – patrickjlong1

1

宏引用可能会导致问题,以及阻止他们。您应该只在您知道需要的地方应用宏引用。除非你的目录名称有不平衡的引号,否则程序中不需要宏引用。

%let qtr= 2 ; 
%let yr= 2012 ; 
%let logout=program_name_&yr.&qtr._&sysdate ; 
%let logfolder=C:\Users\jdoe\Desktop\sub-folder1\sub folder2 space\year &yr\q&qtr\logs; 
%let logname=&logfolder\&logout..log; 

x %sysfunc(quote(if not exist "&logfolder" mkdir "&logfolder")); 
相关问题