À 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 x
de 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.
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
Vous devez vous connecter pour publier un commentaire.
Vous devez utiliser le
mkdir
option-p
qui permettra de créer tous les sous-dossiersc'est à dire
OriginalL'auteur Mark hallam
Voici une astuce qui utilise l'instruction LIBNAME de faire un annuaire
options dlcreatedir;
libname newdir "/u/sascrh/brand_new_folder";
Je crois que c'est plus fiable qu'une X déclaration.
Source: SAS astuce: obtenir le LIBNAME déclaration de créer des dossiers pour vous
OriginalL'auteur Andrew
Je suis sur WinXP ainsi, à l'aide de SAS 9.3 TS1M1. Les ouvrages suivants, pour moi comme annoncé:
C'est bien mon fichier journal, "public" est un Windows dossier partagé sur l'ordinateur du réseau et de l'ensemble du chemin a été créé. Peut-être à l'aide de la
SYSTEM
fonction a fait le tour. Je n'ai jamais utiliser la commande X de moi-même.Je dois être quelque chose d'étrange à propos de votre PC. J'ai essayé peuvent variations, mais ne peut pas reproduire le message d'erreur que vous avez reçu. Le plus proche que je suis venu a été quand j'ai essayé de faire référence à un non-partage réseau existant à l'UNC (\\W98052442n3m1\publicX\x\y\z), mais qui a donné "La netowrk chemin n'a pas été trouvé". J'ai utiliser des chemins d'accès UNC tout le temps.
OriginalL'auteur BellevueBob
Vous devez indiquer votre x des commandes, par exemple
Aussi, je n'ai jamais eu un problème à l'aide de chemins d'accès UNC, par exemple
OriginalL'auteur Chris J
Cela semble fonctionner très bien avec le dos de la fenêtre reste ouverte. Vous pouvez avoir besoin de XSYNC option. Je suis à l'aide de 9.3 TS1M1 64 bits sous VMWARE sur un MAC:
OriginalL'auteur RosaryGuy