标题: [文件操作] 求助批处理实现文件查找和剪切 [打印本页]
作者: 001011 时间: 2015-10-17 21:50 标题: 求助批处理实现文件查找和剪切
图片很多,放G盘里面。放时间长了在哪儿都不知道了。想把这些图片做一个汇总。一个个查找剪切太慢。所以求助。
根据TXT里面的图片文件名查找(同一个分区里面)图片,按照规定的文件夹结构剪切到 G:\文件汇总 里面。
如:TXT的某行为:SYWY-WYSYQ-2014-AA0AD9-H-0001-001(这个只是图片文件名的一部分,查找结果可能是:SYWY-WYSYQ-2014-AA0AD9-H-0001-001-10001.jpg或者SYWY-WYSYQ-2014-AA0AD9-H-0001-001-10002.jpg)
txt文本格式:
查找到以后剪切到 G:\文件汇总 里面。
文件夹结构为:
把图片文件放到末级文件夹里面
如果遇到同名文件,就直接覆盖。
文件很多,可能要考虑执行效率问题
谢谢
作者: WHY 时间: 2015-10-18 01:13
本帖最后由 WHY 于 2015-10-18 02:09 编辑
- @if (0)==(0) echo off
- set "file=列表.txt"
- set "fold=G:\文件汇总"
- for /f "tokens=1*delims=|" %%i in ('dir /b /s /a-d *.jpg^|cscript //nologo //e:jscript "%~f0" "%file%"')do (
- md "%fold%\%%i\"
- move "%%j" "%fold%\%%i\%%~nxj"
- ) 2>nul
- pause & exit
- @end
-
- var str = WScript.StdIn.ReadAll();
- var fso = new ActiveXObject('Scripting.FileSystemObject');
- var txt = fso.OpenTextFile(WScript.Arguments(0)).ReadAll();
- txt = txt.replace(/[\^$()\[\]+\-{}.]/g, '\\$&');
- var arr, reg = /(.+)\r\n/g, re, ar, s='';
- while(arr = reg.exec(txt+'\r\n')){
- re = new RegExp('.*(' + arr[1] + ')[^\\\\]*\\r\\n', 'g');
- while(ar = re.exec(str)){
- s += ar[1].replace(/\-/g, '\\') + '|' + ar[0];
- }
- }
- WScript.Echo(s)
复制代码
作者: /zhqsystem/zhq 时间: 2015-10-18 01:58
本帖最后由 /zhqsystem/zhq 于 2015-10-18 02:32 编辑
将文本txt直接拖到批处理松手即可
注意:取值路径跟随txt文本路径盘符请提前转换文本中的路径为-(或_)如果是"\"会造成无法正确识别,另外第9行中的判断文本中如果没有后缀请将%%~nxj改为%%~nj.jpg(或"%%~nj"=="%%~ni",此值非常重要)
- @echo off
- set "drive_path=%~1"
- set "drive_drive=%~d1"
- echo=%drive_path%
- echo=%drive_drive%
- setlocal enabledelayedexpansion
- for /f "delims=" %%i in ('dir/a-d/s/b/l/on "%drive_drive%\*.jpg"') do (
- for /f "delims=" %%j in ('type "%drive_path%"') do (
- if /i "%%~nxi"=="%%~nxj" (
- set "name=%%~nxj"
- set "name=!name:-=\!"
- set "name=!name:_=\!"
- echo !name!
- echo,f|xcopy /y "%%i" "G:\文件汇总\!name!"
- )
- )
- )
- (for /f "delims=" %%i in ('dir/a-d/s/b/l/on "g:\文件汇总\*.jpg"') do echo,"目录树:%%i")>"c:\文件汇总目录树.txt"
- echo=此文件路径"c:\文件汇总目录树.txt"
- start "" "c:\文件汇总目录树.txt"
- pause
复制代码
作者: 001011 时间: 2015-10-18 09:03
非常感谢
二楼的运行无反应
三楼的:txt里面是没有路径的,只有文件名。
作者: WHY 时间: 2015-10-19 19:48
批处理文件保存为:test.bat
txt文件名为:列表.txt
把这两个文件保存在桌面上,双击 test.bat
如果搜索的盘符不是G,或者目标文件夹名称不是G:\文件汇总,自行修改代码中相应的字符串- @if (0)==(0) echo off
- for /f "tokens=1*delims=|" %%i in ('dir /b /s G:\*-*.jpg^|cscript //nologo //e:jscript "%~f0"')do (
- md "G:\文件汇总\%%i\"
- move "%%j" "G:\文件汇总\%%i\"
- ) 2>nul
- pause & exit
- @end
-
- var str = WScript.StdIn.ReadAll().replace(/G:\\文件汇总\\.+\.jpg$/igm, '');
- var fso = new ActiveXObject('Scripting.FileSystemObject');
- var txt = fso.OpenTextFile('列表.txt').ReadAll();
- txt = txt.replace(/[\^$()\[\]+\-{}.]/g, '\\$&');
- var arr, reg = /(.+)\r\n/g, re, ar, s='';
- while(arr = reg.exec(txt+'\r\n')){
- re = new RegExp('.*(' + arr[1] + ')[^\\\\]*\\r\\n', 'ig');
- while(ar = re.exec(str)){
- s += ar[1].replace(/\-/g, '\\') + '|' + ar[0];
- }
- }
- WScript.Echo(s)
复制代码
作者: 001011 时间: 2015-10-19 22:38
终于OK了 非常感谢
再就是提个要求 能否出一个报告 记录那个没有找到 好做相应处理
再次感谢
作者: 依山居 时间: 2015-10-22 16:51
everything.exe 是神器啊。不知道在脚本里用起来会不会更爽。
作者: 依山居 时间: 2015-10-22 17:33
楼主可以看一下能不能利用es.exe 优化搜索速度。
作者: 依山居 时间: 2015-10-22 17:38
http://www.bathome.net/viewthrea ... mp;extra=#pid176210
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |