batch file循环访问文本文件的内容,创buildvariables并移动部分名称的文件

我有一个文件夹中有数百个文件的区域,如下所示:

C:\myLibrary\Accident Investigation Report C:\myLibrary\Address Change C:\myLibrary\Medical Certificate C:\myLibrary\New Starter 

这些文件夹中的文档被命名为下面的示例(基于date戳,时间戳,部门编号,报告types,员工姓名)。

 2013-06-06 16-28-59 165 Accident Investigation Report - J Bloggs.xml 2013-06-06 16-28-59 165 Accident Investigation Report - J Bloggs.pdf 2013-06-11 15-38-07 147 Address Change - L Test.xml 2013-06-11 15-38-07 147 Address Change - L Test.pdf 

等等

(每个都有自己明显的标题文件夹)

为了确定文件来自哪个部门(重要位)是date戳和时间戳之后的数字 – 在上面的例子中分别是165和147。

我想将所有的文件移动到另一个设置文件夹结构(已经创build)基于他们的部门号码(每个部门有另一个类似的结构如下所示);

 C:\Dept Structure\165man\Accident Investigation Report C:\Dept Structure\165man\Address Change 

等等

所以,正如在batch file运行后上面的示例文件,我应该结束;

 C:\Dept Structure\165man\Accident Investigation Report\2013-06-06 16-28-59 165 Accident Investigation Report - J Bloggs.pdf C:\Dept Structure\165man\Accident Investigation Report\2013-06-06 16-28-59 165 Accident Investigation Report - J Bloggs.xml C:\Dept Structure\165man\Address Change\2013-06-06 16-28-59 165 Address Change - J Bloggs.pdf C:\Dept Structure\165man\Address Change\2013-06-06 16-28-59 165 Address Change - J Bloggs.xml C:\Dept Structure\147man\Accident Investigation Report\2013-06-11 15-38-07 147 Accident Investigation Report - L Test.pdf C:\Dept Structure\147man\Accident Investigation Report\2013-06-11 15-38-07 147 Accident Investigation Report - L Test.xml C:\Dept Structure\147man\Address Change\2013-06-11 15-38-07 147 Address Change - L Test.pdf C:\Dept Structure\147man\Address Change\2013-06-11 15-38-07 147 Address Change - L Test.xml 

我有一个文本文件,其中包括所有的部门经理人数字,例如

 003man 004man 005man 006man 007man 008man 009man etc etc 410man 

从这个我想循环访问文本文件,创build一个基于前3位的variables,添加“意外”或这个variables的结尾,检查通过第一个“C:\ myLibrary \事故调查报告”文件夹,find任何带有该variables的文件,并将其移动到名为“dept structure”的目录中 – 唷!

我已经设法find一些“近乎”完成这个看起来很简单的脚本;

 `cd /D "C:\Test"` `for /F %%i in (C:\Dept.txt) do set str1=%%i` `set _dept=%str1%` `set _dept=%_dept:~0,3%` `set "str2=%_dept%` `move "????????????????????%str2%*.*" "C:\Dept Structure\%str1%\Accident Investigation Report"` 

它实际上将一些文件移动到正确的位置,但是,这似乎贯穿整个文本文件,只处理最后一行! 所以其他所有的行都是独立的,其余的文件不会被移动。

测试这个 – 顶部创建测试文件和文件夹。 然后,它移动文件,你似乎希望他们移动。

 @echo off md "c:\mylibrary2\Accident Investigation Report\" 2>nul md "c:\mylibrary2\Address Change\" 2>nul type nul > "c:\mylibrary2\Accident Investigation Report\2013-06-06 16-28-59 165 Accident Investigation Report - J Bloggs.pdf" type nul > "c:\mylibrary2\Accident Investigation Report\2013-06-06 16-28-59 165 Accident Investigation Report - J Bloggs.xml" type nul > "c:\mylibrary2\Address Change\2013-06-06 16-28-59 165 Address Change - J Bloggs.pdf" type nul > "c:\mylibrary2\Address Change\2013-06-06 16-28-59 165 Address Change - J Bloggs.xml" type nul > "c:\mylibrary2\Accident Investigation Report\2013-06-11 15-38-07 147 Accident Investigation Report - L Test.pdf" type nul > "c:\mylibrary2\Accident Investigation Report\2013-06-11 15-38-07 147 Accident Investigation Report - L Test.xml" type nul > "c:\mylibrary2\Address Change\2013-06-11 15-38-07 147 Address Change - L Test.pdf" type nul > "c:\mylibrary2\Address Change\2013-06-11 15-38-07 147 Address Change - L Test.xml" for /f "delims=" %%a in ('dir "c:\mylibrary2" /ad /b /s') do ( for /f "tokens=3" %%b in ("%%~nxa") do ( for /f "delims=" %%c in ("%%~dpa\.") do ( md "C:\Dept Structure2\%%bman\%%~nxc\" 2>nul move "%%a" "C:\Dept Structure2\%%bman\%%~nxc\" >nul ) ) ) 

打扰一下。 我不明白部门经理人号码文件用于什么。 如果没有全部文件,处理这个列表中的所有行是浪费时间。 如果有文件不在这个列表中,而且你想省略这个文件,那么这个文件将会很有用,但是你没有提到这一点。

有几种方法可以解决这个问题。 下面的批处理文件假定在您的问题中已经解释的所有名称中没有错误。

 @echo off setlocal EnableDelayedExpansion rem Process all folders in: cd "C:\Dept Structure" for /D %%a in (*) do ( set "dept=%%a" // For example: "165man" set "dept=!dept:~0,3!" // For example: "165" pushd %%a rem Process all folders here, ie: "Accident Investigation Report" "Address Change" for /D %%b in (*) do ( rem Move all existent files from source folder to this folder move "C:\myLibrary\%%b\*!dept! %%b - *.*" "%%b" 2> NUL ) popd )