Board logo

标题: [文本处理] 【已解决】根据文件列表搜索文件夹及子文件夹的文件,移动到指定的文件夹? [打印本页]

作者: 屡败屡战    时间: 2017-12-28 20:35     标题: 【已解决】根据文件列表搜索文件夹及子文件夹的文件,移动到指定的文件夹?

本帖最后由 屡败屡战 于 2018-1-1 17:07 编辑

我有个论坛的代码:
  1. @echo off
  2. title  文件移动工具
  3. if not exist Found md Found
  4. (for /f "delims=" %%a in (.\a.txt) do (
  5.     set .found=
  6.     for /r %%i in ("%%a?") do (
  7.         if /i "%%~nxi" == "%%a" (
  8.             Move "%%i" "Found"
  9.             set .found=#
  10.         )
  11.     )
  12.     if not defined .found echo %%a
  13. )) >NotFound.txt
  14. pause
复制代码
此代码实现了文件移动的要求,其文件列表是a.txt
但是美中不足,有个问题:若目标文件夹中含有重复文件时,则提取到“同名文件”会覆盖掉,只能输出一个同名文件。
我想哪位大神能改良下,若从目标文件夹中提取“同名文件”时,要求在同名文件后依汣添加数字序号,例如标注副本(1)、副本(2).....
即提取到同名文件时要求不覆盖,且重命名。
望大神们给些启示!!
作者: WHY    时间: 2017-12-30 14:45

  1. @if(0)==(0) echo off
  2. rem 源目录
  3. set "srcDir=D:\Test"
  4. rem 目标目录
  5. set "dstDir=D:\Found"
  6. rem 文件列表
  7. set "list=D:\Test\a.txt"
  8. md "%dstDir%" 2>nul
  9. dir /b /a-d /s "%srcDir%\*" | cscript //nologo //e:jscript "%~f0" "%dstDir%" "%list%"
  10. pause & goto :EOF
  11. @end
  12. var arg = WSH.Arguments;
  13. var map = {};
  14. var fso = new ActiveXObject('Scripting.FileSystemObject');
  15. var objFile = fso.OpenTextFile(arg(1), 1);
  16. var objShell = new ActiveXObject('Shell.Application');
  17. while(!objFile.AtEndOfStream){
  18.         var str = objFile.ReadLine().toLowerCase();
  19.         str = str.replace(/^\s+|\s+$/g, '');
  20.         if(str != '') map[str] = 1;
  21. }
  22. while(!WSH.StdIn.AtEndOfStream){
  23.         var file = WSH.StdIn.ReadLine();
  24.         var name = fso.GetFile(file).Name.toLowerCase();
  25.         if(map[name]){
  26.                 objShell.NameSpace(arg(0)).CopyHere(file, 8);
  27.                 fso.DeleteFile(file, true);
  28.         }
  29. }
复制代码

作者: WHY    时间: 2017-12-30 14:48

  1. @echo off
  2. rem 源目录
  3. set "srcDir=D:\Test"
  4. rem 目标目录
  5. set "dstDir=D:\Found"
  6. rem 文件列表
  7. set "list=D:\Test\a.txt"
  8. md "%dstDir%" 2>nul
  9. pushd "%srcDir%"
  10. PowerShell -c "$obj=new-Object -com Shell.Application;dir -Include (type '%list%') -Recurse|?{$_ -is [IO.FileInfo]}|%%{$obj.NameSpace('%dstDir%').CopyHere($_.FullName,8);del $_ -Force}"
  11. pause
复制代码

作者: 屡败屡战    时间: 2018-1-1 16:56

大神,给跪了!受我一拜!
祝论坛老师们元旦快乐!!!!




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2