将文件/文件夹移动到新结构

将文件/文件夹移动到新结构

我希望能够将文件夹(以及任何子文件夹和文件)从一个位置移动到另一个位置;但是,我只希望从起始位置的每个文件夹中移动一个特定的子文件夹。

以下是我现有文件夹结构的示例:

E:\Estimates\Estimating Files\E27001
E:\Estimates\Estimating Files\E27001\27001A - Customer1\Drawings
E:\Estimates\Estimating Files\E27001\27001A - Customer1\Costings
E:\Estimates\Estimating Files\E27001\27001B - Customer2\Drawings
E:\Estimates\Estimating Files\E27001\27001B - Customer2\Costings
E:\Estimates\Estimating Files\E27001\27001C - Customer3\Drawings
E:\Estimates\Estimating Files\E27001\27001C - Customer3\Costings
E:\Estimates\Estimating Files\E27002
E:\Estimates\Estimating Files\E27002\27002A - Customer1\Drawings
E:\Estimates\Estimating Files\E27002\27002A - Customer1\Costings

我有很多估计,正如您所看到的那样,有些估计具有相同的数字,但后缀字母不同,并且客户名称显然发生了变化。

我只想将 Drawings 文件夹移动到新的驱动器和文件夹结构,如下所示:

S:\E27xxx\0xx\01\A - Customer1\
S:\E27xxx\0xx\01\B - Customer2\
S:\E27xxx\0xx\01\C - Customer3\
S:\E27xxx\0xx\02\A - Customer1\

图纸文件夹中将包含我想移动到新位置的子文件夹和文件。

到目前为止,我只设法创建了达到这一级别的空文件夹:

S:\E27xxx\0xx\01\A - Customer1\
S:\E27xxx\0xx\01\B - Customer2\
S:\E27xxx\0xx\01\C - Customer3\
S:\E27xxx\0xx\02\A - Customer1\

使用一个小的批处理文件,所有的估计值从 27000 到 30000。

但是移动文件和文件夹超出了我的能力,希望有人能够帮助我或者知道可能有用的现有实用程序!

谢谢!

答案1

我只想将 Drawings 文件夹移动到新的驱动器和文件夹结构,如下所示:

这个批处理文件可以帮到你。它找到所有“Drawings”子文件夹,标记目录路径的各个部分以构造新的目录结构,然后使用以下命令复制每个找到的目录及其子目录复制工具。

很重要

  • 确保将批处理文件放在“...\估算文件“文件夹并从那里运行它,否则,手动设置sourceDir变量。

  • 在使用该脚本之前,您应该手动调整循环的令牌数For

    例如,我使用了这个源文件夹C:\Source\Estimates\Estimating Files,我们需要错过前四个标记,因为我们想要在该Estimating Files部分之后开始计数,这就是为什么我在下面的脚本中设置Tokens=4,5,6,如果你有不同的路径,那么你应该调整标记。

    如果您的源目录是,E:\Estimates\Estimating Files那么您应该像这样设置令牌参数:Tokens=3,4,5

  • 如果要自动删除复制的源结构,只需/Move在RoboCopy参数中添加一个。


源代码

@Echo OFF

Set "sourceDir=%CD%"
Set "targetDir=C:\Target"

Set "findPattern=Drawings"

For /F "Tokens=4,5,6 Delims=\" %%a In (
    'Dir /B /S /A:D "%sourceDir%\*%findPattern%"'
) Do (
    Call Set "Token1=%%~a"
    Call Set "Token2=%%~b"
    Call Set "Token3=%%~c"
    Call Set "sourcePath=%CD%\%%~a\%%~b\%%~c"
    Call Set "targetPath=%targetDir%\%%Token1%%\%%Token1:~3%%\%%Token2:~3,2%%\%%Token2:~5%%\%%Token3%%"

    Echo+
    Call Echo Source: "%%sourcePath%%"
    Call Echo Target: "%%targetPath%%"

    (Call RoboCopy.exe "%%sourcePath%%" "%%targetPath%%" /E /ZB /COPYALL)1>Nul

)

Pause&Exit /B 0

输出

来源:“C:\Source\Estimates\Estimating Files\E27001\27001A - Customer1\Drawings”

目标:“C:\Target\E27001\001\01\A - Customer1\Drawings”

来源:“C:\Source\Estimates\Estimating Files\E27001\27001B - Customer2\Drawings”

目标:“C:\Target\E27001\001\01\B - Customer2\Drawings”

来源:“C:\Source\Estimates\Estimating Files\E27001\27001C - Customer3\Drawings”

目标:“C:\Target\E27001\001\01\C - Customer3\Drawings”

来源:“C:\Source\Estimates\Estimating Files\E27002\27002A - Customer1\Drawings”

目标:“C:\Target\E27002\002\02\A - Customer1\Drawings”

答案2

尝试这个脚本。不过你可能需要编辑驱动器号

setlocal EnableDelayedExpansion
@echo off
Q:
cd "Estimating\Estimating Files"
FOR /D /R %%G IN ("*Drawings*") DO (
FOR /F "tokens=4,5 delims=\" %%H IN ("%%G") DO (
set temp=%%H
set num=!temp:~4,2!
set temp=%%I
set alpha=!temp:~5!
MKDIR "Q:\E27XXX\0XX\!num!\!alpha!\Drawings"
CALL :mover "%%G" !num! !alpha!
)
)

:mover
FOR /R %1 %%X IN (*) DO (
COPY "%%X" "Q:\E27XXX\0XX\%2\%3 %4 %5\Drawings"
)

答案3

这是我用来将文件夹复制到新目录的最终代码。感谢@ElektroStudios 的帮助。

@Echo OFF

Set "sourceDir=%CD%"
Set "targetDir=S:\E30xxx"

Set "findPattern=2 - Drawings"

For /F "Tokens=6,7,8,9 Delims=\" %%a In (
    'Dir /B /S /A:D "%sourceDir%\*%findPattern%"'
) Do (
    Call Set "Token1=%%~a"
    Call Set "Token2=%%~b"
    Call Set "Token3=%%~c"
    Call Set "Token4=%%~d"
    Call Set "sourcePath=%CD%\%%~a\%%~b\%%~c\%%~d"
    Call Set "targetPath=%targetDir%\%%Token1:~3,1%%xx\%%Token2:~4,2%%\%%Token3:~6%%"

    Echo+
    Call Echo Source: "%%sourcePath%%"
    Call Echo Target: "%%targetPath%%"

    (Call RoboCopy.exe "%%sourcePath%%" "%%targetPath%%" /E /ZB /COPYALL)1>Nul

)

Pause&Exit /B 0

这只是掌握 RoboCoby 和分隔字符串标记的一个案例。

相关内容