Пакетный скрипт для копирования / удаления папок, соответствующих определенному имени и сохранения их дерева каталогов
Мне интересно, можно ли написать пакетный скрипт для 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/etc.
Заранее спасибо, Джо
Вот ответ на мой вопрос, используя просто 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 ответ:
Вот ответ на мой вопрос, используя просто xcopy и batch описание:
@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
Кредиты идут на: рекурсивное переименование имен файлов + имен папок с помощью пакетного файла
Вот так все и делается!