À l'aide de SAS et mkdir pour créer une structure de répertoire dans windows

Je veux créer une structure de répertoire dans Windows à partir de SAS. De préférence à l'aide d'une méthode qui me permettra de spécifier un chemin d'accès UNC convention d'affectation de noms tels que:

\\computername\downloads\x\y\z

J'ai vu de nombreux exemples de SAS sur le web à l'aide du DOS mkdir commande appelée via %sysexec() ou la xde commande. La bonne chose à propos de la commande mkdir, c'est qu'il permettra de créer des répertoires intermédiaires s'ils n'existent pas. J'ai testé avec succès les commandes ci-dessous à partir de l'invite et il s'est comporté comme prévu (citant ne semble pas à la matière que je n'ai pas d'espaces dans mes noms de chemin d'accès):

mkdir \\computername\downloads\x\y\z
mkdir d:\y
mkdir d:\y\y
mkdir "d:\z"
mkdir "d:\z\z"
mkdir \\computername\downloads\z\z\z
mkdir "\\computername\downloads\z\z\z"

D'exécution suivantes amende de SAS:

x mkdir d:\x;
x 'mkdir d:\y';
x 'mkdir "d:\z"';
x mkdir \\computername\downloads\x;
x 'mkdir \\computername\downloads\y';

Mais elles ne fonctionnent pas lorsque vous exécutez à partir de SAS,par exemple:

x mkdir d:\x\x;
x 'mkdir d:\y\y';
x 'mkdir "d:\z\z"';
x mkdir \\computername\downloads\x\y\z ;
x 'mkdir "\\computername\downloads\z"';

** OR **;

%sysexec mkdir "\\computername\downloads\x\y\z ";

** OR **;

filename mkdir pipe "mkdir \\computername\downloads\x\y\z";
data _null_;
  input mkdir;
  put infile;
run;

Il ne fonctionne pas. Non seulement cela, mais la fenêtre se ferme immédiatement, même si j'ai options xwait spécifié, donc il n'y a pas l'occasion de voir les éventuels messages d'ERREUR. J'ai essayé toutes les méthodes à la fois avec le chemin d'accès UNC et un chemin de lettre de lecteur, c'est à dire. D:\downloads\x\y\z.

Si je regarde les messages d'erreur retourné par le système d'exploitation:

%put %sysfunc(sysrc()) %sysfunc(sysmsg());

Je reçois le texte suivant:

-20006 WARNING: Physical file does not exist, d:\downloads\x\x\x.

Regarder la documentation pour la mkdir commande il semble qu'il ne prend en charge la création de répertoires intermédiaires lors de la commande des extensions sont activées. Ceci peut être réalisé avec l'ajout de la /E:ON à cmd.exe. J'ai essayé de changer mon code à utiliser:

cmd.exe /c /E:ON mkdir "\\computername\downloads\x\y\z"

Et toujours pas de chance!

Quelqu'un peut me dire pourquoi tout le monde sur l'internet semble être en mesure d'obtenir ce travail à partir de l'intérieur du SAS, sauf pour moi? Encore une fois, il fonctionne très bien à partir d'une invite de commandes DOS - tout simplement pas de l'intérieur du SAS.

Je préfère une réponse qui traitent spécifiquement de cette question (je sais qu'il y a d'autres solutions que d'utiliser plusieurs étapes ou dcreate()).

Je suis sous WinXP 32 bits, SAS 9.3 TS1M2. Merci.

Ce n'est pas seulement vous, je n'ai pas eu de chance avec les X et les chemins d'accès UNC. Je me demande si elle a quelque chose à voir avec l'installation du réseau, où certains réseaux de l'empêcher de fonctionner correctement.
Je vais soumettre ce problème à la SAS le support technique. Peut-être qu'ils l'ai vu avant.
J'ai juste essayé de lancer quelques tests sur mon collègue de travail, les ordinateurs et tout fonctionnait bien pour eux. On dirait que c'est quelque chose de particulièrement bizarre avec ma machine. Merci à tous pour l'aide. Je vais vous répondre si j'arrive à comprendre ce que c'est.

OriginalL'auteur Robert Penridge | 2012-09-20