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