SAS X命令 - 尝试在路径中使用空格执行mkdir

时间:2017-03-08 04:06:47

标签: cmd sas

在windows sas 9.4中,我正在尝试使用Using 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.";

3 个答案:

答案 0 :(得分: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.";

答案 1 :(得分:1)

我觉得你很亲密。看起来&logfolder语句中第二次出现的X需要被转义的双引号包围,就像第一次出现一样。下面稍微编辑过的代码对我有用:

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.""";

答案 2 :(得分: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"));