将文件夹中的文件批量移动到新创建的文件夹

时间:2012-12-28 13:29:48

标签: batch-file directory move subdirectory

我想将某些文件夹中的所有文件移动到同一文件夹中新创建的文件夹中。为便于理解,请参阅下面的示例(输入显示为左侧,输出显示为右侧):

C:\1\A\file1.tif            C:\1\A\Named\file1.tif
       file2.tif                         file2.tif
       file3.tif     ==>                 file3.tif
C:\1\B\file1.tif            C:\1\B\Named\file1.tif
       file2.tif                         file2.tif
       file3.tif                         file3.tif

在上面的示例中,我只显示了每个文件夹中的前三个文件,但总数可能会有所不同(通常每个文件夹有1000个文件)。此外,我只显示了两个文件夹(A和B),但文件夹总数也可能不同(通常约10个文件夹)。最后,我只显示了文件夹“1”,但这些文件夹的数量也可能不同(通常为“1”到“10”)。所以我期待一个脚本可以独立于文件或文件夹的数量执行这些操作,并且独立于文件夹/文件的名称(我选择'1','A'和'file1.tif'仅作为示例)。

我的想法是,现在,我必须手动创建文件所在的每个文件夹(上例中的“A”和“B”)中的空文件夹(在上例中称为“命名”)。然后我必须手动将所有文件移动到新创建的文件夹'Named'。我必须为所有文件夹(大约100)执行此操作。如果我只需要做一次,我可以手动完成整个过程,但问题是我必须多次执行此过程:-)。因此,自动化可以节省大量时间。

有没有人知道可以执行此操作的脚本?非常感谢!

2 个答案:

答案 0 :(得分:1)

在命令文件

中测试了一点,这可能有用

使用这些行创建cmd文件

for /r %%a in (*.*) do  call :singlecopy %%a
goto :eof

:singlecopy
set src=%~p1
set dst=%~p1NAMED
set file=%~n1%~x1
rem replace NAMED in src with nothing
set srctst=%src:NAMED=%
rem if src and srctst are still the same, copy 
if %srctst%==%src%  robocopy %src%  %dst% %file% /move /create
goto :eof

答案 1 :(得分:0)

经过全面测试,这很有效。但是,由于文件很多,您可能需要设置一个小测试环境,就像在您的示例中一样,首先使用它,然后再将其用于实际数据。

setlocal enabledelayedexpansion
cd C:\rootfolder
for /f "tokens=*" %%a in ('dir /s /b /a:d') do (
attrib "%%a\*.*" | find "File not found"
if !errorlevel!==1 (
if not exist "%%a\Named" md "%%a\Named"
xcopy "%%a\*.*" "%%a\Named"
del "%%a\*.*" /f /q
)
)