robocopy лишние файлы перемещаются в другую папку

Я пытаюсь написать пакет для копирования всех файлов (в том числе и в подпапках) из каталога 1 в каталог 2, а затем перемещения любых дополнительных файлов (или каталогов, если это возможно), найденных в каталоге 2, в каталог 3. Другими словами, я пытаюсь отразить каталог2 с каталогом1, но вместо действия очистки перемещаю лишние файлы в каталог3...

До сих пор мне удавалось получить эти дополнительные файлы в текстовом файле... Теперь я не знаю, что делать дальше...

ROBOCOPY directory1 directory2 /E /COPYALL /R:0 /XO /X /tee /njh /njs /np /ns /nc /ndl > Extrafiles.txt

Кроме того, Extrafiles.txt содержит много дополнительных пробелов в начале каждого пути к файлу, что означает небольшую манипуляцию со строками перед перемещением файла. И какую команду использовать для перемещения файлов путем автоматического создания целевого каталога, если он не существует?

Пример вывода Extrafiles.txt

                directory2\File1.txt
                directory2\subdirectory2\deeper\File2.txt

Любая помощь будет оценена. Спасибо.

Сделаем немного понятнее:

Предположим, что directory1 содержит:

\subdir1
    file4.txt
    file5.txt
    \deeper
        file6.txt
        file7.doc
file1.txt
file2.txt

и directory2 уже содержит:

\subdir1
    file4.txt
    file007.ppt
    \deeper
        file6.txt
        file7.doc
        \deepest
            file155.txt
file1.txt

Затем я хочу, чтобы эти файлы были скопированы:

directory1\file2.txt to directory2\file2.txt
directory1\subdir1\file5.txt to directory2\subdir1\file5.txt

И затем эти файлы для перемещения:

directory2\subdir1\file007.ppt to directory3\subdir1\file007.ppt
directory2\subdir1\deeper\deepest\file155.txt to directory3\subdir1\deeper\deepest\file155.txt

Надеюсь, я достаточно ясно выразился :)


person Ajay Raghav    schedule 26.01.2012    source источник
comment
Я думаю, что вы должны иметь возможность делать все, что хотите, просто используя ROBOCOPY. Но я не совсем понимаю ваши требования. Если вы предоставите список того, как могут выглядеть небольшие гипотетические каталоги 1, 2 и 3 (включая хотя бы по одному подкаталогу для каждого), а затем покажете, как они должны выглядеть после завершения операции, то я или кто-то другой может быть лучше в состоянии помочь вам.   -  person dbenham    schedule 26.01.2012
comment
отредактировано! пожалуйста, перепроверьте...   -  person Ajay Raghav    schedule 27.01.2012


Ответы (1)


Вы можете использовать for для перебора содержимого файла, сгенерированного robocopy (см. for /?).

Затем вы можете использовать отложенное раскрытие и подстановку переменных для генерации целевого пути (см. set /?) и, наконец, вызвать подпрограмму, которая при необходимости сделает mkdir, а затем move (см. call /?).

Проект решения будет таким:

@echo off
setlocal enabledelayedexpansion

set srcdir=directory2
set tgtdir=directory3

for /f "usebackq tokens=*" %%A in ("Extrafiles.txt") do (
  set srcpath=%%A
  set tgtpath=!srcpath:%srcdir%=%tgtdir%!
  call :mkdirmove !srcpath! !tgtpath!
)

goto :EOF

:mkdirmove
  if not exist %~dp2nul mkdir %~dp2
  move %1 %2
goto :EOF
person MBu    schedule 26.01.2012