1

我想将某些文件夹中的所有文件移动到同一文件夹中新创建的文件夹中。为了更容易理解,请看下面的例子(输入显示在左边,输出显示在右边):

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

有谁知道可以做到这一点的脚本?非常感谢!

4

2 回答 2

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
于 2012-12-28T13:45:54.253 回答
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
)
)
于 2012-12-31T10:49:44.703 回答