Войти

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


Страниц : [1] 2

serjei
12-07-2011, 13:50
Всем привет, есть такой вот батник:
@echo off
For /R C:\ %%i in (*.mp3,*.jpg,*.jpeg,*.avi,*.mov) Do (
Del /q "%%i")

Подскажите как можно сделать так что бы этот батник работал но не удалял ничего в папке C:\Shared
Если через бат такое нельзя, то если не затруднит выложите на другом языке, подходящем для logon скрипта win 2k3.

amel27
12-07-2011, 15:48
что бы этот батник работал но не удалял ничего в папке C:\Shared »такой вариант:
for /d %%a in ("C:\*") do if /i not "%%a"=="C:\Shared" (del/s/q %%~sa\*.mp3 %%~sa\*.jpg %%~sa\*.jpeg %%~sa\*.avi %%~sa\*.mov
)

serjei
13-07-2011, 04:56
Работает, только в корне диска С:/ не удаляет ничего.

amel27
13-07-2011, 05:29
в корне диска С:/ не удаляет »добавить отдельную строку для этого случая:
for /d %%a in (C:\*) do if /i not "%%a"=="C:\Shared" del/s/q %%~sa\*.mp3 %%~sa\*.jpg %%~sa\*.jpeg %%~sa\*.avi %%~sa\*.mov
del /q C:\*.mp3 C:\*.jpg C:\*.jpeg C:\*.avi C:\*.mov

serjei
13-07-2011, 09:44
Большое спасибо.

serjei
01-08-2011, 06:57
Подниму тему, дабы не плодить)) А как вместо удаления сделать перемещение файлов в сетевую папку на основе этого батника? Так что бы он сканил по расширению и перемещал эти файлы на сетевую папку.

amel27
01-08-2011, 10:58
serjei, на основе этого батника не получится - в отличии от DEL, команда MOVE НЕ может:

- самостоятельно обрабатывать подкаталоги;
- принимать в командной строке несколько параметров - шаблонов имен файлов

Поэтому, требуется максимально конкретная постановка новой задачи: ЧТО и КУДА перемещать... Кстати, при перемещении из разных подкаталогов имена файлов могут совпасть, как быть в этом случае?.. На форуме неоднократно поднимались похожие темы, для примера:

CMD/BAT - [решено] Батник сбора файлов из поддиректорий в общую папку (http://forum.oszone.net/showthread.php?p=1047075)
CMD/BAT - [решено] Перемещение и удаление файлов по условию и маске (http://forum.oszone.net/showthread.php?p=1179744)

serjei
01-08-2011, 11:16
Собственно нужно все .mp3 .jpg и проч удалять на компах юзверей. Но собственно не все пользователи перенесли рабочие фото на сервер, так вот чтоб не нароком ничего лишнего не удалить, первое время я хотел скидывать все доки на сервер, и если там что важное, то вернуть хозяину с "бонусом" за внимательность. Этот батник который все удаляет, сканит ведь винты по маске и удаляет, а мне нужно что бы он так же сканил винты но не удалял а переносил все на сервер.

http://forum.oszone.net/showthread.php?p=1179744 вот этот подходит вроде, но я со своими познаниями врядли интерпретирую)) Может кто поможет в этом деле?

amel27
01-08-2011, 14:17
serjei, вариант с сохранением исходной структуры каталогов,
для каждого ПК на сервере создается своя папка с таким же именем:
@echo off
set SHARE=\\MyServer\BACKUP

for /d %%a in (C:\*) do (set "$a=%%a"
SetLocal EnableDelayedExpansion
if /i not "!$a:~3!"=="Shared" if /i not "!$a:~3!"=="Windows" if /i not "!$a:~3!"=="Program Files" (
pushd "!$a!\" && (for /f "delims=" %%A in ('"dir/b/s/a-d *.jpg *.mp3 2>Nul"') do (
xcopy/q/y/z/v "%%A" "%SHARE%\%ComputerName%%%~pA">Nul && del/f/q "%%A")
popd))
EndLocal)

serjei
02-08-2011, 04:52
Спасибо))

serjei
03-08-2011, 12:13
Вдруг вот при выполнении появилось это
@echo off
for /d %%a in (C:\*) do if /i not "%%a"=="C:\Windows" "C:\Program Files" (del/s/q %%~sa\*.mp3 %%~sa\*.jpg %%~sa\*.jpeg %%~sa\*.avi %%~sa\*.mov)

неожиданное появление: %%a.

del /q C:\*.mp3 C:\*.jpg C:\*.jpeg C:\*.avi C:\*.mov

Хотя при тестах все удалялось, что на тестовой, что на рабочей машине.

amel27
03-08-2011, 13:01
for /d %%a in (C:\*) do if /i not "%%a"=="C:\Windows" "C:\Program Files" »гм.. эт конечно неправильно, но в моём коде нет такого...
способ получения полного лога: http://forum.oszone.net/post-1675364-18.html

serjei
03-08-2011, 13:48
@echo off
for /d %%a in (C:\*) do if /i not "%%a"=="C:\Windows" "C:\Program Files" (del/s/q %%~sa\*.mp3 %%~sa\*.jpg %%~sa\*.jpeg %%~sa\*.avi %%~sa\*.mov)
del /q C:\*.mp3 C:\*.jpg C:\*.jpeg C:\*.avi C:\*.mov

for /d %%a in ("D:\*") do if /i not "%%a"=="D:\Shared" (del/s/q "%%~sa\*.mp3" "%%~sa\*.jpg" "%%~sa\*.jpeg" "%%~sa\*.avi" "%%~sa\*.mov")
del /q D:\*.mp3 D:\*.jpg D:\*.jpeg D:\*.avi D:\*.mov

for /d %%a in ("E:\*") do if /i not "%%a"=="E:\Shared" (del/s/q "%%~sa\*.mp3" "%%~sa\*.jpg" "%%~sa\*.jpeg" "%%~sa\*.avi" "%%~sa\*.mov")
del /q E:\*.mp3 E:\*.jpg E:\*.jpeg E:\*.avi E:\*.mov


Это батник который запускаю.
Лог:
""C:\Program Files"" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.
""C:\Program Files"" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.
""C:\Program Files"" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.
""C:\Program Files"" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.
Не удается найти C:\*.mp3
Не удается найти D:\FM42XX~1.24\*.mp3
Не удается найти D:\Manuals\*.mp3
Не удается найти D:\Share\*.mp3
Не удается найти D:\Virtual\*.mp3
Удален файл - D:\6239~1\Акт титул.jpg
Удален файл - D:\6239~1\стр.1.jpg
Удален файл - D:\6239~1\стр.2.jpg
Не удается найти D:\*.mp3

я в общем совсем запутался))

amel27
03-08-2011, 14:29
serjei, может так?@echo off
for /d %%a in (C:\* D:\* E:\*) do (
if /i not "%%a"=="C:\Windows" if /i not "%%a"=="C:\Program Files" if /i not "%%a"=="D:\Shared" if /i not "%%a"=="E:\Shared" (
del/s/q %%~sa\*.mp3 %%~sa\*.jpg %%~sa\*.jpeg %%~sa\*.avi %%~sa\*.mov
))
P.S. используйте для кода/содержимого файлов и логов тег CODE... плз

serjei
04-08-2011, 05:18
спс, отпишусь по результатам.

P.S. используйте для кода/содержимого файлов и логов тег CODE... плз


Я в програмированнии полный ноль)) если можно то опишите подробней плз данное действие.

ferget
04-08-2011, 08:11
http://s53.radikal.ru/i142/1108/31/ac685e7a0672t.jpg (http://radikal.ru/F/s53.radikal.ru/i142/1108/31/ac685e7a0672.png.html)

serjei
04-08-2011, 09:40
Ах вон про что)) я то думал про другое.

serjei
05-08-2011, 16:23
А возможно ли исключить USB устройства из сканирования? даже если флешка имеет букву диска D или E.

iDrug
04-02-2012, 22:08
пожалуйста, напишите мне батник который бы
1. удалял все папки (вместе с их содержимым) внутри C:\windows\ у которых имя начинается с $NtUninstallKB и чтобы не было никаких запросов.
т.е. мне надо что-то типа
rd c:\windows\$ntuninstallkb* /s /q
но только в cmd rd не поддерживает * (в отличие от del).

2. удалял бы все папки внутри c:\WINDOWS\$hf_mig$\ но не её саму - на случай, если винда не догадается в след. раз её сначала создать, а также ради того, чтобы узнать как это наконец делается, ведь
rd c:\windows\$hf_mig$\* /s /q
нельзя использовать по вышеописанной причине.

Anonymоus
04-02-2012, 22:43
1.
For /F "delims=" %%D In ('Dir "%WinDir%\$ntuninstallkb*" /B /A:D') Do (RD /S /Q "%WinDir%\%%D")
2.
For /F "delims=" %%D In ('Dir "%WinDir%\$hf_mig$\" /B /A:D') Do (RD /S /Q "%WinDir%\$hf_mig$\%%D")




© OSzone.net 2001-2012