Как рекурсивно скопировать файлы, находящиеся в каталоге, в другой каталог в Windows?

Мне нужно создать скрипт для копирования файлов из структуры папок в другую.

Моя структура исходных папок похожа на эту:

-RootFolder
    --ParentFolder1
      --SubParentFolder1
           --ToCopy
                    /*Here are the files to copy*/
      --SubParentFolder2
    --ParentFolder2
      --OtherSubParentFolder
           --ToCopy
                    /*Here are the files to copy*/
    --ParentFolder3
      --OtherSubParentFolder2

Я хочу скопировать файлы из папки «ToCopy» в другую папку со следующей структурой:

Структура папки назначения:

--TargetDirectory
     --SubParentFolder1
          //Here the files that were in the ToCopy folder inside the SubParentsFolder1
     --OtherSubParentFolder
          //Here the files that were in the ToCopy folder inside the OtherSubParentFolder

Обратите внимание, что я использую имя родительской папки «ToCopy» в подпапках назначения.

Я знаю, как бы я сделал это с помощью кода (например, C #), но я не знаю, как добиться этого с помощью пакетного файла. Это вообще возможно? Или мне нужно будет использовать что-то вроде powershell?

Как я могу скопировать свои файлы в соответствии с описанной мной структурой?

Не могли бы вы сообщить мне, почему вы минусуете мой вопрос?   —  person Dzyann    schedule 29.05.2014

См. также:  Вывод Console.WriteLine из приложений Windows WPF в фактическую консоль
Понравилась статья? Поделиться с друзьями:
IT Шеф
Комментарии: 2
  1. Dzyann

    Я думаю, это должно сработать…

    $Folder= gci -path "d:\pstest" -recurse -Filter "ToCopy" | where { $_.psiscontainer } 
    Foreach ($Foldername in $Folder) {
    $Destinationfolder=$Foldername.Parent
    copy-item  $Foldername.fullname -Destination "d:\Outputfolder\$Destinationfolder" -recurse
    }
    
  2. Dzyann

    Привет, чтобы следовать, это сценарий, который я взломал (с помощью переполнения стека), который читает файлы из txt-документа, затем запрашивает ввод папки назначения, а также имя папки src, затем он просто идет и рекурсивно копирует все файлы в новую папку без сохранения старой структуры подпапок.

    Я обновлю это в будущем, добавив ссылку на человека, от которого я получил базовый шаблон для области администрирования, но имейте в виду, что после того, как вы щелкнете, пакетная обработка может работать, как если бы это был php-скрипт, тогда все имеет смысл. У меня ушел целый день на изучение каждой команды и альтернативы на SS64.com

    Главное, на что следует обратить внимание, это pushd "%~dp0", который я использую, чтобы убедиться, что пакет всегда использует мой текущий каталог в качестве корня.

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

    Извините, это просто пример того, как я его использую, но да, продолжайте и наслаждайтесь, надеюсь, это сработает для вас.

    @echo off
    CLS
    setlocal EnableDelayedExpansion
    REM Changes root path to relative of current bat folder
    pushd "%~dp0"
    
    
    REM finds files in provided .txt file and copies them to destination directory
    REM CHECK FOR ADMIN RIGHTS
    COPY /b/y NUL %WINDIR%\06CF2EB6-94E6-4a60-91D8-AB945AE8CF38 >NUL 2>&1
    IF ERRORLEVEL 1 GOTO:NONADMIN
    DEL %WINDIR%\06CF2EB6-94E6-4a60-91D8-AB945AE8CF38 >NUL 2>&1
    
    :ADMIN
    REM GOT ADMIN RIGHTS
    COLOR 1F
    ECHO Hi, %USERNAME%!
    ECHO Please wait...
    
    set /p DEST_DIR="Copy files to:"%=%
    set /p SEARCH_DIR="Copy files from:"%=%
    @echo.
    @echo Please check folder name for accuracy.
    @echo Copy files to: %DEST_DIR%
    @echo Copy files from: %SEARCH_DIR%
    set /p CORRECT_FOLDERS="Are these correct? (please check spelling) y/n:"
    if '%CORRECT_FOLDERS%'=='y' GOTO:YES_ANSWER
    if '%CORRECT_FOLDERS%'=='n' GOTO:NO_ANSWER
    COLOR 2F
    ECHO.
    PAUSE
    GOTO:EOF
    
    :NONADMIN
    REM NO ADMIN RIGHTS
    COLOR 4F
    ECHO.
    ECHO PLEASE RUN AS ADMINISTRATOR
    ECHO.
    pause
    GOTO:EOF
    
    :YES_ANSWER
    @echo.
    @echo you answered yes
    @echo.
    if exist %DEST_DIR% GOTO:READ_DATA
    if not exist %DEST_DIR% md %DEST_DIR%&GOTO:READ_DATA
    PAUSE
    
    :NO_ANSWER
    @echo.
    @echo you answered no 
    set /p TRY_AGAIN="Try again? y/n:"
    if '%TRY_AGAIN%'=='y' GOTO:YES_ANSWER
    if '%TRY_AGAIN%'=='n' GOTO:EXIT_PROGRAM
    PAUSE
    
    :EXIT_PROGRAM
    @echo.
    @echo "So Sorry"
    PAUSE
    GOTO:EOF
    
    :READ_DATA
    @echo.
    set /p GET_FILENAMES="What is the name of the text file your filenames are stored in?"%=%
    if exist %GET_FILENAMES%.txt @echo We will now read and copy the files for you, have some coffee might take awhile & GOTO:WRITE_DATA
    if not exist %GET_FILENAMES%.txt @echo Filename does not match, please type only the name without .txt extention & GOTO:READ_DATA
    PAUSE
    
    :WRITE_DATA
    @echo.
    @echo reading file name...
    for /f "usebackq delims=" %%a in ("%GET_FILENAMES%.txt") do (
        for /r "%SEARCH_DIR%" %%b in ("%%a*") do (
            @echo Copy Started...
            copy "%%b" "%DEST_DIR%\%%~nxb"
        )
    )
    @echo Copy finished, please review actions. Lekker Man.
    PAUSE``
    
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: