标题: [文本处理] 【已解决】根据文件列表搜索文件夹及子文件夹的文件,移动到指定的文件夹? [打印本页]
作者: 屡败屡战 时间: 2017-12-28 20:35 标题: 【已解决】根据文件列表搜索文件夹及子文件夹的文件,移动到指定的文件夹?
本帖最后由 屡败屡战 于 2018-1-1 17:07 编辑
我有个论坛的代码:- @echo off
- title 文件移动工具
- if not exist Found md Found
- (for /f "delims=" %%a in (.\a.txt) do (
- set .found=
- for /r %%i in ("%%a?") do (
- if /i "%%~nxi" == "%%a" (
- Move "%%i" "Found"
- set .found=#
- )
- )
- if not defined .found echo %%a
- )) >NotFound.txt
- pause
复制代码
此代码实现了文件移动的要求,其文件列表是a.txt
但是美中不足,有个问题:若目标文件夹中含有重复文件时,则提取到“同名文件”会覆盖掉,只能输出一个同名文件。
我想哪位大神能改良下,若从目标文件夹中提取“同名文件”时,要求在同名文件后依汣添加数字序号,例如标注副本(1)、副本(2).....
即提取到同名文件时要求不覆盖,且重命名。
望大神们给些启示!!
作者: WHY 时间: 2017-12-30 14:45
- @if(0)==(0) echo off
- rem 源目录
- set "srcDir=D:\Test"
- rem 目标目录
- set "dstDir=D:\Found"
- rem 文件列表
- set "list=D:\Test\a.txt"
-
- md "%dstDir%" 2>nul
- dir /b /a-d /s "%srcDir%\*" | cscript //nologo //e:jscript "%~f0" "%dstDir%" "%list%"
- pause & goto :EOF
- @end
-
- var arg = WSH.Arguments;
- var map = {};
- var fso = new ActiveXObject('Scripting.FileSystemObject');
- var objFile = fso.OpenTextFile(arg(1), 1);
- var objShell = new ActiveXObject('Shell.Application');
-
- while(!objFile.AtEndOfStream){
- var str = objFile.ReadLine().toLowerCase();
- str = str.replace(/^\s+|\s+$/g, '');
- if(str != '') map[str] = 1;
- }
-
- while(!WSH.StdIn.AtEndOfStream){
- var file = WSH.StdIn.ReadLine();
- var name = fso.GetFile(file).Name.toLowerCase();
- if(map[name]){
- objShell.NameSpace(arg(0)).CopyHere(file, 8);
- fso.DeleteFile(file, true);
- }
- }
复制代码
作者: WHY 时间: 2017-12-30 14:48
- @echo off
- rem 源目录
- set "srcDir=D:\Test"
- rem 目标目录
- set "dstDir=D:\Found"
- rem 文件列表
- set "list=D:\Test\a.txt"
-
- md "%dstDir%" 2>nul
- pushd "%srcDir%"
-
- PowerShell -c "$obj=new-Object -com Shell.Application;dir -Include (type '%list%') -Recurse|?{$_ -is [IO.FileInfo]}|%%{$obj.NameSpace('%dstDir%').CopyHere($_.FullName,8);del $_ -Force}"
-
- pause
复制代码
作者: 屡败屡战 时间: 2018-1-1 16:56
大神,给跪了!受我一拜!
祝论坛老师们元旦快乐!!!!
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |