Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Удаление всех файлов (всех типов) из всех подпапок, кроме расширений txt (http://forum.oszone.net/showthread.php?t=295403)

kot318 12-02-2015 08:22 2470199

Удаление всех файлов (всех типов) из всех подпапок, кроме расширений txt
 
Здравствуйте, у нас в институте нужно удалять из общей папки сервера все файлы кроме текстовых.

Не удаляет скрытые файлы, хотя /A: RSHAIL ключ H удаления скрытых есть.
И ещё он не удаляет файлы во вложенных папках

Помогите пожалуйста сделать на bat или vbs?
вот мой пример:

Код:

chcp 1251

@set %%a
@for %%a in ("C:\общая папка кафедры\*.*") do (if /i "%%~xa" neq ".txt" del /F /S /Q /A: RSHAIL "%%a")
pause


Iska 12-02-2015 09:05 2470218

Цитата:

Цитата kot318
chcp 1251 »

Это лишнее. Необходимо и достаточно сохранить пакетный файл в кодировке OEM/866.

Примерно так:
Код:

@echo off
setlocal enableextensions enabledelayedexpansion

for /f "usebackq delims=" %%i in (
        `2^>nul dir /b /s /a:-d "E:\Песочница\0433\*.*"`
) do if /i "%%~xi" neq ".txt" echo del /f /q /a "%%~fi"

endlocal
exit /b 0

Для реального удаления уберите выделенное.

Foreigner 12-02-2015 09:13 2470221

kot318,
Код:

@echo off
setlocal
1>nul chcp 1251

set "command=dir /b /s /a-d "C:\общая папка кафедры" | findstr /v ".*\.txt$""
for /f "tokens=*" %%i in (' "%command%" ') do del /a "%%i"


Iska 12-02-2015 10:00 2470236

Foreigner, да, это ещё быстрее. А я опять забыл в своём коде про «/a» . Добавил.

megaloman 12-02-2015 10:27 2470246

После подсказки Foreigner мой батник принял вид
Код:

@Echo Off
FOR /F "usebackq delims=" %%f IN (`Dir "E:\ddddDDdddddddddddddddd\*.*" /s /b /A:-D 2^>Nul`) DO Call :DFile "%%f"
GoTo :Eof

:DFile
Set Ext=11111%~x1
If "%Ext:~-4%"==".txt" GoTo :Eof

Del %1 /A /F >nul 2>nul

У Iska, Foreigner как-то элегантнее :-(

kot318 12-02-2015 10:51 2470256

Цитата:

Цитата Iska
Цитата kot318:
chcp 1251 »
Это лишнее. Необходимо и достаточно сохранить пакетный файл в кодировке OEM/866.
Примерно так:
Код:
@echo off
setlocal enableextensions enabledelayedexpansion
for /f "usebackq delims=" %%i in (
`2^>nul dir /b /s /a:-d "E:\Песочница\0433\*.*"`
) do if /i "%%~xi" neq ".txt" echo del /f /q /a "%%~fi"
endlocal
exit /b 0
Для реального удаления уберите выделенное. »


Спасибо всем, первый пример работает просто идеально после того как добавили A (наконец то удалил скрытые файлы), второй не удаляет если в расширении 4 символа, третий ещё не успел проверить.
Подскажите пожалуйста а как сделать чтобы этот запущенный скрипт срабатывал каждые 5 секунд?
А то я через планировщик Windows (Task Sheduler) я попробовал назначить, а там минимум минута:(

Foreigner 12-02-2015 11:33 2470270

Цитата:

Цитата megaloman
у меня с этим ключом readonly не удаляется »

ключ /f (del /a /f)

Iska 12-02-2015 12:59 2470309

Цитата:

Цитата kot318
после того как добавили A (наконец то удалил скрытые файлы), »

Это коллеге Foreigner'у спасибо надо сказать — я опять про этот параметр забыл ;).


Цитата:

Цитата kot318
второй не удаляет если в расширении 4 символа, »

Странно, на взгляд — вроде как должен бы. Вы об этом коде?

Цитата:

Цитата kot318
А то я через планировщик Windows (Task Sheduler) я попробовал назначить, а там минимум минута »

Кажись, «ручками» можно подправить и на более короткий срок. Но зачем так часто?! Полагаю, будет заметная нагрузка при большом числе каталогов.

kot318 12-02-2015 13:14 2470317

Цитата:

Цитата Foreigner
set "command=dir /b /s /a-d »

Спасибо!

Цитата:

Цитата Iska
второй не удаляет если в расширении 4 символа, »
Странно, на взгляд — вроде как должен бы. Вы об этом коде? »

Да, сейчас проверил, я был не прав, он удалил все пробные файлы кроме файла только на чтение.
Вот почему он его оставил, не потому что 4 символа, а потому что в свойствах только на чтение, простите невнимательность.
Вообще с этими файлами только на чтение и скрытый сплошные проблемы.

Цитата:

Цитата Iska
Цитата kot318:
А то я через планировщик Windows (Task Sheduler) я попробовал назначить, а там минимум минута »
Кажись, «ручками» можно подправить и на более короткий срок. Но зачем так часто?! Полагаю, будет заметная нагрузка при большом числе каталогов. »

Преподаватель хочет, чтобы студенты не ложили другие в папку заданий, кроме текстовых.
Там для лабораторных работ папка.
Недавно он поймал вирус шифровальщик и тот перепортил всё что было, антивирус не помог.
Вот такие дела, важного ничего не было, но обидно очень, ведь его кто-то потом запустил двойным кликом.
Сейчас стоит задача защититься от двойного клика по непонятному файлу.

Есть ли какой-нибудь способ заставить крутиться ваш код на сервере каждые пять секунд?
Может быть из автозагрузки запуcтить vbs а в нём типа такого?

(Этот скрипт vbs лежит в атозагрузке и заставляет почту быть вечно запущенной, сколько бы её не закрывали):
Код:

Dim WshShell

set WshShell = WScript.CreateObject("WScript.Shell")
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")

do'бесконечный цикл

Set colProcesses = objWMIService.ExecQuery _ 
("Select * from Win32_Process Where Name = 'OUTLOOK.EXE'")
If colProcesses.Count = 0 Then 
Set colProcesses = Nothing  'вызывает удаление объекта из памяти и вообще его уничтожение.
WshShell.Run "OUTLOOK"
Else 
'Wscript.Echo " OUTLOOK.EXE Запущен."
End If
 
 
 wscript.sleep 10000 '  пауза, 10000 = 10 секунд.

loop' конец бесконечного цикла

И вот ещё вопрос, если VBS каждые 5 секунд будет вызывать батник, это ведь огромная нагрузки на жёсткий диск?!,
Может ли в батнике запущенном этот код выполняться бесконечно?

kot318 12-02-2015 14:16 2470357

Моя задача решилась.
Огромное ВСЕМ спасибо!!! Ваш форум лучший.

Код:

chcp 1251
@echo off
setlocal enableextensions enabledelayedexpansion
:loop
for /f "usebackq delims=" %%i in (
        `2^>nul dir /b /s /a:-d "E:\общая папка тест\*.*"`
) do if /i "%%~xi" neq ".txt" del /f /q /a "%%~fi"
ping -n 2 127.0.0.1 > NUL
goto loop


Iska 12-02-2015 15:48 2470398

Цитата:

Цитата kot318
ping -n 2 127.0.0.1 > NUL »

Ежесекундно? Зачем?!!


Время: 20:26.

Время: 20:26.
© OSzone.net 2001-