批处理命令将文件夹和子文件夹中的某些文件全部移动到单独的单个文件夹中

时间:2017-04-04 23:10:31

标签: batch-file command revit

我有一个批处理命令,可以将某些文件从一个文件夹移动到另一个文件夹,如下所示:

move /-y "U:\REVIT\REVIT FAMILES\*.00*.rfa" "U:\REVIT\Revit Backup Files"
pause

这会将创建并具有.001.rfa.002.rfa等扩展名的备份文件移动到另一个文件夹,但它只会移动该特定文件夹中的文件,并且不会从子文件夹中移动任何文件也存在。有人可以帮忙添加这个功能吗?

2 个答案:

答案 0 :(得分:0)

我认为你可以通过以下方式实现你想要的目标:

for /f %i in ('dir /s /b "REVIT FAMILES*.00*.rfa"') do move /-Y "%i" "U:\REVIT\Revit Backup Files\"

答案 1 :(得分:0)

保留目录层次结构

如果要保留目录层次结构,可以执行以下操作:

robocopy "U:\REVIT\REVIT FAMILES" "U:\REVIT\Revit Backup Files" "*.00*.rfa" /S /MOV /XC /XN /XO

/XC /XN /XO选项可防止覆盖。请注意,没有提示。删除它们以强制覆盖已存在的目标文件。

或者,您可以使用xcopydel

xcopy /Y /S /I "U:\REVIT\REVIT FAMILES\*.00*.rfa" "U:\REVIT\Revit Backup Files"
del /S "U:\REVIT\REVIT FAMILES\*.00*.rfa"

/Y选项强制覆盖现有的目标文件。当您将其更改为/-Y以获得提示时,del不关心选择,仍会删除所有匹配的源文件。

最后,第三种选择是使用for循环:

set "TARGET=U:\REVIT\Revit Backup Files"
pushd "U:\REVIT\REVIT FAMILES"
for /F "tokens=2 delims=:" %%F in ('xcopy /L /S /Y /I "*.00*.rfa" "%TARGET%"') do (
    2> nul md "%TARGET%\%%F\.."
    move /-Y "%%F" "%TARGET%\%%F"
)
popd

xcopy /L只是将建议的文件列为相对于源目录的路径,但实际上并未复制(由于/L)。每个迭代文件都由move命令移动;如果目标文件已存在,/-Y会强制提示。创建目标目录中的每个子目录都需要md命令,2> nul会在出现错误消息时禁止显示错误消息。

不保留目录层次结构

再次需要for循环,但这次dir /B /S取代xcopy /L

for /F "tokens=2 delims=:" %%F in ('dir /B /S /A:-D "U:\REVIT\REVIT FAMILES\*.00*.rfa"') do (
    move /-Y "%%F" "U:\REVIT\Revit Backup Files\%%~nxF"
)

~nx修饰符从%%F中的路径中提取纯文件名(基本名称加扩展名)。