2

我有一个文件夹区域,每个文件夹中有数百个文档,结构如下:

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

这些文件夹中的文档命名如下例所示(基于日期戳、时间戳、部门编号、报告类型、员工姓名)。

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

ETC

(每个都在他们自己明显的标题文件夹中)

要识别文件来自哪个部门编号(重要位)是日期戳和时间戳之后的数字 - 在上面的示例中分别是 165 和 147。

我想根据他们的部门编号将所有文件移动到另一个设置的文件夹结构(已经创建)(每个部门都有另一个类似的结构,如下所示);

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

ETC

所以,就像上面的示例文件一样,在批处理文件运行之后,我应该最终得到;

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

从此我想遍历文本文件,根据前 3 位数字创建一个变量,添加“事故”或到此变量的末尾,检查第一个“C:\myLibrary\Accident Investigation Report”文件夹,找到标题中包含该变量的任何文件并将其移动到如上所述命名的“部门结构”目录 - 唷!!

我设法找到了一些“几乎”完成此任务的脚本,看起来非常简单;

`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"`

它实际上确实将一些文件移动到了正确的位置,但是,这似乎贯穿了整个文本文件并且只处理最后一行!因此,所有其他行都保持不变,并且不会移动剩余的文件。

4

2 回答 2

4

对此进行测试 - 顶部创建测试文件和文件夹。然后它会移动文件,因为您似乎希望它们移动。

@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" /a-d /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
)
)
)
于 2013-06-11T17:51:12.153 回答
2

打扰一下。我不明白部门经理编号文件的用途。如果所有行都没有文件,则处理此列表中的所有行是浪费时间。如果存在不在此列表中的文件并且您想省略它们,则此文件将很有用,但您没有提及这一点。

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

@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
)
于 2013-06-11T18:58:49.040 回答