Attention : Este código requiere privilegios de administrador.
Esta macro, `mp_deletefolder`, está diseñada para borrar un directorio especificado, así como todo su contenido (archivos y subdirectorios). Comienza verificando la validez de la ruta de la carpeta. Si la carpeta es válida, utiliza otra macro (`%mp_dirlist`) para obtener una lista recursiva de todos los elementos dentro de la carpeta. Esta lista se ordena luego por nivel decreciente para asegurar que los elementos internos sean eliminados antes que sus contenedores. La carpeta raíz se añade explícitamente a la lista de eliminación. Se utiliza un `DATA _NULL_` para iterar sobre esta lista, eliminando cada archivo y carpeta usando las funciones `filename()` y `fdelete()`, con una gestión de errores rudimentaria. Finalmente, se elimina la tabla temporal utilizada para la lista de carpetas.
Análisis de datos
Type : CREATION_INTERNE
El script genera una tabla temporal (`work.&tempds`) para almacenar la lista de rutas de archivos y carpetas a eliminar. Estas rutas se obtienen mediante introspección del sistema de archivos a través de la macro `mp_dirlist`, y no de datos de negocio externos o de la biblioteca SASHELP. La entrada principal es una ruta del sistema de archivos.
1 Bloque de código
Macro SAS
Explicación : Este bloque inicializa la macro `mp_deletefolder`. Primero verifica si la ruta proporcionada (`&folder`) es un directorio válido y accesible usando la macro `%mf_isdir`. Si es así, declara una variable local `tempds` y le asigna un nombre único generado por `%mf_getuniquename()` para una tabla de trabajo temporal que almacenará la lista de elementos a eliminar.
/* sort descending level so can delete folder contents before folders */
proc sort data=work.&tempds;
by descending level;
run;
1
/* sort descending level so can delete folder contents before folders */
2
PROC SORTDATA=work.&tempds;
3
BY descending level;
4
RUN;
4 Bloque de código
PROC SQL
¡Copiado!
/* ensure top level folder is removed at the end */
proc sql;
insert into work.&tempds set filepath="&folder";
1
/* ensure top level folder is removed at the end */
2
3
PROC SQL;
4
insert into work.&tempds SET filepath="&folder";
5
5 Bloque de código
DATA STEP
¡Copiado!
/* delete everything */
data _null_;
set work.&tempds end=last;
length fref $8;
fref='';
rc=filename(fref,filepath);
rc=fdelete(fref);
if rc then do;
msg=sysmsg();
put "&sysmacroname:" / rc= / msg= / filepath=;
end;
rc=filename(fref);
run;
1
/* delete everything */
2
DATA _null_;
3
SET work.&tempds END=last;
4
LENGTH fref $8;
5
fref='';
6
rc=filename(fref,filepath);
7
rc=fdelete(fref);
8
IF rc THENDO;
9
msg=sysmsg();
10
put "&sysmacroname:" / rc= / msg= / filepath=;
11
END;
12
rc=filename(fref);
13
RUN;
6 Bloque de código
PROC SQL
¡Copiado!
/* tidy up */
proc sql;
drop table work.&tempds;
1
/* tidy up */
2
3
PROC SQL;
4
drop TABLE work.&tempds;
5
7 Bloque de código
Macro SAS
¡Copiado!
%end;
%else %put &sysmacroname: &folder: is not a valid / accessible folder. ;
%mend mp_deletefolder;
1
%END;
2
%ELSE %put &sysmacroname: &folder: is not a valid / accessible folder. ;
3
%mend mp_deletefolder;
4
Este material se proporciona "tal cual" por We Are Cas. No hay garantías, expresas o implícitas, en cuanto a la comerciabilidad o idoneidad para un propósito particular con respecto a los materiales o el código contenidos en este documento. We Are Cas no es responsable de los errores en este material tal como existe ahora o existirá, ni We Are Cas proporciona soporte técnico para el mismo.
Información de copyright : Copyright 2010-2023 HMS Analytical Software GmbH, http://www.analytical-software.de
« La macro mp_deletefolder sigue una regla de oro en la gestión de sistemas de archivos: un directorio solo puede borrarse si está estrictamente vacío. La inteligencia de este script reside en el uso de una ordenación por nivel descendente (descending level). Este enfoque "de abajo hacia arriba" garantiza que los nodos hoja (archivos y subcarpetas más profundas) se eliminen antes de que SAS intente borrar los contenedores padre, evitando los errores de "directorio no vacío" comunes en el procesamiento lineal. »
SAS y todos los demás nombres de productos o servicios de SAS Institute Inc. son marcas registradas o marcas comerciales de SAS Institute Inc. en los EE. UU. y otros países. ® indica registro en los EE. UU. WeAreCAS es un sitio comunitario independiente y no está afiliado a SAS Institute Inc.
Este sitio utiliza cookies técnicas y analíticas para mejorar su experiencia.
Saber más.