Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Программы » Командная строка, батники, сценарии (bat, cmd) 2

Модерирует : gyra, Maz

Widok (10-03-2009 12:39): Лимит страниц. Продолжаем здесь.  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108

   

Widok



Moderator-Следопыт
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Командная строка, батники\сценарии (bat, cmd)
(часть 1)
Вопросы, задачи и их решения по работе с командной строкой, файлами, а также сопутствующие ссылки.

 
Важно: копируя батник через буфер обмена из форума не забывайте удалять пробелы в конце каждой строки, т.к. в некоторых случаях из-за этого программа будет работать неправильно!!!
 
Примечание: Большие куски кода заключайте в тэг [more]  
 
Смежные темы:
В помощь системному администратору » Автоматизация администрирования
Microsoft Windows » Задачи на bat-файлах 5
 
Полезные ссылки:
· Cmd. Описание от разработчиков
· Урок bat-аники (для начинающих)
· Курс лекций для начинающих. Полезно и просто описано
· Набор GNU утилит для win32
· Пакет утилит для организации интерфейса в bat-файлах
· Использование ansi.sys
· cmdow — изменение параметров и видимости дос-окна
· blat — отправка почты из консоли
· Справка по командам в виде Html
· Команды RunDll32
· Quick Batch File Compiler - Позволяет превратить ваш батник в независимое приложение
· Пример - получение и обработка списка пользователей
· Уильям Станек - Командная строка Microsoft Windows (вплоть до w2k3)
· Простой способ получать текущую дату всегда в одном формате (не зависит от языков и настроек)
 
Старая версия первого сообщения

Всего записей: 24190 | Зарегистр. 07-04-2002 | Отправлено: 12:08 19-11-2007 | Исправлено: Dmitriy05, 22:49 13-04-2008
ViSiToR



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Elroir

Цитата:
Ключевая фраза в моем ответе - "не загружая операционную систему самой машины".

Я понял к чему это
 

Цитата:
Человек хочет удалить все темп директории, загрузившись с компакт-диска.

Тогда сорри, не внимательно прочёл запрос - Ну тогда вопрос/совет к lid111: Зачем удалять ВСЕ Temp? если речь про долгое сканирование, то полагаю можно было бы задать исключения для этого сканирования? если я не так всё понял, проигнорируйте это сообщение!

----------
ViSiToR a.k.a CreatoR
CreatoR это не ник, CreatoR это стиль жизни!

Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 18:52 22-02-2008
Elroir



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Wise_Kaa

Код:
 
@echo off
for /f "tokens=" %%a in ('tlist -p program') do set "out=%%a"
if "%out%"=="-1" goto not_found
echo found, the pid is %out%
goto :EOF
:not_found
echo not found
 


----------
"В интернете есть все, но не всегда"

Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 19:27 22-02-2008
lid111

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ViSiToR
Цитата:
Ну тогда вопрос/совет к lid111: Зачем удалять ВСЕ Temp? если речь про долгое сканирование, то полагаю можно было бы задать исключения для этого сканирования?

Поясняю свой вопрос, думаю, он гораздо проще: я прихожу к человеку, у которого на компе куча заразы. Как правило, лечение от вирусов проводится после загрузки со своего CD. Как правило, больше всего заразы сидит во временных папках интернета. Как правило, эти папки никто из непродвинутых обывателей не чистит. Если я тупо запускаю антивирусную программу на сканирование все[ дисков, я могу час-два наблюдать как эти временные папки сканируются. Плюс к тому, может быть набита чем-нибудь по самые уши папка Windows\Temp, а чем больше файлов, тем, опять же, больше время сканирования. Я хочу сократить антивирусную проверку, полагая, что удаление файла мимо корзины с помощью батника не менее эффективно, чем удаление его же антивирусной программой (поправьте, если ошибся).
 
Вот я и хочу: загрузиться с CD, и запустить для начала с того же CD или с флэшки свой батник, чтобы он мне вне зависимости от числа пользователей на данном компе снес на фиг содержимое внутри всех папок с именами Temp и Temporary Internet Files (т. е. для всех и для каждого пользователя внутри Document and Setting) плюс папку Windows\Temp. Или я чего-то не догоняю, но, наверное, достаточно задать маску *НАЗВАНИЕ ПАПКИ* и действие (но я не знаю настолько DOS). Или вы хотите сказать, что эти папки могут быть как-то защищены от очистки?

Всего записей: 1451 | Зарегистр. 15-09-2006 | Отправлено: 03:02 23-02-2008
ViSiToR



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
lid111

Цитата:
Вот я и хочу: загрузиться с CD, и запустить для начала с того же CD или с флэшки свой батник, чтобы он мне вне зависимости от числа пользователей на данном компе снес на фиг содержимое внутри всех папок с именами Temp и Temporary Internet Files (т. е. для всех и для каждого пользователя внутри Document and Setting) плюс папку Windows\Temp. Или я чего-то не догоняю, но, наверное, достаточно задать маску *НАЗВАНИЕ ПАПКИ* и действие (но я не знаю настолько DOS). Или вы хотите сказать, что эти папки могут быть как-то защищены от очистки?

 
Во-первых, это займёт намного больше времени, чем само сканирование (как подметил Elroir).
Нужно удалять все файлы в папках с именем Temp, при этом рекурсивно проходиться по ВСЕМ папкам диска C:\ (ну или каталога «Document and Setting», тоже не маленький объём). Это время.
 
По поводу защиты... да, может быть и такое, зависит от настроек и прав.
 
Вот пример..
 
Переменные обозначения:
%TmpPath% -> Путь «%CD%\test», это начальный каталог с которого будет делаться поиск и удаление. Заменить на нужный путь (к примеру на «C:\Document and Setting»).
%InStrVar% -> Строка «Temp», определяет что нужно искать в каждом пути каталога.
%FilesMask% -> *.*, определяет маску для удаления файлов.
 
 
Внимание!
Удаляться будут ВСЕ файлы в каталогах, имена которых содержат строку Temp.
Я не несу ни какой ответственности за возможно нанесённый вред вашим файлам  
 
 

Код:
@Echo Off
CHCP 1251 > Nul
 
Set TmpPath=%CD%\test
Set InStrVar=Temp
Set FilesMask=*.*
 
For /R "%TmpPath%" %%i In (.) Do Call :CheckTemp "%%i"
 
 
:CheckTemp
Set CurrDir=%~1
Set CurrDir=%CurrDir:~0,-2%
 
For %%a In ("%CurrDir%") Do Set "DirName=%%~nxa"
 
For /F "delims=" %%b In ('Echo %DirName%^| Find /I "%InStrVar%"') Do Set "DelPath=%CurrDir%\%FilesMask%"
 
If /I Exist "%DelPath%" (
    Del /Q /F "%DelPath%"
    ) Else (
    Exit /b 1
    )
 



----------
ViSiToR a.k.a CreatoR
CreatoR это не ник, CreatoR это стиль жизни!

Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 08:03 23-02-2008
lid111

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ViSiToR, спасибо за помощь. Я правильно понял, что в вашем примере Temp - это любая часть имени каталога, то есть в пример включены папки "Temporary ..."?
И неужели может быть вред? Если я делаю это вручную, из запущенной ОС, то мне не удастся удалить файл из папки, который в данное время используется. Если я загружаюсь с CD, то ни один из этих файлов не используется, значит, все могут быть удалены. Если какой-то программе нужны врем. файлы для работы, она после своего запуска их создаст по-новой. Или я неправ? Понимаю, что вопрос - уже оффтопик, извините, пожалуйста...
 
 
Добавлено:
ViSiToR
Цитата:
По поводу защиты... да, может быть и такое, зависит от настроек и прав.
Неужели эти права что-то значат для посторонней ОС?

Всего записей: 1451 | Зарегистр. 15-09-2006 | Отправлено: 21:57 23-02-2008 | Исправлено: lid111, 21:58 23-02-2008
Elroir



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
lid111

Цитата:
И неужели может быть вред?

Ну представь себе, например, что у человека на диске есть папка с названием Temptation (с красивыми девушками ). Код, который дал ViSiToR, сотрет оттуда все за милую душу. И таких промеров можно найти очень много. Не говоря уже о том, что поиск идет без учета регистра букв (то есть директория "very important templates" тоже будет стерта).

----------
"В интернете есть все, но не всегда"

Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 22:12 23-02-2008
ViSiToR



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
lid111

Цитата:
Temp - это любая часть имени каталога, то есть в пример включены папки "Temporary ..."?

Да, если нужно задать конкретные имена папок, то код нужно немного изменить.
 

Цитата:
Неужели эти права что-то значат для посторонней ОС?

Если она на системном диске (с которого загружена система), то значат.

----------
ViSiToR a.k.a CreatoR
CreatoR это не ник, CreatoR это стиль жизни!

Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 00:29 24-02-2008
lid111

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Хорошо, сужаю задачу (хотя, собственно, я и не пытался ее так масштабно расширять): Нужно удалить всё содержимое всех конкретных папок:
1) *\Documents and Settings\*\Local settings\Temp
2) *\Documents and Settings\*\Local settings\Temporary Internet Files
3) *\Windows\Temp
 
И только! Это моя последняя просьба по составлению (изменению ранее предложенного) батника.
 
ViSiToR

Цитата:
Если она на системном диске (с которого загружена система)

bat-файл на CD или на съемном носителе, Windows загружается с CD, файлы уничтожаются, принадлежащие другой системе, при чем тут разрешения, установленные в ней? Или я тупой, но опять не понял. Прошу не сердиться за переспрашивание, в принципе, можно на этот вопрос не отвечать, если не будет желания.
Меня больше волнует оконч. вариант батника (см. выше)

Всего записей: 1451 | Зарегистр. 15-09-2006 | Отправлено: 01:47 24-02-2008
ViSiToR



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
lid111

Цитата:
Нужно удалить всё содержимое всех конкретных папок:  
1) *\Documents and Settings\*\Local settings\Temp  
2) *\Documents and Settings\*\Local settings\Temporary Internet Files  
3) *\Windows\Temp

 

Код:
@Echo Off
CHCP 1251 > Nul
 
Set Path1=%UserProfile%\Local settings\Temp
Set Path2=%UserProfile%\Local settings\Temporary Internet Files
Set Path3=%SystemRoot%\Temp
 
Set FilesMask=*.*
 
Set /P Ask=Are you sure, delete ALL files in *Temp* directories (Temp, Temporary Internet Files)? (Y/N)
If /I Not "%Ask%"=="Y" Goto :EOF
 
Call :CleanDirProc "%Path1%"
Call :CleanDirProc "%Path2%"
Call :CleanDirProc "%Path3%"
 
GoTo :END
 
:CleanDirProc
Set DelPath=%~1\%FilesMask%
 
If /I Exist "%DelPath%" Del /Q /F "%DelPath%"
 
Exit /b 1
 
:END
Echo.
Echo Delete is done!

 

Цитата:
 при чем тут разрешения, установленные в ней?

Я про разрешение на запись/удаление файлов из жёсткого диска. Админ, или утилита подобного назначения может это ограничить.

----------
ViSiToR a.k.a CreatoR
CreatoR это не ник, CreatoR это стиль жизни!

Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 02:48 24-02-2008 | Исправлено: ViSiToR, 02:51 24-02-2008
Elroir



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ViSiToR

Цитата:
Set Path1=%UserProfile%\Local settings\Temp  
Set Path2=%UserProfile%\Local settings\Temporary Internet Files  
Set Path3=%SystemRoot%\Temp  

Ты забыл, что батник будет запускаться в системе, запущенной с компакт-диска. То есть если переменаая %UserProfile% (и %SystemRoot% тоже)  и будет существовать, то указывать она будет на тот же самый компакт-диск. А кроме того, lid111-у нужно очищать папки ВСЕХ юзеров операционной системы, установленной на жестком диске.
А если предположить, что OS установлена не на диске C...


----------
"В интернете есть все, но не всегда"

Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 03:21 24-02-2008
01MDM



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
lid111
Сразу оговорюсь - не тестировал

Код:
 
@echo off
setlocal
echo Start....
for %%i in (Q W E R T Y U I P O A S D F G H J K L Z X C V B N M) do (
        if not %~d0==%%i: call:clean %%i
)
echo ....Done
goto:eof
 
:clean
if exist %1:\Windows\Temp (del /s /a /q %1:\Windows\Temp\* 1>nul 2>&1)
if exist %1:\WinNT\Temp (del /s /a /q %1:\WinNT\Temp\* 1>nul 2>&1)
if exist "%1:\Documents and Settings" (
    for /d %%i in ("%1\Documents and Settings\*") do (
        del /s /a /q "%%i\Local Settings\Temp\*" 1>nul 2>&1
        del /s /a /q "%%i\Local Settings\Temporary Internet Files\*" 1>nul 2>&1
    )
)
 

Батник пропускает диск на котором находится.
Если будет работать, то можно добавить очистку "Корзины"
 
 

Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 10:08 24-02-2008 | Исправлено: 01MDM, 12:05 24-02-2008
lid111

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Спасибо огромное за труды откликнувшимся, скоро попробую.
Пока вопрос: Если батник находится, например, на USB-харде, там же, где антивирусное ПО, которое после него запускается, а система загружается с CD, то файл, предложенный в предыдущем посте 01MDM, должен пропустить USB-носитель.
А эти каталоги, которые мы сносим, существуют на загрузочном диске? Наверно, вряд ли - поскольку запись в эти временные папки совершенно невозможна. Но при загрузке ОС создается еще виртуальный диск с какой-то своей буквой. Нет ли на нем папок с такими именами? Не может ли быть в них чего-то важного? Я не знаю. Можно, конечно, загрузиться и посмотреть. Но сегодня это может быть диск WinPE, в другой раз - ERD Commander, в третий - еще что-то, а я не в курсе, одинаковые ли там механизмы... Как бы всё предусмотреть.

Всего записей: 1451 | Зарегистр. 15-09-2006 | Отправлено: 17:23 24-02-2008 | Исправлено: lid111, 17:27 24-02-2008
01MDM



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
lid111
Если батник находится на usb, то его он должен пропустить. С самого cd он ничего удалить не сможет физически, а с RAM диска наверное сможет, если тот создает временные папки, которые соответствуют пути в батнике. В любом случае лучше проверить. Измени в скрипте пути на какую-нибудь Test-папку.    

Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 18:51 24-02-2008
lid111

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
01MDM, сейчас проверил ваш файл, запустив его с дискеты после загрузки на виртуальной машине WinPE. Только в директориях Windows\Temp и WinNT\Temp (вторую создал специально) удалились все файлы (правда, остались на месте все подкаталоги). ВСЕГО ОСТАЛЬНОГО ИЗМЕНЕНИЯ НЕ КОСНУЛИСЬ.

Всего записей: 1451 | Зарегистр. 15-09-2006 | Отправлено: 23:44 24-02-2008
01MDM



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
lid111
 
Я же говорю, что не тестировал.. Измени черную часть:

Код:
 

@echo off
setlocal
echo Start....
for %%i in (Q W E R T Y U I P O
A S D F G H J K L Z X C V B N M) do (
        if not %~d0==%%i: call:clean %%i
)
echo ....Done
goto:eof
 
:clean
if exist %1:\Windows\Temp (del /s /a /q %1:\Windows\Temp\* 1>nul 2>&1)
if exist %1:\WinNT\Temp (del /s /a /q %1:\WinNT\Temp\* 1>nul 2>&1)

if not exist "%1:\Documents and Settings" goto:eof
for /d %%i in ("%1:\Documents and Settings\*") do (
        del /s /a /q "%%i\Local Settings\Temp\*" 1>nul 2>&1
        del /s /a /q "%%i\Local Settings\Temporary Internet Files\*" 1>nul 2>&1
)
 

 
И жирные буквы наверное можно убрать, у меня выскакивает окно "Windows - No Disk"
 
 

Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 02:27 25-02-2008 | Исправлено: 01MDM, 02:46 25-02-2008
lid111

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
01MDM, дальнейшие результаты тестирования: исправленный как вами указано батник полностью не затрагивает содержимое трех папок в Documents and Settings: \Default User, \LocalService и \NetworkService.
Кроме того, в любой папке не удаляются файлы с атрибутом только для чтения, то есть надо добавить сброс атрибутов. Я сам наполнял папки для тестирования, может, временных файлов и не бывает только для чтения, не знаю, но, думаю, на всякий случай, стоит добавить сброс атрибутов.

Всего записей: 1451 | Зарегистр. 15-09-2006 | Отправлено: 04:27 25-02-2008 | Исправлено: lid111, 04:29 25-02-2008
XXXXL



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ребята опять к вам за помощью.
 
Нужно чтобы батник мог по прямой ссылки Пример: http://forum.ru-board.com/ups.exe скачать файл в ту же директорию и запустить его.

Всего записей: 286 | Зарегистр. 16-05-2007 | Отправлено: 10:57 25-02-2008
01MDM



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
lid111
 

Код:
 
@echo off
setlocal
 
set "ds=Documents and Settings"
set "tf=Local Settings\Temp"
set "ti=Local Settings\Temporary Internet Files"
 
echo Start....
 
for %%i in (Q W E R T Y U I P O A S D F G H J K L Z X C V B N M) do (
        if not %~d0==%%i: call:clean %%i
)
 
echo ....Done
goto:eof
 
:clean
 
if exist %1:\Windows\Temp (
    pushd %1:\Windows\Temp
    call:delete
    popd
)
 
if exist %1:\WinNT\Temp (
    pushd %1:\WinNT\Temp
    call:delete
    popd
)
 
if not exist "%1:\%ds%" goto:eof
for /f "tokens=*" %%i in ('dir /b /ad "%1:\%ds%"') do (
     if exist "%1:\%ds%\%%i\%tf%" (    
        pushd "%1:\%ds%\%%i\%tf%"
        call:delete
        popd
    )
     if exist "%1:\%ds%\%%i\%ti%" (    
        pushd "%1:\%ds%\%%i\%ti%"
        call:delete
        popd
    )
)
goto:eof
 
:delete
del /q /a /f *.* 1>nul 2>&1
for /f "tokens=*" %%i in ('dir /b /ad') do rd /s /q "%%i" 1>nul 2>&1
 

 
 
Добавлено:
XXXXL
В ту же директорию, где лежит батник?
Нужен wget

Код:
 
@echo off
pushd "%~dp0"
wget -c http://forum.ru-board.com/ups.exe
start "" "ups.exe"
popd  
 
 

Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 11:15 25-02-2008 | Исправлено: 01MDM, 11:27 25-02-2008
XXXXL



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
01MDM Спасибо!

Всего записей: 286 | Зарегистр. 16-05-2007 | Отправлено: 13:58 25-02-2008
lid111

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
01MDM, когда я выделяю содержимое файла в рамке, внизу - пустая строка - она нужна или убирать?

Всего записей: 1451 | Зарегистр. 15-09-2006 | Отправлено: 15:11 25-02-2008
   

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108

Компьютерный форум Ru.Board » Компьютеры » Программы » Командная строка, батники, сценарии (bat, cmd) 2
Widok (10-03-2009 12:39): Лимит страниц. Продолжаем здесь.


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.Board
© Ru.Board 2000-2020

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru