[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

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

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

具体情况如下:
这是一个复制照片的过程,匹配的唯一依据为照片名,即名字。我先将需要匹配的名字输入到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
复制代码
1

评分人数

不用if直接通配符*%%a*
去学去写去用才有进步。安装python3代码存为xx.py 双击运行或右键用IDLE打开按F5运行

TOP

  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

TOP

回复 2# codegay


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

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

麻烦您再给予指点。

TOP

回复 3# happy886rr


    脚本可以使用了,非常感谢您的协助。

TOP

本帖最后由 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. }
复制代码

TOP

回复 6# pcl_test


    版主您好 我用了一下这个bat 没有实现建立关键词命名的文件夹并分别放入这一功能 能否再次关注一下?

TOP

回复 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. )
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

返回列表