лишние файлы robocopy перемещаются в другую папку - PullRequest
1 голос
/ 26 января 2012

Я пытаюсь написать пакет для копирования всех файлов (в том числе и в подпапках) из каталога 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

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

Делаем это немного яснее:

Предположим, что каталог1 содержит:

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

и каталог2 уже содержит:

\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

Надеюсь, я прояснил это достаточно:)

1 Ответ

1 голос
/ 27 января 2012

Вы можете использовать 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...