Ru-Board.club
← Вернуться в раздел «Microsoft Windows»

» Задачи на bat-файлах 9

Автор: smirnvlad
Дата сообщения: 24.11.2010 14:15
Frystail
если "туда куда нужно" это classes текущего пользователя то они в HKEY_CURRENT_USER\Software\Classes
если для всех пользователей, то
HKEY_LOCAL_MACHINE\Software\Classes
Автор: magsimga
Дата сообщения: 24.11.2010 14:24
smirnvlad

спасибо тебе огромное;)
Автор: Cheerful_a_bear
Дата сообщения: 24.11.2010 14:57
Привет Всем.
Есть батник, работает на ура...
Требуется изменить так, чтобы удалялись все файлы, во всех каталогах старше N дней...

@echo off
setlocal enabledelayedexpansion
set N=15

call :raschet %date% days_to_today

pushd "\\mo1srv04\f$\1c\"
for /f "tokens=*" %%a in ('dir /b *.*') do (
set filedate=%%~ta
call :raschet !filedate:~0,10! days_to_date_of_file
set /a raznitsa=%days_to_today%-!days_to_date_of_file!
if !raznitsa! gtr %N% del /q "%%a"
)
goto :eof
popd

:raschet
for /f "delims=. tokens=1-3" %%a in ('echo %~1') do (

set /a years=%%c*365+%%c/4
set /a prev_year=%%c-1
set /a result_year=%%c/4
set /a result_prev_year=!prev_year!/4
set /a vis=!result_year!-!result_prev_year!
if !vis!==1 (
if %%b==01 set /a years=!years!-1
if %%b==02 set /a years=!years!-1
)

if %%b==01 set months=0
if %%b==02 set months=31
if %%b==03 set months=59
if %%b==04 set months=90
if %%b==05 set months=120
if %%b==06 set months=151
if %%b==07 set months=181
if %%b==08 set months=212
if %%b==09 set months=243
if %%b==10 set months=273
if %%b==11 set months=304
if %%b==12 set months=334

set days=%%a
set firstsym=!days:~0,1!
if !firstsym!==0 set days=!days:~1,1!

set /a %~2=!years!+!months!+!days!
)
Автор: smirnvlad
Дата сообщения: 24.11.2010 15:11
Cheerful_a_bear
во всех подкаталогах \\mo1srv04\f$\1c\
dir /b *.* заменить на dir /s /b *.*
Автор: wolf0425
Дата сообщения: 24.11.2010 16:05
подскажите как всем подпапкам/файлам текущего каталога прописать наследование прав (безопастности) как у текущего каталога?
В смысле там в подкаталогах где-то разрывы наследования и добавления/убавления прав - надо весь этот разнобой убрать, права заменить на только наследуемые.

интересует какой-то конкретный пример ключиков что надо прописывать в такой ситуации, а не просто отсылка к хэлпу cacls.exe
Автор: magsimga
Дата сообщения: 24.11.2010 17:26
smirnvlad

а можешь для косынки расписать каждую строчку, что она делает, ату до меня препод докапался
спрашивает как сделал, обяснить... говорит сразу видно что умный понимающий человек сделал...
и сам я тож хочу понять что че делает там...
Автор: king_stiven
Дата сообщения: 24.11.2010 17:36
Cheerful_a_bear
Если не поможет в шапке примеры.

Добавлено:
magsimga
интригал (с)
Автор: smirnvlad
Дата сообщения: 24.11.2010 17:38
wolf0425
заменяем все текущие права на папку C:\1234 и её подпапки и файлы (/T) на разрешение (/G) пользователю User полного доступа (F)
cacls "C:\1234" /T /G User1:F
тут User1 должен быть пользователь из под которого происходят изменения, а то будет отказ в доступе
и добавляем (/E) на папку C:\1234 и все подпапки и файлы (/T) User2 права на чтение (R)
cacls C:\1234 /E /T /G User2:R
Автор: magsimga
Дата сообщения: 24.11.2010 18:10
smirnvlad

помоги плиз, обьясни
Автор: smirnvlad
Дата сообщения: 24.11.2010 18:17
magsimga
у всех команд есть очень подробная встроенная помощь, например
tasklist /?

я же не пишу 10000 знаков в минуту
и не надо спамить форум бесполезными сообщениями, их можно (но лучше этого не делать зря) написать в личный ящик

[more]
Код: [no]@echo off
REM строки начинающиеся с REM являются комментариями :)
REM отключили вывод команд на экран

:s
REM метка s

ping 127.0.0.1 -n 2 -w 1000 1>nul 2>nul
REM в винде нет стандартной команды задержки, поэтому для задержки используется ping
REM пингуем локальный адрес дважды с максимальным временем ожидания 1000 мс
REM задержка 1с

chcp 1251 1>nul
REM переключили кодировку на windows-1251
REM это нужно для нахождения окна пасьянса по его заголовку
REM на случай если будет другой процесс с именем sol.exe

tasklist /FI "IMAGENAME eq sol.exe" /FI "WINDOWTITLE eq Косынка" 2>nul | find /I "sol.exe" 1>nul && (
REM tasklist выводит список запущенных приложений
REM /FI - фильтр по имени (IMAGENAME) равном (eq) sol.exe и заголовку окна (WINDOWTITLE)
REM поскольку tasklist не возвращает код ошибки если ничего не найдено, то
REM передаем его вывод на вход програамы find, которая ищет, без учета регистра (/I), строчку содержащую sol.exe
REM 2>nul запрещает выводить сообщение об ошибке (если sol не найден в процессах) на экран
REM 1>nul запрещает выводить эту строчку на экран
REM && выполняет следующую команду если предыдущая завершилась без ошибки
REM (если find нашел sol.exe в выводе команды tasklist)

taskkill /FI "IMAGENAME eq sol.exe" /FI "WINDOWTITLE eq Косынка" 1>nul 2>nul
REM taskkill завершает работу приложений подходящих под условие

echo ВЫ наверно хотели запустить блокнот >%temp%\solnotepad.txt
REM echo выводит сообщение на экран, мы же его отправляем (>) его в файл %temp%\solnotepad.txt
REM %temp% приобработки меняется на значение переменной temp
REM которая указывает на каталог для временных файлов

start "" notepad %temp%\solnotepad.txt
REM запускаем блокнот передаем ему имя нашего файла, он его открывает
chcp 866 1>nul
REM в консоли кодировка по умолчанию cp866
REM изменяем кодировку для вывода сообщения на экран
REM 1>nul сообщение о смене кодировки

echo.Косынка закрыта и блокнот запущен в %date% %time%
REM выводим сообщение на экран
REM %date% %time% заменяются на текущие дату и время
)
REM конец группы команд

goto:s
REM переходим к метке s и всё повторяется сначала
[/no]
Автор: praidik
Дата сообщения: 24.11.2010 19:10
Такая ситуация...
Бат файл лежит на флешке, нужно, чтобы при запуске бат файла открывалась флешка с которой он был запущен...
Какая при этом команда должна быть в бате?
Заранее благодарю)
Автор: Levonid92
Дата сообщения: 24.11.2010 19:18
smirnvlad

помоги пожалуйста решить задачу в командном файле:
сделать календарь на следующие 30 дней.
Автор: BorlandIMHO
Дата сообщения: 24.11.2010 19:27
praidik

Цитата:
нужно, чтобы при запуске бат файла открывалась флешка с которой он был запущен...
Какая при этом команда должна быть в бате?


Код: @start \
Автор: praidik
Дата сообщения: 24.11.2010 20:09
BorlandIMHO
Огромное спасибо!
Наконец то могу завершить свою прогу)
Автор: wolf0425
Дата сообщения: 25.11.2010 01:26
smirnvlad
Цитата:
заменяем все текущие права на папку C:\1234 и её подпапки и файлы (/T) на разрешение (/G) пользователю User полного доступа (F)
cacls "C:\1234" /T /G User1:F

неужели я недостаточно понятно задал вопрос?
нужно не назначить уникальные права папке C:\1234\567 (с подпапками) с разрешением от юзера User1, а восстановить папке C:\1234\567 наследование комплекта прав от C:\1234
при этом самой C:\1234 - ничего назначать не нужно, у неё всё уже назначено, и в ней кроме ветки C:\1234\567 ещё 10 тысяч других подпапок, которым тоже ничего заменять не нужно. А сейчас права C:\1234\567 (с подпапками) - назначены собственные (наследование разорвано), добавление через гуи прав C:\1234 на правах C:\1234\567 никак не сказывается...

вышепредложенные ключики cacls "C:\1234\567" /T /G User1:F
- как раз отрывают наследование папки 567 от родителя, т.е. делают ровно то, что требуется устранить...
Автор: smirnvlad
Дата сообщения: 25.11.2010 06:10
wolf0425
вопрос понятен, но cacls очень урезан и с его помощью это единственный вариант
если нужно именно включить всем наследование, то нужно скачать с MS xcacls.vbs
и включить всем наследование
xcacls.vbs "папка" /i enable /F /S /T
ещё есть icacls, но почему то не для всех ОС

Levonid92

Цитата:
сделать календарь на следующие 30 дней

в бат, чтобы узнать день недели, определить високосный ли год надо всё считать по формулам или использовать внешние средства, например vbs, а тогда уже на vbs и писать
Автор: wolf0425
Дата сообщения: 25.11.2010 09:18

Цитата:
если нужно именно включить всем наследование, то нужно скачать с MS xcacls.vbs и включить всем наследование
ага, спасибо, вроде оно.
нифига себе скриптик...
Автор: king_stiven
Дата сообщения: 25.11.2010 10:15
Как батником вывести список имён беспроводных сетей, которые находятся в радиусе компа, причём к ним можешь быть и не подключенным?
Автор: smirnvlad
Дата сообщения: 25.11.2010 11:10
king_stiven
начиная с висты вроде так
netsh wlan show networks
Автор: king_stiven
Дата сообщения: 25.11.2010 11:21
smirnvlad
winda XP, можно утилиты использовать
Автор: smirnvlad
Дата сообщения: 25.11.2010 11:35
king_stiven
WirelessNetView v1.35 умеет сохранять список сетей в файл
Автор: king_stiven
Дата сообщения: 25.11.2010 13:05
smirnvlad
Спасибо, поскольку в файл неудобно, вот эту нашёл WirelessNetConsole, тоже с http://www.nirsoft.net
Автор: Scaramanga
Дата сообщения: 25.11.2010 13:12
Всем привет. Задача следующая.
При входе пользователя в домен срабатывает логон скрипт. Нужен батник следующего характера.
пример:
если имя пользователя ivanov, то запустить ivanov.bat, если нет то едем на следующее условие
если имя пользователя petrov то запустить petrov.bat и т.д.
Заранее спасибо
Автор: res2001
Дата сообщения: 25.11.2010 13:16
Scaramanga
дык так видимо:
%username%.bat
или так
call %username%.bat
или просто
%username%

Добавлено:
и не надо никаких условий
Автор: Scaramanga
Дата сообщения: 25.11.2010 13:36
res2001
немного не то. про %username% я в курсе. Но к примеру я хочу чтоб завтра с утра все пользователи выполнили сбор логов avz при входе. Если сделать то что я предлагал с условиями, то мне достаточно в 1 файл,перед условиями, прописать команду запуска и все. Если делать логон по пользователям, то придется прописывать в каждом скрипте либо использовать иные способы запуска приложение во всей сети
Автор: res2001
Дата сообщения: 25.11.2010 14:08
Scaramanga
Тебе надо запускать %username%.bat или нет?


Цитата:
все пользователи выполнили сбор логов avz при входе

т.е. логи уже где-то у юзеров лежат на локальных дисках и тебе надо собрать их куда-то в одно место в сети. Тогда просто копируй:
copy avz.log <путь в сети>\%username%.log

Вобщем задача не ясна.


Цитата:
если имя пользователя ivanov, то запустить ivanov.bat, если нет то едем на следующее условие, если имя пользователя petrov то запустить petrov.bat и т.д.

if "%username%" equ "ivanov" (ivanov.bat) else (
if "%username%" equ "petrov" (petrov.bat) else (
...
))
В итоге то же самое что и:
%username%.bat
Автор: Scaramanga
Дата сообщения: 25.11.2010 14:24

Цитата:
В итоге то же самое что и:
%username%.bat


не совсем. Вот пример. Я хочу чтобы при завтрашнем входе в домен у всех пользователей выполнилась программа 1.exe

В итоге если использовать user name, придется либо прописывать в каждый username.bat запуск 1.exe, либо использовать какие либо иные методы запуска уже вручную или через тот же планировщик, не столь важно.
А вот при использовании скрипта с условиями мне достаточно добавить 1.exe в логон скрипт который будет примерно следующего вида.


Код: start /wait <путь>\1.exe
if "%username%" equ "ivanov" (ivanov.bat) else (
if "%username%" equ "petrov" (petrov.bat) else (
...
))
Автор: res2001
Дата сообщения: 25.11.2010 14:41
Scaramanga
а кто тебе мешает сделать в логон скрипте так:

Код: start /wait <путь>\1.exe
%username%.bat
Автор: Scaramanga
Дата сообщения: 25.11.2010 14:46
res2001
ппц, а вот самый просто вариант даже и не подумал. огромное спасибо)
Автор: magsimga
Дата сообщения: 25.11.2010 14:48
кто нибудь знает ПО работающие с подобными ссылками как и Far? можете подробнее?

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

Предыдущая тема: Windows 7 Starter


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