Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Ветеран


Contributor


Сообщения: 2735
Благодарности: 1699

Профиль | Отправить PM | Цитировать


Вот батник (то есть скрипт надо сохранить в файл с расширением .bat в 866 кодировке при наличии в тексте путей к файлам и папкам на русском языке). Из-за исключений получилось громоздко. Исключениями могут быть как файлы, так и папки целиком. Перед обработкой заданной папки исключения переносятся во временную папку, заданная папка обрабатывается, затем в ней восстанавливаются исключения, временная папка удаляется.
Код: Выделить весь код
@Echo Off

Set "InDir=Z:\Temp"
Set "Exc="_xcopy.txt" "JS_Host\Дискета от книги" "JS_Host\Из интернета\Листинг 1.htm""

Set "DSave=!%~nx0.tmp"

pushd "%InDir%"
attrib -r -s -h /S /D

Call :TmpRD "%InDir%" "%DSave%" 1

FOR %%E IN (%Exc%) DO Call :Save "%InDir%\%%~E" "%DSave%"

For /F "usebackq delims=" %%D In (`Dir "%InDir%\" /B /S /A:D 2^>nul^|Sort /R`) Do Call :DelDir "%%D" 
For /F "usebackq delims=" %%F In (`Dir "%InDir%\" /B /S /A:-D 2^>nul`) Do Call :DelFile "%%F" 

Call :Restore "%InDir%" "%DSave%"  

Call :TmpRD "%InDir%" "%DSave%"

GoTo :Eof

:TmpRD
	RD "%~d1\%~2" /S /Q 2>nul
	If "%3"=="1" MD "%~d1\%~2%~pnx1"
GoTo :Eof

:DelDir
	Set "DName=%~nx1"
	If Not "%DName:~0,1%"=="!" Rd %1 /S /Q
GoTo :Eof

:DelFile
	Set "FName=%~nx1"
	If Not "%FName:~0,1%"=="!" Del %1
GoTo :Eof

:Save
	For /F "usebackq delims=" %%f In (`Dir %1 /B /A:-D 2^>nul`) Do (
		If /I %1=="%~dp1%%f" (
			Md "%~d1\%~2%~p1" 2>nul
			Move /Y %1 "%~d1\%~2%~p1" >nul  
			GoTo :Eof
		)
	)

	Md "%~d1\%~2%~pnx1" 2>nul
	Move /Y "%~1\*.*" "%~d1\%~2%~pnx1\" >nul

	For /F "usebackq delims=" %%f In (`Dir %1 /B /S /A:D 2^>nul`) Do (
		Md "%%~df\%~2%%~pnxf" 2>nul
		Move /Y "%%f\*.*" "%%~df\%~2%%~pnxf\" >nul
	)
GoTo :Eof

:Restore
	xcopy "%~d1\%~2%~pnx1\*.*" "%~1\" /E /Y >nul
GoTo :Eof
Здесь для примера:
Z:\Temp - обрабатываемая папка
Исключения:
_xcopy.txt - файл в обрабатываемой папке, то есть Z:\Temp\_xcopy.txt
JS_Host\Дискета от книги - папка, то есть Z:\Temp\JS_Host\Дискета от книги
и т д, уровень вложенности папок и файлов исключений любая
Не исключаю, что после обработки некоторые папки будут пустыми, я их не удалял, если они соответствуют условию поставленной задачи
Cделана доработка с учетом наличия скрытых, системных и только для чтения файлов. Перед обработкой все эти атрибуты сбрасываются. Если это не устраивает, придётся радикально переделывать код.

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 03-11-2016 в 21:21. Причина: Доработка с учетом наличия скрытых, системных и только для чтения файлов

Это сообщение посчитали полезным следующие участники:

Отправлено: 18:49, 03-11-2016 | #4