Ru-Board.club
← Вернуться в раздел «Программы»

» Командная строка, батники, сценарии (bat, cmd) 2

Автор: gryu
Дата сообщения: 18.02.2008 11:43
01MDM

Цитата:
Какой ошибки? Запуска ***.exe?

Нет.
Ошибки перезаписи.
1. не найден сетевой диск
2. Не получен доступ
3. .....
Ехзешник то запускается в любом случае.
Автор: 01MDM
Дата сообщения: 19.02.2008 10:23
gryu

Попробуй просто ошибки xcopy перенаправить в лог ошибок, конечно информация будет не полная, но уже можно будет проанализировать.

Код:
@echo off
xcopy "\\**\***\Shared\*.*" "C:\***\Shared\" /q /d /y 2>>err-%date%.log
start "" "C:\***\***.exe"
Автор: clio77
Дата сообщения: 19.02.2008 20:28
прошу удалить..OFF TOP
Автор: JekaRus
Дата сообщения: 20.02.2008 04:33
Скажите пожалуйста можно ли реализовать различное выполнение команд в зависимости от того, что находит команда findstr. Например если находится строчка х32, то goto :32, если находится х64 то goto :64. Подобно реализации ветвления в зависимости от результата команды ping.
Автор: ViSiToR
Дата сообщения: 20.02.2008 06:36
Возможно ли через ком. строку установить время (изменён) для файла? (не используя внешние средства).

JekaRus

Цитата:
если находится строчка х32, то goto :32

На конце всегда число, которое одновременно является меткой? если нет, то можно сразу и проверять, If %%i==x32 Goto 32 - Иначе нужно сохранять в переменную и брать последние N' символов..


Код: @Echo Off
For /F "delims=" %%i In ('FINDSTR /I "x32" Test.txt') Do Set Var=%%i
GoTo %Var:~-2%

Echo Test 1
Exit

:32
Echo Test 2
Автор: lid111
Дата сообщения: 20.02.2008 14:02
Решение моей проблемы давно известно, но буду благодарен за текст батника или ссылку. Надо поставить в автозагрузку требование очистки всех папок с названием Temp и Temporary Internet Files при включении или при выключении (что лучше?) компьютера.
Автор: Wise_Kaa
Дата сообщения: 20.02.2008 16:13
Доброго дня.
ОС: Windows 2000, есть там такая команда tlist -p <имя процесса>, которая выводит на экран PID указанного процесса. В случае, если процесс с указанным именем не найден, выводится "-1". Можно ли выводимое значение присвоить какой-то переменной?
Вообще задача такая, если процесс с указанным именем не найден, то перейти по метке.
P.S. Может быть можно как-то перенаправить выводимое сообщение в переменную?
Автор: sanb
Дата сообщения: 20.02.2008 18:21
что здесь не так?
первый батник
wmp11-windowsxp-x86-ru-ru.exe /T:c:\extract /C
второй
c:\extract\wmp11.exe /T:c:\extract\decoder /C
первый батник делает свою работу но второй нет при этом выскакивает справка по командной строке по установке wmp11
как решить эту проблему и еще можно ли объединить весь процес в один батник?
заранее благодарен
Автор: Elroir
Дата сообщения: 20.02.2008 22:09
lid111

Цитата:
Надо поставить в автозагрузку требование очистки всех папок

Что означает "требование очистки"?

Wise_Kaa

Цитата:
Может быть можно как-то перенаправить выводимое сообщение в переменную?

Можно.

Цитата:
Вообще задача такая, если процесс с указанным именем не найден, то перейти по метке.

Покажи вывод команды tlist (только полностью), когда процесс найден и когда не найден.
Автор: lid111
Дата сообщения: 21.02.2008 00:00

Цитата:
Что означает "требование очистки"

Разве неясно: удаление всех файлов из всех папок с такими именами, имеющихся на компе (то есть для всех пользователей) мимо корзины, разумеется. Разве очистка и удаление содержимого - не синонимы? Хотя, вероятно, вас смутило странное слово "требование"?

Я уже встречал подобное на чьем-то компе, видимо, это включается в какую-то сборку (сборки) Windows.
Автор: Elroir
Дата сообщения: 21.02.2008 00:42
lid111

Цитата:
Хотя, вероятно, вас смутило странное слово "требование"?

Именно оно

Очистка этих папок для одного юзера (того, который залогинился) - задача очень простая.
А вот очистка папок всех юзеров - на несколько порядков сложнее. Вопрос - зачем очищать папки неактивныx юзеров?
Самый простой способ (при первом варианте - для активного юзера), это сделать батник следующего содержания и кинуть его (или ссылку на него) в Автозагрузку (в меню Старт):

Код:
@echo off
pushd "%temp%"
rd /s /q . 2>nul
pushd "%userprofile%"
cd "Local Settings\Temporary Internet Files" && rd /q /s . 2>nul
Автор: lid111
Дата сообщения: 21.02.2008 01:48
Elroir, спасибо, буду тестировать.

То есть мне нужно положить этот файл (ссылку) в автозагрузку каждому юзеру или в автозагрузку в папке All Users ? Или оба варианта подойдут?

И еще вопрос: вариант в отношении всех юзеров, может, проще будет реализовать, если запускать файл из ОС, загруженной с компакт-диска (WinPE, например)? Это может пригодиться, думаю, если лечить чужой комп от вирусов - сначала грохнуть побольше мусора, чтобы потом его долго не сканировать.
И как в таком случае должен выглядеть батник?

И еще вопрос: ваш рецепт сработает на все файлы в папке временных файлов интернета? А то я вычитал, что штатная виндовская очистка диска удаляет якобы не всё.
Автор: JekaRus
Дата сообщения: 21.02.2008 14:21
ViSiToR
Огромное спасибо за подсказку!!! Давно не мог реализовать такое.
Но не мог бы ты разъяснить пару моментов.
Мне не совсем понятно начало. А именно зачем /F и "delims="

А также почему не работает если написать не
In ('FINDSTR /I "x32" Test.txt')
а
In ('FINDSTR /I /C:"HAL.DLL is 5.1:2600.132" Test.txt'')
Автор: Elroir
Дата сообщения: 21.02.2008 23:22
lid111

Цитата:
Или оба варианта подойдут?

Оба подойдут.


Цитата:
может, проще будет реализовать, если запускать файл из ОС, загруженной с компакт-диска (WinPE, например)?

На мой взгляд - сложнее.


Цитата:
И как в таком случае должен выглядеть батник?

Не знаю (сходу не придумалось).


Цитата:
ваш рецепт сработает на все файлы в папке временных файлов интернета?

На все, кроме одного файла - index.dat.
Автор: lid111
Дата сообщения: 22.02.2008 00:44
Elroir

Цитата:
Не знаю (сходу не придумалось).

НУ, может быть, как-нибудь не с ходу, если будет время, желание, было бы неплохо... Можно мне в PM.
Автор: ViSiToR
Дата сообщения: 22.02.2008 15:54
JekaRus

Цитата:
зачем /F и "delims="

Читаем справку по командной строке:


Цитата:
For /? > ...
...
По умолчанию ключ /F выделяет из каждой строки файла
первое слово, очищенное от окружающих его пробелов. Пустые строки
в файле пропускаются. Необязательный параметры "ключи" служит для
переопределения заданных по умолчанию правил обработки строк. Ключи
представляют собой заключенную в кавычки строку, содержащую указанные
параметры. Ключевые слова:

eol=c - определение символа комментариев в конце строки
(допускается задание только одного символа).
skip=n - число пропускаемых при обработке строк в начале
файла.
delims=xxx - определение набора разделителей для замены заданных
по умолчанию пробела и знака табуляции.
...
...



Цитата:
А также почему не работает если написать не
In ('FINDSTR /I "x32" Test.txt')
а
In ('FINDSTR /I /C:"HAL.DLL is 5.1:2600.132" Test.txt'')

Хотябы потому, что используется лишняя одиночная кавычка на конце строки


Код: ...In ('FINDSTR /I /C:"HAL.DLL is 5.1:2600.132" Test.txt')
Автор: Elroir
Дата сообщения: 22.02.2008 16:18
lid111
Даже подумав, не буду это делать, но объясню почему:
С директориями Temporary Internet Files все просто, а вот директория Temp у каждого пользователя может находится где угодно. Выяснить где она находится, из командой строки, не загружая операционную систему самой машины - невозможно (ну... возможно, конечно, но СЛОЖНО). Поиск всех директорий с названиями "Тemp" ничего не даст, так как многие программы используют подобные директории.
Автор: ViSiToR
Дата сообщения: 22.02.2008 16:30
JekaRus

Вот немного расширенный пример:


Код: @Echo Off

Set File=Test.txt
Set Line=HAL.DLL is 5.1:2600.132

If Not Exist "%File%" Call :Error "File <%File%> Not Found"

For /F "delims=" %%i In ('FINDSTR /I /C:"%Line%" "%File%"') Do Set Var=%%i
If "%Var%"=="" Call :Error "Line <%Line%> Not found in file <%File%>."

GoTo %Var:~-2%

Call :Error "Line <%Line%> Not found in file <%File%>."

:32
Echo Ok, Line ^<%Line%^> found in file ^<%File%^>.
Exit 0



:Error
Echo There was an error [%1]
Exit 1
Автор: Elroir
Дата сообщения: 22.02.2008 17:13
ViSiToR

Цитата:
Хм... а переменная %Temp%?

Ключевая фраза в моем ответе - "не загружая операционную систему самой машины".
Человек хочет удалить все темп директории, загрузившись с компакт-диска.
Автор: Wise_Kaa
Дата сообщения: 22.02.2008 17:50

Цитата:
Wise_Kaa

Цитата:Может быть можно как-то перенаправить выводимое сообщение в переменную?


Можно.

Цитата:Вообще задача такая, если процесс с указанным именем не найден, то перейти по метке.


Покажи вывод команды tlist (только полностью), когда процесс найден и когда не найден


Elroir ,вот


Цитата:

C:\>tlist -p cmd
5388

C:\>tlist -p abra-cadabra
-1
Автор: ViSiToR
Дата сообщения: 22.02.2008 17:52
Elroir

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

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


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

Тогда сорри, не внимательно прочёл запрос - Ну тогда вопрос/совет к lid111: Зачем удалять ВСЕ Temp? если речь про долгое сканирование, то полагаю можно было бы задать исключения для этого сканирования? если я не так всё понял, проигнорируйте это сообщение!
Автор: Elroir
Дата сообщения: 22.02.2008 18:27
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
Автор: lid111
Дата сообщения: 23.02.2008 02:02
ViSiToR
Цитата:
Ну тогда вопрос/совет к lid111: Зачем удалять ВСЕ Temp? если речь про долгое сканирование, то полагаю можно было бы задать исключения для этого сканирования?

Поясняю свой вопрос, думаю, он гораздо проще: я прихожу к человеку, у которого на компе куча заразы. Как правило, лечение от вирусов проводится после загрузки со своего CD. Как правило, больше всего заразы сидит во временных папках интернета. Как правило, эти папки никто из непродвинутых обывателей не чистит. Если я тупо запускаю антивирусную программу на сканирование все[ дисков, я могу час-два наблюдать как эти временные папки сканируются. Плюс к тому, может быть набита чем-нибудь по самые уши папка Windows\Temp, а чем больше файлов, тем, опять же, больше время сканирования. Я хочу сократить антивирусную проверку, полагая, что удаление файла мимо корзины с помощью батника не менее эффективно, чем удаление его же антивирусной программой (поправьте, если ошибся).

Вот я и хочу: загрузиться с CD, и запустить для начала с того же CD или с флэшки свой батник, чтобы он мне вне зависимости от числа пользователей на данном компе снес на фиг содержимое внутри всех папок с именами Temp и Temporary Internet Files (т. е. для всех и для каждого пользователя внутри Document and Setting) плюс папку Windows\Temp. Или я чего-то не догоняю, но, наверное, достаточно задать маску *НАЗВАНИЕ ПАПКИ* и действие (но я не знаю настолько DOS). Или вы хотите сказать, что эти папки могут быть как-то защищены от очистки?
Автор: ViSiToR
Дата сообщения: 23.02.2008 07:03
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
    )
Автор: lid111
Дата сообщения: 23.02.2008 20:57
ViSiToR, спасибо за помощь. Я правильно понял, что в вашем примере Temp - это любая часть имени каталога, то есть в пример включены папки "Temporary ..."?
И неужели может быть вред? Если я делаю это вручную, из запущенной ОС, то мне не удастся удалить файл из папки, который в данное время используется. Если я загружаюсь с CD, то ни один из этих файлов не используется, значит, все могут быть удалены. Если какой-то программе нужны врем. файлы для работы, она после своего запуска их создаст по-новой. Или я неправ? Понимаю, что вопрос - уже оффтопик, извините, пожалуйста...


Добавлено:
ViSiToR
Цитата:
По поводу защиты... да, может быть и такое, зависит от настроек и прав.
Неужели эти права что-то значат для посторонней ОС?
Автор: Elroir
Дата сообщения: 23.02.2008 21:12
lid111

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

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

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

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


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

Если она на системном диске (с которого загружена система), то значат.
Автор: lid111
Дата сообщения: 24.02.2008 00:47
Хорошо, сужаю задачу (хотя, собственно, я и не пытался ее так масштабно расширять): Нужно удалить всё содержимое всех конкретных папок:
1) *\Documents and Settings\*\Local settings\Temp
2) *\Documents and Settings\*\Local settings\Temporary Internet Files
3) *\Windows\Temp

И только! Это моя последняя просьба по составлению (изменению ранее предложенного) батника.

ViSiToR

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

bat-файл на CD или на съемном носителе, Windows загружается с CD, файлы уничтожаются, принадлежащие другой системе, при чем тут разрешения, установленные в ней? Или я тупой, но опять не понял. Прошу не сердиться за переспрашивание, в принципе, можно на этот вопрос не отвечать, если не будет желания.
Меня больше волнует оконч. вариант батника (см. выше)
Автор: ViSiToR
Дата сообщения: 24.02.2008 01:48
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!
Автор: Elroir
Дата сообщения: 24.02.2008 02:21
ViSiToR

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

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

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172

Предыдущая тема: DVD-video (ДВД-видео) - что и как (часть 3)


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.