DEFLNG a-z
'Uncommented code by Shannon Larratt
'Contact shannon@bmezine.com
'Compiles under PBCC 2.1
'www.powerbasic.com
'Should run under most/all flavors of Windows
declare SUB MkDeepDir (Directory$) 'Create deep directory (up to 25 deep)
FUNCTION PBMAIN
STDOUT "FINDNEW"
STDOUT "Copy all files past a certain date to new/"
STDOUT
datecheck$ = COMMAND$
IF LEN(datecheck$) <> 10 AND MID$(datecheck$, 5,1) <> "-" AND MID$(datecheck$, 8,1) <> "-" THEN
STDOUT "Usage: findnew yyyy-mm-dd"
STDOUT "Moves all files as new or newer than the specified date"
STDOUT
EXIT FUNCTION
END IF
STDOUT "Generating file list...";
SHELL "cmd /c dir *.* /s > findnew.tmp"
DIM filelist$(1 TO 500000)
numfiles = 0
currentdir$ = ""
OPEN "findnew.tmp" FOR INPUT AS #1
DO UNTIL EOF(1)
LINE INPUT #1, x$
x$ = TRIM$(x$)
IF LEFT$(x$, 12) = "Directory of" THEN
currentdir$ = MID$(x$, 14)
ELSEIF LEN(x$) > 39 THEN
tim$ = MID$(x$, 19, 2)
IF (tim$ = "AM" OR tim$ = "PM") AND MID$(x$, 25, 5) <> "
" THEN
thisdate$ = MID$(x$, 7, 4) & "-" & MID$(x$, 1, 2) & "-" & MID$(x$, 4, 2)
IF thisdate$ >= datecheck$ THEN
INCR numfiles
IF numfiles >= 500000 THEN
STDOUT "(reached max buffer)...";
EXIT LOOP
END IF
filelist$(numfiles) = currentdir$ & "\" & MID$(x$, 40)
END IF
END IF
END IF
LOOP
CLOSE #1
KILL "findnew.tmp"
STDOUT "found " & FORMAT$(numfiles, ",") & " file(s)"
STDOUT
IF numfiles = 0 THEN EXIT FUNCTION
STDOUT "Moving files";
MKDIR "new"
olddir$ = CURDIR$
newdir$ = CURDIR$ & "\new"
FOR r = 1 TO numfiles
STDOUT ".";
moveto$ = filelist$(r)
REPLACE olddir$ WITH newdir$ IN moveto$
deepd$ = MID$(moveto$, 1, INSTR(-1, moveto$, "\"))
mkdeepdir deepd$
FILECOPY filelist$(r), moveto$
NEXT
STDOUT
STDOUT "Done. New files placed in:"
STDOUT " " & CURDIR$ & "\new"
stdout
END FUNCTION
SUB MkDeepDir (Directory$) 'Create deep directory (up to 25 deep)
'WARNING: No error checking (shouldn't need it)
td$ = Directory$ 'so we can MANGLE IT!
IF MID$(td$, 2, 1) = ":" THEN td$ = MID$(td$, 4)
REPLACE ANY "/" WITH "\" IN td$
'Trim front and back
IF RIGHT$(td$,1) = "\" THEN
td$ = MID$(td$,1,LEN(td$)-1)
END IF
IF LEFT$(td$,1) = "\" THEN
td$ = MID$(td$,2)
END IF
'Init
DIM RevTree$ (1 TO 25) 'can go up to 25 deep
Directories = 1
RevTree$(1) = td$
'break it down
DO
LastSlash = INSTR(-1, td$, "\")
IF LastSlash = 0 THEN EXIT DO
INCR Directories
td$ = MID$(td$,1,LastSlash-1)
RevTree$(Directories) = td$
LOOP
'create directory
FOR r=Directories TO 1 STEP -1
IF DIR$("\" + RevTree$(r)) = "" THEN
IF RIGHT$(RevTree$(r),1) = "\" THEN
RevTree$(r)=MID$(RevTree$(r),1,LEN(RevTree$(r))-1)
END IF
MKDIR "\" + RevTree$(r)
END IF
NEXT
END SUB