我希望能够将文件夹(以及任何子文件夹和文件)从一个位置移动到另一个位置;但是,我只希望从起始位置的每个文件夹中移动一个特定的子文件夹。
以下是我现有文件夹结构的示例:
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 和分隔字符串标记的一个案例。