Archive for November, 2016

get the contents of a file system

November 28, 2016

create PROC procname

@drive CHAR(1)
AS
SET NOCOUNT ON

DECLARE @dynamic_sql VARCHAR(1000)

SET @dynamic_sql = CONCAT(‘EXEC xp_cmdshell ”dir ‘,@drive,’:\ /a /s”’)
PRINT @dynamic_sql

CREATE TABLE #t (id INT IDENTITY(1,1), output VARCHAR(MAX))

INSERT INTO #t
EXEC (@dynamic_sql)

DELETE FROM #t WHERE output IS NULL
DELETE FROM #t WHERE output LIKE ‘%<DIR>%’
DELETE FROM #t WHERE output LIKE ‘%file%bytes’
DELETE FROM #t WHERE output LIKE ‘%dir%bytes’
DELETE FROM #t WHERE output LIKE ‘%dir%bytes’
DELETE FROM #t WHERE output =’ Total Files Listed:’
DELETE FROM #t WHERE output LIKE ‘%Volume in drive%’
DELETE FROM #t WHERE output LIKE ‘%Volume Serial Number%’
DELETE FROM #t WHERE output LIKE ‘%Dir%bytes free’
DELETE FROM #t WHERE output LIKE ‘%The directory name%’
DELETE FROM #t WHERE output LIKE ‘%is too long%’
DELETE FROM #t WHERE output LIKE ‘%<JUNCTION>%’
DELETE FROM #t WHERE output LIKE ‘%<SYMLINKD>%’
ALTER TABLE #t ADD data_type int

UPDATE #t SET data_type = 0 WHERE output LIKE ‘ Directory%’
UPDATE #t SET data_type = 1 WHERE data_type IS NULL

UPDATE #t SET output = LTRIM(SUBSTRING(output,18,1000)) FROM #t WHERE data_type = 1

ALTER TABLE #t ADD first_space INT

UPDATE #t SET first_space = CHARINDEX(‘ ‘,output) FROM #t WHERE data_type = 1

DELETE FROM #t WHERE first_space = 0 AND data_type = 1

ALTER TABLE #t ADD size BIGINT,filename VARCHAR(1000)
UPDATE #t SET SIZE = REPLACE(SUBSTRING(output,1,first_space-1),’,’,”),filename = SUBSTRING(output,first_space+1,1000) FROM #t WHERE data_type =1

CREATE clustered INDEX i ON #t (id)

ALTER TABLE #t ADD directory VARCHAR(1000)

DECLARE @row BIGINT = 1,@max BIGINT

SELECT @max = MAX(id) FROM #t

WHILE @row <= @max
BEGIN

DECLARE @data_type INT, @outputvalue VARCHAR(1000), @directory VARCHAR(1000)

SELECT @data_type = data_type,@outputvalue = output FROM #t WHERE id = @row

IF @data_type = 0 SET @directory = @outputvalue

IF @data_type = 1
UPDATE #t SET directory = REPLACE(@directory,’ Directory of ‘,”) FROM #t WHERE id = @row

SET @row +=1
end

DELETE FROM #t WHERE data_type = 0

IF (SELECT OBJECT_ID(‘table’)) IS NULL
EXEC (‘SELECT TOP 0 filename,directory,size,GETDATE() capture_time INTO table FROM #t ‘)

INSERT INTO table
SELECT filename,directory,size,GETDATE() capture_time FROM #t ORDER BY size DESC