Войти

Показать полную графическую версию : [решено] Перемещение файлов с исключением по пути.


Xarien
06-06-2013, 15:39
Есть Батник по поиску и перемещению определённых типов файлов (по расширению) с системного диска на сетевой диск.
Есть список папок исключения.


@echo on
del %SystemDrive%\*.tmp /f /s /q
ping -n 5 127.0.0.1 > NUL
ping -n 5 127.0.0.1 > NUL
ping -n 5 127.0.0.1 > NUL
MD Y:\Clean\%USERNAME%
If Not Exist "Y:\Clean" (
Exit
)
cacls "Y:\Clean\%USERNAME%" /E /G %USERNAME%@domainname.local:F
cacls "Y:\Clean\%USERNAME%" /E /R domainname\DomainUsers
for /d %%a in (%SystemDrive%\*) do (set "$a=%%a"
SetLocal EnableDelayedExpansion
if /i not "!$a:~3!"=="Windows" if /i not "!$a:~3!"=="Program Files" if /i not "!$a:~3!"=="Miranda" (
pushd "!$a!\" && (for /f "delims=" %%A in ('"dir/b/s/a-d *.mp3 *.rar *.zip *bak 2>Nul"') do (
xcopy /s /y /h /i "%%A" "Y:\Clean\%USERNAME%%%~pA">Nul && del /f /s /q "%%A"

)
popd))
copy /y %SystemDrive%\*.mp3* Y:\Clean\%USERNAME%
copy /y %SystemDrive%\*.rar* Y:\Clean\%USERNAME%
copy /y %SystemDrive%\*.zip* Y:\Clean\%USERNAME%
copy /y %SystemDrive%\*.bak* Y:\Clean\%USERNAME%
del /q %SystemDrive%\*.mp3 %SystemDrive%\*.rar %SystemDrive%\*.zip %SystemDrive%\*.bak
EndLocal)
%SystemDrive%
cd "%temp%"
del /f /s /q *.*


Проблема в следующем. Исключения по папкам работают только в том случае, если они находятся в корне диска.

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

Примеры исключений которые должны работать:
C:\Documents and Settings\All Users\Application Data\Microsoft\OFFICE\DATA\OPA12.bak
C:\Documents and Settings\USERNAME\Local Settings\Application Data\Programs\Opera\skin\standard_skin.zip

Подскажите пожалуйста, как это сделать, что бы не сильно переписывать существующий Bat файл.

Заранее благодарен:)

Xarien
12-06-2013, 23:55
Граждане. Неужели никто не в силах мне помочь? :(

Foreigner
13-06-2013, 07:31
Почитайте справку по xcopy, он умеет исключения.

xcopy /e "SourcePath" "DestPath\" /exclude:exclude.txt

В exclude.txt пишите ваши исключения -- может быть название файла, часть пути, расширение. Для каждого исключения отдельная строка.

\OFFICE\DATA\OPA12.bak
\Opera\skin\standard_skin.zip

Xarien
13-06-2013, 15:20
Foreigner, Спасибо. Почти получилось. Проблема в том, что для файлы всё равно удаляются. Они не копируются. Это работает. Но надо, что бы они и не удалялись.

Xarien
13-06-2013, 16:16
Разобрался. Спасибо:)

Хотя остался ещё вопрос. Предполагается читска по всем локальным дискам. не помню метку, к сожалению..
Но.. можно ли как-то отличить флэшку от локального диска срадствами командной строки?

Iska
13-06-2013, 16:42
Если она — съёмное устройство, то можно: Win32_LogicalDisk class (Windows) (http://msdn.microsoft.com/en-us/library/windows/desktop/aa394173(v=vs.85).aspx).
wmic.exe LogicalDisk get Name, DriveType

Xarien
14-06-2013, 17:22
немного не понятно, как исключить её из сканирования ?

Xarien
20-06-2013, 07:44
Благодаря Foreigner, тема была решена.Правда немного в другой теме. http://forum.oszone.net/post-2171004.html#post2171004 :)


Решение

@echo on
del %SystemDrive%*.tmp /f /s /q
ping -n 5 127.0.0.1 > NUL
ping -n 5 127.0.0.1 > NUL
ping -n 5 127.0.0.1 > NUL
MD Y:Clean%USERNAME%
If Not Exist "Y:\Clean" (
Echo Otsutstvet Setevoi Disk: Y:Clean

del c:exclude.txt
del %0
pause&Exit
)
cacls "Y:\Clean\%USERNAME%" /E /G %USERNAME%@domainname.com:F
cacls "Y:\Clean\%USERNAME%" /E /R domainnamedomainUsers
setlocal

set "wmic=wmic logicaldisk where drivetype=3 get name /value"

:: Определяем локальные диски
for /f "tokens=2 delims==" %%i in (' "%wmic%" ') do call:1 %%i

:: Что-то делаем со список папок из корня каждого локального диска
for /f "tokens=2,5 delims=?:=" %%i in (' set folder? ') do (

xcopy /s /y /h /i "%%i:%%j\*.aaa" "Y:\Clean\%USERNAME%\%%i\%%~nxj\"
xcopy /s /y /h /i "%%i:%%j*.bbb" "Y:Clean%USERNAME%%%i%%~nxj"
echo del /s "%%i:%%j*.aaa"
echo del /s "%%i:%%j*.bbb"



)

setlocal

set "wmic=wmic logicaldisk where drivetype="3" get name"

Set NoDelete=C:\exclude.txt
@Echo %0 >%NoDelete%

@Echo \OFFICE\ >>%NoDelete%
@Echo \Windows\ >>%NoDelete%
@Echo \skin\ >>%NoDelete%
@Echo \Program Files\ >>%NoDelete%
@Echo \Program Files (x86)\ >>%NoDelete%
@Echo \totalcmd\ >>%NoDelete%

for /f %%i in (' "%wmic%" ') do if exist %%i (

for %%j in (.aaa .bbb .ccc .ddd .xxx .yyy .jjj) do (

FOR /F "usebackq delims=" %%f IN (`xcopy /s /y /h /i "%%i*%%j" "Y:Clean%USERNAME%" /L /EXCLUDE:%NoDelete%`) DO Del "%%f"
)
)

goto:eof

:1

pushd %1

:: Исключаем из корня диска скрытые и системные папки
for /f "tokens=*" %%i in ('dir /b /ad-s-h') do set "folder?%1%%~snxi=%%~fi"

:: А так же те папки, которые надо исключить (их указывать короткими именами)
for %%i in (PROGRA~1,PROGRA~2,Windows,Users,MUSIC) do set "folder?%1%%i="

:: Копируем/удаляем файлы из корня локальных дисков
for /f "tokens=1 delims=:" %%i in ("%1") do (

xcopy /y /h /i *.aaa "Y:Clean%USERNAME%%%i"
xcopy /y /h /i *.bbb "C:Clean%USERNAME%%%i"
echo del *.aaa
echo del *.bbb

)

popd




© OSzone.net 2001-2012