Board logo

标题: [文件操作] 批处理如何复制文件名中含有该关键词的图片到指定目录? [打印本页]

作者: zanexue    时间: 2016-4-3 22:17     标题: 批处理如何复制文件名中含有该关键词的图片到指定目录?

各位好,请假爱哦大家个问题。(下面这个脚本是从网上找的,改了几次都没太成功的,谢谢大家了!)

我目前需要实现的功能为:数据源匹配后进行复制。

具体情况如下:
这是一个复制照片的过程,匹配的唯一依据为照片名,即名字。我先将需要匹配的名字输入到txt文本中,再运行一个bat脚本(如下)。
但是,我发现,当被复制的文件名无法和txt中的文件名全匹配时,无法进行复制。举例如下:

例1:
需要复制的文件名为:南京.jpg
txt中匹配的字段为:南京
结果:可正常复制

例2:
需要复制的文件名为:江苏南京.jpg
txt中匹配的字段为:南京
结果:无法复制

请问,我该如何修改下面的脚本呢?盼复为感!

脚本:
  1. @echo off
  2. md G:\人员信息\员工入职\copy                                                                             //新建个复制的路径                                    
  3. for /f "delims=" %%a in (G:\人员信息\员工入职\copy.txt) do (                   //将需要匹配的照片名存放至txt终
  4.    for /f "delims=" %%b in ('dir /a-d /b /s Z:\') do (                                               //被复制的路径我映射到了Z:\
  5.       if "%%a"=="%%~nb" xcopy "%%b" G:\人员信息\员工入职\copy         //将数据拷贝至制定的文件夹
  6.    )
  7. )
  8. pause
复制代码

作者: codegay    时间: 2016-4-3 22:23

不用if直接通配符*%%a*
作者: happy886rr    时间: 2016-4-3 22:49

  1. @echo off                     
  2. for /f "delims=" %%a in ('type copy.txt') do (
  3. for /f "delims=" %%b in ('dir /a-d /b /s Z:\') do (
  4. set "str=%%~nb"
  5. setlocal enabledelayedexpansion
  6. if not "!str:%%a=!"=="!str!" (endlocal &copy "%%b" .\)
  7. endlocal
  8. )
  9. )
  10. pause>nul
复制代码
回复 1# zanexue
作者: zanexue    时间: 2016-4-3 22:52

回复 2# codegay


    按照您说的,我将最后一行改成了:     *%%a*=="%%~nb" xcopy "%%b" G:\人员信息\员工入职\copy

但是提示运行失败了,提示:'*南京*' is not recognized as an internal or external command,operable program or batch file.

麻烦您再给予指点。
作者: zanexue    时间: 2016-4-3 22:59

回复 3# happy886rr


    脚本可以使用了,非常感谢您的协助。
作者: pcl_test    时间: 2016-4-4 18:28

本帖最后由 pcl_test 于 2019-2-27 14:15 编辑
  1. /*&cls
  2. @echo off
  3. set "文本=G:\人员信息\员工入职\copy.txt"
  4. set "源目录=Z:"
  5. set "新目录=G:\人员信息\员工入职\copy"
  6. if not exist "%新目录%" md "%新目录%"
  7. for /f "tokens=1* delims=|" %%a in ('dir /a-d/b/s "%源目录%\*.jpg"^|cscript -nologo -e:jscript "%~f0" "%文本%"') do (
  8.     if not exist "%新目录%\%%~nxa" (
  9.         echo;"%%a" --^> "%新目录%\%%~nxa"
  10.         copy /y "%%a" "%新目录%\%%~nxa"
  11.     )
  12. )
  13. pause&exit
  14. */
  15. var fso=new ActiveXObject('Scripting.FileSystemObject');
  16. var ftxt=fso.OpenTextFile(WSH.Arguments(0), 1);
  17. var keywords=ftxt.ReadAll().replace(/^\s*|\s*$/,'').split(/\r\n/);
  18. ftxt.Close();
  19. while(!WSH.StdIn.AtEndOfStream){
  20.     var file=WSH.StdIn.ReadLine();
  21.     var fname=fso.GetFile(file).Name;
  22.     for(var i=0; i<keywords.length; i++){
  23.         if(fname.toLowerCase().indexOf(keywords[i].toLowerCase()) > -1){
  24.             WSH.echo(file+'|'+keywords[i]);
  25.         }
  26.     }
  27. }
复制代码

作者: lihongxin512    时间: 2019-2-26 23:56

回复 6# pcl_test


    版主您好 我用了一下这个bat 没有实现建立关键词命名的文件夹并分别放入这一功能 能否再次关注一下?
作者: Batcher    时间: 2019-2-27 09:06

回复 7# lihongxin512
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%a in ('type copy.txt') do (
  4.     if not exist "%%a\" (
  5.         md "%%a"
  6.     )
  7.     for /f "delims=" %%b in ('dir /a-d /b /s Z:\') do (
  8.         set "str=%%~nb"
  9.         if not "!str:%%a=!"=="!str!" (
  10.             copy "%%b" "%%a\"
  11.         )
  12.     )
  13. )
复制代码





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