fileassign 文件移动,正则
文件重整脚本,制定好规则,将文件按规则重新调整目录
支持正则,支持解压
RegularAssign.js
//D:\PersonalSet\Desktop> cscript /x /nologo RegularAssign.js "D:\\PersonalSet\\MyDocuments\\lotu.*" "d:\Temp\55\55\1.log" "OnlyOne|OnlyFile|DestPathAutoCreate| //"d:\Program Files\WinRAR\WinRAR.exe" x -y "d:\PersonalSet\Pictures\第十期学员合影.rar" "d:\PersonalSet\Pictures\1" var fso = new ActiveXObject("Scripting.FileSystemObject"); var WshShell = new ActiveXObject("WScript.Shell"); var g_tmpFolder = GetClearTmpFolder(); var bDebug = false; function GetRandomFileName() { return ("-" + Math.random()); } Array.prototype.Clear = function() { this.splice(0, this.length); } RegExp.prototype.ExecNoRecord = function(str){ var ret = this.exec(str); this.lastIndex = 0; return ret; } // 数组拷贝方法,数组直接赋值只相当于赋值引用 Array.prototype.Copy = function() { // 重新生成一个数组返回出去 var ret = new Array(); return ret.concat(this); } function RunCmd(strCmd) { return WshShell.Run(strCmd, 0, true); } function Output(str) { WScript.StdOut.WriteLine(str); } function Debug(str) { if(bDebug) { Output(str); } } function OutputArray(aryStr) { for(var i = 0; i < aryStr.length; ++i) { Output(aryStr[i]); } } function ExistInArray(aryValues, value) { for(var i = 0; i < aryValues.length; ++i) { if(aryValues[i] == value) { return true; } } return false; } function SplitPath(strPath) { var bFirstPart = true; for(var i = (strPath.length - 1); i >= 0 ; --i) { if(strPath.charAt(i) == "\\") { if(bFirstPart) { return; } break; } else { bFirstPart = false; } } if(i <= 0) { return {strParentPath:"",strFileName:""}; } else { return {strParentPath:strPath.substr(0, i),strFileName:strPath.substr(i + 1, strPath.length - 1 - i)}; } } function SplitName(strName) { for(var i = (strName.length - 1); i >=0; --i) { if(strName.charAt(i) == ".") { break; } } if(i < 0) { return {strMainName:"", strExtName:""}; } else { return {strMainName:strName.substr(0, i), strExtName:strName.substr(i + 1, strName.length - 1 - i)}; } } function CreateFolder(strPath) { var aryPathParts = strPath.split("\\"); if(aryPathParts.length == 0) { return false; } if(aryPathParts[aryPathParts.length - 1] == "") { aryPathParts.splice(aryPathParts.length - 1, 1); } if(aryPathParts.length == 0) { return false; } for(var i = 0; i < (aryPathParts.length); ++i) { if(aryPathParts[i] == "") { return false; } } var path = fso.GetFolder(aryPathParts[0] + "\\"); for(var i = 1; i < aryPathParts.length; ++i) { // 遍历文件夹 var foldersK = new Enumerator(path.SubFolders); for (; !foldersK.atEnd(); foldersK.moveNext()) { var objFolder = foldersK.item(); if(objFolder.Name == aryPathParts[i]) { path = objFolder; break; } } if(foldersK.atEnd()) { path = path.SubFolders.Add(aryPathParts[i]); } } return fso.FolderExists(strPath); } function CFile(fileObj, relativePath) { } function FindRegularPath(strRegPath, aryFolders, aryFiles) { var aryPathParts = strRegPath.split("\\\\"); for(var i = 0; i < (aryPathParts.length - 1); ++i) { if(aryPathParts[i] == "") { Output("!!!Path express error!!! express:" + strRegPath); return; } } var aryTempFolders1 = new Array(); var rootDir = fso.GetFolder(aryPathParts[0] + "\\"); aryTempFolders1.push(rootDir); for(var i = 1; i < aryPathParts.length; ++i) { var bIsLast = (i == (aryPathParts.length - 1)); var aryTempFolders2 = new Array(); var regPathPart; try { regPathPart = new RegExp(aryPathParts[i], "gm"); } catch(e) { aryFiles.Clear(); aryFolders.Clear(); Output("!!!Path express error!!! part:"+ aryPathParts[i] + " express:" + strRegPath); return; } for(var j = 0; j < aryTempFolders1.length; ++j) { // 遍历文件夹 var foldersK = new Enumerator(aryTempFolders1[j].SubFolders); for (; !foldersK.atEnd(); foldersK.moveNext()) { var objFolder = foldersK.item(); var strSubFolderName = objFolder.Name; var reret = regPathPart.ExecNoRecord(strSubFolderName); if(reret && (reret[0] == strSubFolderName)) { aryTempFolders2.push(objFolder); } } if(!bIsLast) { // 遍历文件 var filesK = new Enumerator(aryTempFolders1[j].Files); for (; !filesK.atEnd(); filesK.moveNext()) { var objFile = filesK.item(); var strSubFileName = objFile.Name; var reret = regPathPart.ExecNoRecord(strSubFileName); if(reret && (reret[0] == strSubFileName) && (objFile.Type.substr(0, 6) == "WinRAR")) { var objExtractedFolder = UnrarToTmpFolder(objFile.Path); if(objExtractedFolder) { aryTempFolders2.push(objExtractedFolder); } } } } else { // 遍历文件 var filesK = new Enumerator(aryTempFolders1[j].Files); for (; !filesK.atEnd(); filesK.moveNext()) { var objFile = filesK.item(); var strSubFileName = objFile.Name; var reret = regPathPart.ExecNoRecord(strSubFileName); if(reret && (reret[0] == strSubFileName)) { aryFiles.push(objFile); } } } } if(aryTempFolders2.length == 0) { for(var k = 0; k < aryTempFolders1.length; ++k) { Debug(aryTempFolders1[k].Path); } } aryTempFolders1 = aryTempFolders2.Copy(); } /*for(var i = 0; i < aryFiles.length; ++i) { Output(aryFiles[i].Path); } for(var i = 0; i < aryTempFolders1.length; ++i) { Output(aryTempFolders1[i].Path); }*/ for(var i = 0; i < aryTempFolders1.length; ++i) { aryFolders.push(aryTempFolders1[i]); } } function GetClearTmpFolder() { var g_tmpFolder; var tmpFolder = fso.GetSpecialFolder(2); // 遍历文件夹 var foldersK = new Enumerator(tmpFolder.SubFolders); for (; !foldersK.atEnd(); foldersK.moveNext()) { var objFolder = foldersK.item(); if(objFolder.Name == WScript.ScriptName) { g_tmpFolder = objFolder; } } if(!g_tmpFolder) { tmpFolder.SubFolders.Add(WScript.ScriptName); // 遍历文件夹 var foldersK = new Enumerator(tmpFolder.SubFolders); for (; !foldersK.atEnd(); foldersK.moveNext()) { var objFolder = foldersK.item(); if(objFolder.Name == WScript.ScriptName) { g_tmpFolder = objFolder; } } } else { try { // 删除所有文件、文件夹 var foldersK = new Enumerator(g_tmpFolder.SubFolders); for (; !foldersK.atEnd(); foldersK.moveNext()) { var objFolder = foldersK.item(); objFolder.Delete(true); } var filesK = new Enumerator(g_tmpFolder.Files); for (; !filesK.atEnd(); filesK.moveNext()) { var objFile = filesK.item(); objFile.Delete(true); } } catch(e) { // 无需处理,没删掉就没删吧。 } } return g_tmpFolder; } function ExistFileOrFolder(strPath) { if(fso.FileExists(strPath)) { return true; } if(fso.FolderExists(strPath)) { return true; } return false; } function DeleteFileOrFolder(strPath) { if(fso.FileExists(strPath)) { var oldFile = fso.GetFile(strPath); oldFile.Delete(true); } if(fso.FolderExists(strPath)) { var oldFolder = fso.GetFolder(strPath); oldFolder.Delete(true); } } function UnrarToTmpFolder(strRarFilePath) { var strExtractCmd = "\"d:\\Program Files\\WinRAR\\WinRAR.exe\" x -y -ibck "; do { var strSubFileName = GetRandomFileName(); strExtractToPath = g_tmpFolder.Path + "\\" + strSubFileName; } while(ExistFileOrFolder(strExtractToPath)) g_tmpFolder.SubFolders.Add(strSubFileName); strCmd = strExtractCmd + "\"" + strRarFilePath + "\"" + " " + "\"" + strExtractToPath + "\""; var objExtractedFolder if(RunCmd(strCmd) == 0) { objExtractedFolder = fso.GetFolder(strExtractToPath); } return objExtractedFolder; } function main() { //OnlyOne var bAllowMulti = true; //OnlyFile OnlyFolder var bSourceContainFile = true; var bSourceContainFolder = true; //DestAutoCreate var bDestPathAutoCreate = false; //MoveMode var bCopyMode = true; //RenameTo var bRenameTo = false; //OverWrite var bOverWrite = false; //Silent var bIsSilent = false; if((WScript.Arguments.length < 2) || (WScript.Arguments.length > 3)) { Output("Arguments num error."); return; } if((WScript.Arguments(0) == "") || (WScript.Arguments(1) == "")) { Output("Arguments value error."); return; } if(WScript.Arguments.length == 3 && WScript.Arguments(2) != "") { var strOptionList = WScript.Arguments(2); var aryOptions = strOptionList.split("|"); if(ExistInArray(aryOptions, "OnlyFile")) { bSourceContainFolder = false; } if(ExistInArray(aryOptions, "OnlyFolder")) { bSourceContainFile = false; } if(ExistInArray(aryOptions, "OnlyOne")) { bAllowMulti = false; } if(ExistInArray(aryOptions, "DestPathAutoCreate")) { bDestPathAutoCreate = true; } if(ExistInArray(aryOptions, "MoveMode")) { bCopyMode = false; } if(ExistInArray(aryOptions, "OverWrite")) { bOverWrite = true; } if(ExistInArray(aryOptions, "RenameTo")) { bRenameTo = true; } if(ExistInArray(aryOptions, "Silent")) { bIsSilent = true; } // 冲突排除 if(bRenameTo) { bAllowMulti = false; } } if(!bSourceContainFile && !bSourceContainFolder) { Output("No file No folder."); return; } var strDest = WScript.Arguments(1); var strDestFolder = ""; var strRename = ""; if(bRenameTo) { var objSplitResult = SplitPath(strDest); if((objSplitResult.strParentPath == "") || (objSplitResult.strFileName == "")) { Output("Rename to dest error.") return; } strDestFolder = objSplitResult.strParentPath; strRename = objSplitResult.strFileName; } else { Output(strDestFolder); strDestFolder = strDest; } var dest; // 先找目的地址 if (!fso.FolderExists(strDestFolder)) { if(!bDestPathAutoCreate) { Output("Path not exist. path:" + strDestFolder); return; } if(!CreateFolder(strDestFolder)) { Output("Create path failed. path:" + strDestFolder); return; } } dest = fso.GetFolder(strDestFolder); var aryFolders = new Array(); var aryFiles = new Array(); FindRegularPath(WScript.Arguments(0), aryFolders, aryFiles); var iFileCount = 0; if(bSourceContainFile) { iFileCount += aryFiles.length; } if(bSourceContainFolder) { iFileCount += aryFolders.length; } if(iFileCount == 0) { Output("No source file or folder. source path:" + WScript.Arguments(0)); return; } else if(iFileCount > 1) { if(!bAllowMulti) { Output("!!!Oh, Multi!!! source path:" + WScript.Arguments(0)) return; } } var arySrcs = new Array(); if(bSourceContainFile) { for(var i = 0; i < aryFiles.length; ++i) { var objTmpFile = aryFiles[i]; arySrcs.push(objTmpFile.Path); var bNeedRename = false; if(bRenameTo) { if(objTmpFile.Name == strRename) { Debug("No need to change file name. new name:" + strRename); bNeedRename = false; } else { bNeedRename = true; } } if(bNeedRename) { if(ExistFileOrFolder(dest.Path + "\\" + strRename)) { if(!bOverWrite) { Output("Fild or folder exist." + dest.Path + "\\" + strRename); return; } DeleteFileOrFolder(dest.Path + "\\" + strRename); } // 覆盖当前,需要先拷贝,后重命名 objTmpFile.Copy(g_tmpFolder.Path + "\\", false); var newFile = fso.GetFile(g_tmpFolder.Path + "\\" + objTmpFile.Name); newFile.Name = strRename; newFile.Move(dest.Path + "\\"); } else { if(ExistFileOrFolder(dest.Path + "\\" + objTmpFile.Name)) { if(!bOverWrite) { Output("Fild or folder exist." + dest.Path + "\\" + objTmpFile.Name); return; } DeleteFileOrFolder(dest.Path + "\\" + objTmpFile.Name); } objTmpFile.Copy(dest.Path + "\\", false); } } } if(bSourceContainFolder) { for(var i = 0; i < aryFolders.length; ++i) { var objTmpFolder = aryFolders[i]; arySrcs.push(objTmpFolder.Path); var bNeedRename = false; if(bRenameTo) { if(objTmpFolder.Name == strRename) { Debug("No need to change file name. new name:" + strRename); bNeedRename = false; } else { bNeedRename = true; } } if(bNeedRename) { if(ExistFileOrFolder(dest.Path + "\\" + strRename)) { if(!bOverWrite) { Output("Fild or folder exist." + dest.Path + "\\" + strRename); return; } DeleteFileOrFolder(dest.Path + "\\" + strRename); } // 覆盖当前,需要先拷贝,后重命名 objTmpFolder.Copy(g_tmpFolder.Path + "\\", false); var newFolder = fso.GetFolder(g_tmpFolder.Path + "\\" + objTmpFolder.Name); newFolder.Name = strRename; //newFolder.Move(dest.Path + "\\"); //newFolder.Move("d:"); //fso.MoveFolder(newFolder.Path, dest.Path + "\\"); newFolder.Copy(dest.Path + "\\"); newFolder.Delete(true); } else { if(ExistFileOrFolder(dest.Path + "\\" + objTmpFolder.Name)) { if(!bOverWrite) { Output("File or folder exist." + dest.Path + "\\" + objTmpFolder.Name); return; } DeleteFileOrFolder(dest.Path + "\\" + objTmpFolder.Name); } objTmpFolder.Copy(dest.Path + "\\", false); } } } if(!bIsSilent) { OutputArray(arySrcs); Output(">>>" + strDest); } } function help() { Output("OnlyFile"); Output("OnlyFolder"); Output("OnlyOne"); Output("DestPathAutoCreate"); Output("OverWrite"); Output("RenameTo"); Output("Silent"); } if(0 == WScript.Arguments.length) { help(); } else { main(); }
RA.bat
::用法D:\PersonalSet\Desktop>D:\PersonalSet\Desktop\RA.bat "E:\Source\" D:\Dest\ @ECHO OFF setlocal ENABLEDELAYEDEXPANSION ::切换到目录 cd /d %~dp0 set SRC_DIR=%~1 ::进工作目录 IF NOT EXIST %SRC_DIR% ( echo No %SRC_DIR%!!! EXIT ) set DEST_DIR=%~2 ::进工作目录 IF NOT EXIST %DEST_DIR% ( echo No %DEST_DIR%!!! EXIT ) call :FORMATFOLDERPATH "!SRC_DIR!" set SRC_DIR=!FORMATFOLDERPATH! call :FORMATFOLDERPATH "!DEST_DIR!" set DEST_DIR=!FORMATFOLDERPATH! set SRC_DIR=!SRC_DIR:\=\\! call :RA "SOURCE\\.*\.rpm" "DEST\rpm" "OnlyOne|OnlyFile|DestPathAutoCreate" GOTO :eof :MOVEAFileTOFile call :RANOREG "%~1" "%~2" "OnlyOne|OnlyFile|DestPathAutoCreate|RenameTo" GOTO :eof :MOVEAFileToFolder call :RANOREG "%~1" "%~2" "OnlyOne|OnlyFile|DestPathAutoCreate" GOTO :eof :RANOREG ::拼路经 set TMP_SRC_DIR="%~1" set TMP_SRC_DIR=!TMP_SRC_DIR:\=\\! call :RA !TMP_SRC_DIR! "%~2" "%~3" GOTO :eof :RA ::拼路经 set TMP_SRC_DIR="!SRC_DIR!%~1" set TMP_DEST_DIR="!DEST_DIR!%~2" set TMP_OPTION="%~3|Silent" ::执行 cscript /d /nologo RegularAssign.js !TMP_SRC_DIR! !TMP_DEST_DIR! !TMP_OPTION! GOTO :eof :FORMATFOLDERPATH set strPath=%~1 call :STRLEN "strPath" set /a STREND=STRLEN-1 IF NOT "!strPath:~%STREND%,1!"=="\" ( set strPath=!strPath!\ ) set FORMATFOLDERPATH=!strPath! GOTO :eof :STRLEN set str=%~1 set cur=0; :while if "!str:~%cur%,1!"=="" ( set /a STRLEN=cur ) else ( set /a cur=cur+1 goto :while ) GOTO :eof