2017-03-08 3 views
0

In Windows sas 9.4 versuche ich, den Befehl X zu verwenden, um einen Ordner mit mkdir zu erstellen. Ist dies möglich, wenn der Pfad Leerzeichen enthält?SAS X-Befehl - Versuch, mkdir mit Leerzeichen im Pfad auszuführen

Versuchen, dies vor einem proc printto für Protokolle und Auflistungen einzurichten. Der unten angegebene Testcode scheint aufgrund der Leerzeichen nicht zu funktionieren.

 
    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

Haben Sie 'mkdir" "& logfolder ausprobiert." "'? Wofür ist "-p"? – aschipfl

Antwort

1

Ich denke, dass LogFolder Variable auf die Anführungszeichen Hinzufügen selbst sollte es funktioniert. Innerhalb von %str() müssen Sie vor ungepaarten Anführungszeichen ein % Vorzeichen haben, so dass es wie dieses

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

Dann brauchen Sie nur einen Satz von Anführungszeichen in der X-Anweisung

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

aussehen sollte
+0

Danke @M_CE_A! Das hat wie ein Zauber funktioniert! – patrickjlong1

1

Ich glaube, du warst nah dran. Es sieht so aus, als ob das zweite Vorkommen von &logfolder in der X-Anweisung genauso wie das erste Vorkommen von doppelten Doppelzitaten umgeben sein muss. Der leicht bearbeitete Code unten funktioniert für mich:

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

Danke @Hugs. Dein Code hat auch für mich funktioniert. Ich persönlich bevorzugte die andere Lösung, aber beide funktionieren. – patrickjlong1

1

Macro Quoting kann Probleme verursachen und sie auch verhindern. Sie sollten das Makro-Zitat wahrscheinlich nur anwenden, wo Sie wissen, dass Sie es brauchen. Sofern Ihre Verzeichnisnamen keine unausgeglichenen Anführungszeichen haben, müssen Sie in Ihrem Programm keine Makro-Quotierung durchführen.

%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")); 
Verwandte Themen