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

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

Автор: Valdon
Дата сообщения: 20.06.2009 14:47
Вопщим я совсем запутался....
Я раньше считал что 0 строк это:
Код: set /p=<nul>1.txt
Автор: yurkesha
Дата сообщения: 20.06.2009 15:05
Valdon
я реализовал все возможные варианты подсчета строк - пользуйся тем который считаешь верным - то есть верь себе
А статистика - это от лукавого...
Автор: Maximus777
Дата сообщения: 20.06.2009 20:37
Народ! Подскажите или пните в нужную сторону. Можно ли в батнике узнать существует ли локальная группа Administrators?
Автор: wolf0425
Дата сообщения: 21.06.2009 01:50
Maximus777
net localgroup | find "Administrators" >nul && echo Exist!

yurkesha

Цитата:
А статистика - это от лукавого...
от лукавого - считать количество строк двигая курсор в редакторе.
ты б еще количество символов в строке так считал.
Автор: yurkesha
Дата сообщения: 21.06.2009 08:51
wolf0425
Я рад что к добавочному коду написанному специально для тебя претензий нет
Остановимся на том что каждый считает строки так как хочет - один из трех вариантов точно подойдет
Автор: Maximus777
Дата сообщения: 21.06.2009 13:33
wolf0425
Нижайший поклон. Ить работает, блин!
Автор: spasius
Дата сообщения: 22.06.2009 04:37
Где можно найти использование бат для выполнения компиляций для FreePascal (желательно под несколько ОСей)?
Автор: Nuke142
Дата сообщения: 23.06.2009 12:43
Сделал список файлов
dir scripts /b >list.txt
Как мне теперь из файла lists.txt подгрузить список файлов (с путями), чтобы потом командой copy скопировать эти файлы в другое место ?
Автор: yurkesha
Дата сообщения: 23.06.2009 15:58
Ну вообще в вышеуказанном коде в список попадут не только файлы но и имена каталогов вложенных в исходную папку(1 уровень вложения). Чтобы этого не произошло надо добавить ключ /a:-d. Да и непонятно зачем надо использовать промежуточный файл - проще сразу все реализовать:
Без просмотра файлов из подвложенных папок
Код: FOR /F "USEBACKQ TOKENS=1 EOL= DELIMS=" %%i IN (`dir scripts /b /a:-d`) DO ECHO "%%i"
Автор: yrs
Дата сообщения: 23.06.2009 16:36
Всем день добрый!
Подскажите, плз, как на 2003 Servere дать доступ всем на папку. Пробовал
net share 1=c:\1 /grant:All, full /unlimited - не проходит (ошибка 1322).
Нужно дать именно доступ всем полный, а не конкретным пользователям.
Автор: slay1212
Дата сообщения: 23.06.2009 16:42
Есть файл tmp.txt
[more]
379 528
517 6008
540 528
595 551
660 528
[/more]
первое число -время в минутах (с начала суток), второе код событий
528 вход в систему, 6008 - система перезагружена после бсода, 551 логоф юзера из системы.
Надо посчитать время работы юзера в минутах с момента последнего входа (528) до текущего момента и общее время всех сеансов работы - между 528 и 551 ( или 6008).
Автор: Attid
Дата сообщения: 23.06.2009 17:29
Добрый время суток.

делаю бекапы и складываю их в папки YYYY-MM-DD
хочется чтобы они хранились не больше 10 дней.

вот что-то даже не приходит в голову как можно удалить все что старше 10 дней =/
может кто подкажет куда капать ?
Автор: gogaman
Дата сообщения: 23.06.2009 17:48
подскажите есть файл 1.reg можно ли через .bat добавить запись в реестр с этого файла а потом удалить если нужно
Автор: 01MDM
Дата сообщения: 23.06.2009 17:59
gogaman


Код:
reg import 1.reg
или
regedit /s 1.reg
Автор: Attid
Дата сообщения: 23.06.2009 18:11
еще возник вопрос отладки скрипта, например я хочу выполнить тольео часть скрипта, я пишу в середину скрипта exit , запускаю его в консольке и консолька закрывается =( можно выйти из скрипта но чтобы консолька не закрылась ?
Автор: 01MDM
Дата сообщения: 23.06.2009 18:23
Attid
exit /b


Добавлено:
Для удаления файлов по времени воспользуйся утилитой forfiles.exe
Автор: gogaman
Дата сообщения: 23.06.2009 18:55
01MDM
импорт сделал а вот с удалением не совсем понятно
в одном бат пишу reg import 1.reg он добавляет в реестр
в другом бат пишу reg delete /1.reg удалять не хочет
Автор: 01MDM
Дата сообщения: 23.06.2009 19:09
gogaman

Цитата:
Чтобы удалить составь соответствующий reg-файл.

В котором укажи, что ты собираешься удалять. И импортируй его.

Добавлено:
Например ты добавляешь 1.reg:

Код:
Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\test]
"test"="test"

Автор: alexander6161
Дата сообщения: 23.06.2009 19:21
Attid
Запутано объяснил что хочешь, но мне показалось тебе надо поставить в этом месте команду "pause" и посмотреть, какие ошибки были во время выполнения батника?
Потом нажми любую кнопку, скрипт дальше будет выполняться.
Автор: gogaman
Дата сообщения: 23.06.2009 19:36
01MDM
спасибо разобрался
Автор: Nuke142
Дата сообщения: 23.06.2009 20:35

Цитата:
yurkesha
Ну вообще в вышеуказанном коде в список попадут не только файлы но и имена каталогов вложенных в исходную папку(1 уровень вложения). Чтобы этого не произошло надо добавить ключ /a:-d. Да и непонятно зачем надо использовать промежуточный файл - проще сразу все реализовать:
Без просмотра файлов из подвложенных папок
Код:
FOR /F "USEBACKQ TOKENS=1 EOL= DELIMS=" %%i IN (`dir scripts /b /a:-d`) DO ECHO "%%i"

С просмотром файлов из подвложенных папок
Код:
FOR /F "USEBACKQ TOKENS=1 EOL= DELIMS=" %%i IN (`dir scripts /b /a:-d /s`) DO ECHO "%%i"

Где "%%i" - полное имя файла с путем и обрамляющими кавычками. И вместо ECHO используешь нужную тебе команду...

Спасибо!
Получилось, но есть еще одна папка, с которой нужно сделать тоже самое.
Проблема в том что папка содержит множество подпапок и файлов.
Как скопировать все эти подпапки и файлы точно в такой же структуре в другую папку ?
Пока что у меня получается только все скопом
Автор: HaK1R
Дата сообщения: 23.06.2009 20:48
slay1212


Код: @echo off
setlocal enabledelayedexpansion
set /a t=0
for /f "tokens=1,2" %%a in (tmp.txt) do (
if "%%b."=="528." (set /a t-=%%a & set /a min=%%a)
if "%%b."=="551." (set /a t+=%%a)
if "%%b."=="6008." (set /a t+=%%a)
)
set /a min=%time:~0,2%*60+%time:~3,2%-%min%
chcp 1251 1>nul
echo Общее время работы %t% минут
echo Время в последнем сеансе %min% минут
chcp 866 1>nul
Автор: yurkesha
Дата сообщения: 23.06.2009 21:02
Nuke142
ну тут еще проще - xcopy тебе в помощь... Безо всяких for...
Автор: gbcfkf
Дата сообщения: 24.06.2009 03:59
День добрый..
как бы при выводе результата ping в текстовый файл добавить точное время пинга? например переменную %time%
что-то вроде:

c:\>ping 10.40.0.1 -t
Обмен пакетами с 10.0.0.1 по 32 байт:
Ответ от 10.0.0.1: число байт=32 время<1мс TTL=255 11:57:49.79
Ответ от 10.0.0.1: число байт=32 время<1мс TTL=255 11:57:50.13
...
Автор: 01MDM
Дата сообщения: 24.06.2009 05:29
gbcfkf
Нет, так сделать нельзя. У ping'а такой фичи нет, а все данные он "отдает" только когда закончит процесс. Только после этого их можно обработать (тем же for).
Автор: smirnvlad
Дата сообщения: 24.06.2009 06:56
slay1212

HaK1R, с вашего позволения добавлю


Код:
@echo off
setlocal enabledelayedexpansion
set /a t=0
for /f "tokens=1,2" %%a in (tmp.txt) do (
if "%%b."=="528." (set /a t-=%%a & set /a min=%%a & set event=logon)
if "%%b."=="551." (set /a t+=%%a & set event=logoff)
if "%%b."=="6008." (set /a t+=%%a & set event=logoff)
)
if %event%==logon set /a t+=%min%
if %event%==logon set /a min=%time:~0,2%*60+%time:~3,2%-%min%
if %event%==logon set /a t+=%min%
if %event%==logoff set min=0

chcp 1251 1>nul
echo Общее время работы %t% минут
echo В том числе Время в текущем сеансе %min% минут
chcp 866 1>nul

Автор: gbcfkf
Дата сообщения: 24.06.2009 08:02
01MDM
блин...
придется огород городить:

Код:
@echo off
:cycle
@ping 10.0.0.1 -n 1 >> log.txt
echo %time% >> log.txt
@ping 172.31.255.254 -n 1 -w 50
goto cycle
Автор: HaK1R
Дата сообщения: 24.06.2009 08:45
smirnvlad
Что-то мне подсказывает, что в этом нет необходимости, поскольку г-н slay1212 заменил истинное название системного файла на tmp.txt, а при запуске этого кода на машине, будет использоваться истинный сис файл, а раз машина запущена, то последней строкой будет вход в систему, а не выход

Добавлено:
smirnvlad
я тут тоже немного исправлю, надеюсь вы не против

Код: @echo off
setlocal enabledelayedexpansion
set /a t=0
for /f "tokens=1,2" %%a in (tmp.txt) do (
if "%%b."=="528." (set /a t-=%%a & set /a min=%%a & set "event=logon")
if "%%b."=="551." (set /a t+=%%a & set "event=logoff")
if "%%b."=="6008." (set /a t+=%%a & set "event=logoff")
)
if "%event%==logon" (
set /a t+=%min%
set /a min=%time:~0,2%*60+%time:~3,2%-%min%
set /a t+=%min%
)
if "%event%==logoff" set min=0

chcp 1251 1>nul
echo Общее время работы %t% минут
echo В том числе время в текущем сеансе %min% минут
chcp 866 1>nul
Автор: slay1212
Дата сообщения: 24.06.2009 09:05
HaK1R
smirnvlad
Спасибо работает! но вариант HaK1R показывает t отрицательное ( как я понимаю, из-за того что самый поздний логон отнимается последним в t .
Да tmp.txt это не системный файл, а полученная выборка по заданному юзеру из файлов security(528 и 551) и system(6008)отсортированное по времени. Если интересно выложу код получения. Вообше я писал изначальную задачу пару страниц назад но никто тогда не откликнулся
Хотелось бы еще проверки на ошибки - теоретически может глюкануть и бсод вообще не запишется в системный журнал - те может идти несколько логонов логофов подряд - в этом случае получается отрицательное число.
В этом случае надо наверное брать только полседний по времени logon logoff
Я чо то в ифах запутался . Вот примет данных
[more]
259 528
319 528
337 6008
360 528
415 551
540 528
[/more]
А вот что получилось на 10:03
Общее время работы -123 минут
В том числе Время в текущем сеансе 63 минут
Автор: king_stiven
Дата сообщения: 24.06.2009 10:09
Nuke142
попробуй

Код: FOR /F "TOKENS=*" %%i IN ('dir scripts /b') DO (
if exist "%%i\" (
xcopy "%%i" "куда\%%i" /I /E /H
) else (
xcopy "%%i" "куда"
)
)

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778

Предыдущая тема: во вкладке автозагрузка


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