我有一个批处理命令,可以将某些文件从一个文件夹移动到另一个文件夹,如下所示:
move /-y "U:\REVIT\REVIT FAMILES\*.00*.rfa" "U:\REVIT\Revit Backup Files"
pause
这会将创建并具有.001.rfa
,.002.rfa
等扩展名的备份文件移动到另一个文件夹,但它只会移动该特定文件夹中的文件,并且不会从子文件夹中移动任何文件也存在。有人可以帮忙添加这个功能吗?
答案 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
选项可防止覆盖。请注意,没有提示。删除它们以强制覆盖已存在的目标文件。
或者,您可以使用xcopy
和del
:
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
中的路径中提取纯文件名(基本名称加扩展名)。