FUNCTION CopyAndRename(cSourceFiles, cTargetFiles) LOCAL nFiles, nfCycle, nCopyType, cFileExt LOCAL cFilePath, cSourcePath, cSource, cTarget ** IF cTargetFiles is only Path just copy files ** IF cTargetFiles is path+ wildcard copy & rename nCopyType = 0 cFileExt = JUSTEXT(cTargetFiles) DO CASE CASE "*" $ cFileExt .OR. "?" $ cFileExt nCopyType = 1 CASE .NOT. EMPTY(cFileExt) nCopyType = 2 ENDCASE cFilePath = JUSTPATH(cTargetFiles) TRY md (cFilePath) CATCH ENDTRY nFiles = ADIR(aFiles, cSourceFiles) IF nFiles == 0 RETURN -1 && No files match the criteria ENDIF IF nFiles > 1 .AND. nCopyType == 2 .AND. .NOT. "*" $ JUSTFNAME(cTargetFiles) RETURN -2 && Can't copy several files with one name ENDIF cSourcePath = ADDBS(JUSTPATH(cSourceFiles)) FOR nfCycle = 1 TO nFiles cSource = cSourcePath + aFiles[nfCycle ,1] cTarget = cTargetFiles + IIF(nCopyType==0,aFiles[nfCycle ,1],"") COPY FILE (cSource) TO (cTarget) NEXT RETURN 0Test it. I did some tests but they not enough.