Пакетный скрипт для копирования / удаления папок с определенным именем и сохранением их дерева каталогов - PullRequest
2 голосов
/ 24 мая 2011

Мне интересно, можно ли написать пакетный скрипт для CMD.EXE (Целевая система: MS Windows 2k3) для выполнения следующих действий:

Пусть у нас будет папка rootfolder, содержащая много файлови каталоги.Некоторые из подкаталогов (на разных уровнях) могут называться dirname.Я хотел бы создать папку rootfolder2, копирующую структуру дерева каталогов rootfolder, но содержащую только папки dirname с их содержимым.Я также хотел бы удалить те же папки после их копирования в rootfolder2

Пример:

rootfolder
 `- dir1
 `- dir2
     `- filew
     `- dirname
         `- filey
 `- dirname
     `- file1
     `- dirx
         `- file2
 `- filez

И вывод, который я ищу, будет:

rootfolder
 `- dir1
 `- dir2
     `- filew
 `- filez

rootfolder2
 `- dir2
     `- dirname
         `- filey
 `- dirname
     `- file1
     `- dirx
         `- file2

Могу ли я сделать это без необходимости писать консольное приложение на C / C ++ / Java / и т.д.

Заранее спасибо, Джо


Вот ответ на мой вопросиспользуя просто xcopy и пакетный сценарий:

@echo off
setlocal ENABLEDELAYEDEXPANSION
set StartDir=Folder1
set BackupDir=Folder1 BK
mkdir "%BackupDir%"
call :ProcessDir "%StartDir%"
exit /b 0
:ProcessDir
    echo Processing directory "%~1"
    for /f "delims=" %%d in ('dir /ad /b "%~1"2^>nul') do (
        if "%%d"=="foldername" ( 
            xcopy /s /e /i "%~1\%%d" "%BackupDir%\%~1\%%d" 
            rmdir /S /Q "%~1\%%d"   
        ) else ( 
            call :ProcessDir "%~1\%%~d"
        )
    )
    exit /b 0

кредиты идут на: рекурсивное переименование имен файлов + имена папок с пакетным файлом

1 Ответ

0 голосов
/ 27 сентября 2015

Вот ответ на мой вопрос с использованием простого xcopy и пакетного скриптинга:

@echo off
setlocal ENABLEDELAYEDEXPANSION
set StartDir=Folder1
set BackupDir=Folder1 BK
mkdir "%BackupDir%"
call :ProcessDir "%StartDir%"
exit /b 0
:ProcessDir
    echo Processing directory "%~1"
    for /f "delims=" %%d in ('dir /ad /b "%~1"2^>nul') do (
        if "%%d"=="foldername" ( 
            xcopy /s /e /i "%~1\%%d" "%BackupDir%\%~1\%%d" 
            rmdir /S /Q "%~1\%%d"   
        ) else ( 
            call :ProcessDir "%~1\%%~d"
        )
    )
    exit /b 0

кредиты идут на: рекурсивное переименование имен файлов + имена папок спакетный файл

Таким образом, это сделано!

...