2017-03-08 189 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")); 
相關問題