找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 26021|回复: 3

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

[复制链接]
发表于 2017-12-28 20:35:15 | 显示全部楼层 |阅读模式
本帖最后由 屡败屡战 于 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).....
即提取到同名文件时要求不覆盖,且重命名。
望大神们给些启示!!
发表于 2017-12-30 14:45:37 | 显示全部楼层
  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. }
复制代码

评分

参与人数 1技术 +1 收起 理由
屡败屡战 + 1 向大师学习了

查看全部评分

发表于 2017-12-30 14:48:51 | 显示全部楼层
  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:33 | 显示全部楼层
大神,给跪了!受我一拜!
祝论坛老师们元旦快乐!!!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 02:03 , Processed in 0.018641 second(s), 7 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表