2017-03-08 7 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.";

に引用符の1セットを必要とする不対引用符の前に %看板を持っている必要があります
+0

ありがとう@M_CE_A!これは魅力的に機能しました! – patrickjlong1

1

私はあなたが近くだったと思います。 Xステートメントの&logfolderの2番目のオカレンスは、エスケープされた二重引用符で囲む必要があります。下記少し編集されたコードは、私の作品:引用

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

ありがとう@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")); 
関連する問題