我似乎无法找到一个好的方法去做标题所说的。我需要将在各个子目录中找到的所有文件移动到具有匹配的子目录名称的另一个目录。我一直在使用的代码是:
@echo off
IF EXIST path.txt del /f path.txt
:: Above line for test only
for /f %%i in ('DIR /a:d /b "C:\ProgramData\Test\WTM\Source"') do (
echo %%i >>path.txt
)
::Pull sub-directory name from working folder
for /f "delims=" %%a in ('DIR /s /a-d /b "C:\ProgramData\Test\WTM\Source"') do (
for /F %%b in (path.txt) do (
move /y "%%a" "C:\ProgramData\Test\WTM\Destination\%%b\*.*"
)
)
PAUSE
我要做的是拉取子目录名称(因为目标中可能有一些可能会丢失),找到要在源目录中移动的所有文件,然后使用以前将子目录名称拉到相应子目录名下的目标目录。所以拉
C:\ProgramData\Test\WTM\Source\123\123.txt,
C:\ProgramData\Test\WTM\Source\456\9681.txt,
C:\ProgramData\Test\WTM\Source\789\1941.txt,
etc...
并将这些文件移至
C:\ProgramData\Test\WTM\Destination\123\123.txt,
C:\ProgramData\Test\WTM\Destination\456\9681.txt,
C:\ProgramData\Test\WTM\Destination\789\1941.txt,
etc...
我的代码永远无法正常运行,错误会因我更改的内容而有所不同,但通常我无法将%%b
作为子目录名称传递而不是%b
,或者我可以使用参数(设置set %%i = path
然后将%%b
替换为%path%
)使其工作,但之后它只将文件复制到最后一个子目录而不是所有这些都归因于我如何在那里使用set
命令。
我需要一些指示,我似乎无法让它做我想做的事。任何和所有指针都表示赞赏!万分感谢!
答案 0 :(得分:0)
我知道您将此标记为批处理,但正如@FlorianStraub所提到的,您可以使用robocopy将一个目录镜像到另一个目录:
robocopy *.* "C:\src" "C:\dest" /E
要打破此命令:
*.*
表示要复制所有文件"C:\src"
是您的源目录,而"C:\dest"
是您的目标目录。/E
标志表示递归复制所有文件夹,并包含空文件夹。尝试从命令行运行robocopy /?
以查看更多选项。
如果您的dest
目录包含您想要删除的额外文件,请使用/MIR
标记以1对1镜像源目录到目标。也就是说,它将删除目标中不存在于源中的任何文件。