标题: [文件操作] 批处理如何复制文件名中含有该关键词的图片到指定目录? [打印本页]
作者: zanexue 时间: 2016-4-3 22:17 标题: 批处理如何复制文件名中含有该关键词的图片到指定目录?
各位好,请假爱哦大家个问题。(下面这个脚本是从网上找的,改了几次都没太成功的,谢谢大家了!)
我目前需要实现的功能为:数据源匹配后进行复制。
具体情况如下:
这是一个复制照片的过程,匹配的唯一依据为照片名,即名字。我先将需要匹配的名字输入到txt文本中,再运行一个bat脚本(如下)。
但是,我发现,当被复制的文件名无法和txt中的文件名全匹配时,无法进行复制。举例如下:
例1:
需要复制的文件名为:南京.jpg
txt中匹配的字段为:南京
结果:可正常复制
例2:
需要复制的文件名为:江苏南京.jpg
txt中匹配的字段为:南京
结果:无法复制
请问,我该如何修改下面的脚本呢?盼复为感!
脚本:- @echo off
- md G:\人员信息\员工入职\copy //新建个复制的路径
- for /f "delims=" %%a in (G:\人员信息\员工入职\copy.txt) do ( //将需要匹配的照片名存放至txt终
- for /f "delims=" %%b in ('dir /a-d /b /s Z:\') do ( //被复制的路径我映射到了Z:\
- if "%%a"=="%%~nb" xcopy "%%b" G:\人员信息\员工入职\copy //将数据拷贝至制定的文件夹
- )
- )
- pause
复制代码
作者: codegay 时间: 2016-4-3 22:23
不用if直接通配符*%%a*
作者: happy886rr 时间: 2016-4-3 22:49
- @echo off
- for /f "delims=" %%a in ('type copy.txt') do (
- for /f "delims=" %%b in ('dir /a-d /b /s Z:\') do (
- set "str=%%~nb"
- setlocal enabledelayedexpansion
- if not "!str:%%a=!"=="!str!" (endlocal © "%%b" .\)
- endlocal
- )
- )
- 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 编辑
- /*&cls
- @echo off
- set "文本=G:\人员信息\员工入职\copy.txt"
- set "源目录=Z:"
- set "新目录=G:\人员信息\员工入职\copy"
- if not exist "%新目录%" md "%新目录%"
- for /f "tokens=1* delims=|" %%a in ('dir /a-d/b/s "%源目录%\*.jpg"^|cscript -nologo -e:jscript "%~f0" "%文本%"') do (
- if not exist "%新目录%\%%~nxa" (
- echo;"%%a" --^> "%新目录%\%%~nxa"
- copy /y "%%a" "%新目录%\%%~nxa"
- )
- )
- pause&exit
- */
-
- var fso=new ActiveXObject('Scripting.FileSystemObject');
-
- var ftxt=fso.OpenTextFile(WSH.Arguments(0), 1);
- var keywords=ftxt.ReadAll().replace(/^\s*|\s*$/,'').split(/\r\n/);
- ftxt.Close();
-
- while(!WSH.StdIn.AtEndOfStream){
- var file=WSH.StdIn.ReadLine();
- var fname=fso.GetFile(file).Name;
- for(var i=0; i<keywords.length; i++){
- if(fname.toLowerCase().indexOf(keywords[i].toLowerCase()) > -1){
- WSH.echo(file+'|'+keywords[i]);
- }
- }
- }
复制代码
作者: lihongxin512 时间: 2019-2-26 23:56
回复 6# pcl_test
版主您好 我用了一下这个bat 没有实现建立关键词命名的文件夹并分别放入这一功能 能否再次关注一下?
作者: Batcher 时间: 2019-2-27 09:06
回复 7# lihongxin512 - @echo off
- setlocal enabledelayedexpansion
- for /f "delims=" %%a in ('type copy.txt') do (
- if not exist "%%a\" (
- md "%%a"
- )
- for /f "delims=" %%b in ('dir /a-d /b /s Z:\') do (
- set "str=%%~nb"
- if not "!str:%%a=!"=="!str!" (
- copy "%%b" "%%a\"
- )
- )
- )
复制代码
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |