Procédure de récupération des fichiers d’un répertoire

Cette procédure permet de récupérer la liste des fichiers d’un répertoire sous forme de table.


CREATE PROCEDURE dbo.P_FILES (@DIR VARCHAR(1024))
AS
BEGIN
DECLARE @TF TABLE (FNAME VARCHAR(256), FDATE DATETIME2(0), FSIZE BIGINT)
DECLARE @T TABLE (F VARCHAR(512));
DECLARE @COM VARCHAR(1048);
SET @COM = ' DIR "' + @DIR  
           + CASE  
                WHEN SUBSTRING(@DIR, LEN(@DIR), 1) = '\'  
                   THEN ''  
                ELSE '\'  
             END + '*.*"';
 
INSERT INTO @T
EXEC xp_cmdshell @COM;
 
DELETE FROM @T WHERE F IS NULL OR SUBSTRING(F, 1, 1) = ' ';
DELETE FROM @T WHERE SUBSTRING(F, 22, 5) = '<REP>';
 
SET DATEFORMAT DMY;
 
INSERT INTO @TF
SELECT SUBSTRING(F, 37, 475),
       REPLACE(SUBSTRING(F, 1, 17), '  ', ' '),
       LTRIM(REPLACE(SUBSTRING(F, 19, 17), CHAR(160), ''))
FROM   @T;
 
SELECT * FROM @TF
 
END;
GO

EXEC dbo.P_FILES ‘C:\! FB’

Attention : cette fonction n’est valable que pour Windows Server 2008 en version française. Pour d’autres localisation (par exemple US), le tag de répertoire peut être DIR et les dates au format anglais.
Enfin, suivant la version (Windows 2000, 2003, 2008…), la position des éléments textuels peut être légèrement décalé en nombre de caractères.
Pour terminer, notez que le caractère de substitution dans le 3° SUBTRSING n’est pas le caractère espace traditionnel, mais le code ASCII 160 (espace insécable).

————–
Frédéric BROUARD, Spécialiste modélisation, bases de données, optimisation, langage SQL.
Le site sur le langage SQL et les S.G.B.D. relationnels : http://sqlpro.developpez.com/
Expert SQL Server http://www.sqlspot.com : audit, optimisation, tuning, formation
* * * * * Enseignant au CNAM PACA et à l’ISEN à Toulon * * * * *

2 réflexions au sujet de « Procédure de récupération des fichiers d’un répertoire »

  1. Avatar de maKyomaKyo

    Voici les commandes qui permettent d’autoriser l’utilisation de xp_cmdshell (désactivé par défaut) :

    — To allow advanced options to be changed.
    EXEC sp_configure ‘show advanced options’, 1
    GO
    — To update the currently configured value for advanced options.
    RECONFIGURE
    GO
    — To enable the feature.
    EXEC sp_configure ‘xp_cmdshell’, 1
    GO
    — To update the currently configured value for this feature.
    RECONFIGURE
    GO

Laisser un commentaire