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

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

Автор: 01MDM
Дата сообщения: 27.04.2008 16:15
sk754800

Это одной строчкой не сделаешь, если бы все было так просто, то и forfiles и delold наверное не существовали. А писать код на полстраницы..
Автор: Tipulatoid
Дата сообщения: 27.04.2008 17:28
sk754800

Цитата:
Подскажите плс: как модифицировать предложенную команду, чтобы удалялись не "не-сегодняшние" файлы, а файлы датой на n дней старше, чем сегодня?


Этот код удалит все файлы *.txt старше 90 дней из текущей папки. Потестил, вроде нормально работает. Однако, прежде чем применять, советую дождаться комментариев других участников топика - возможно найдут косяки:


Код: @echo off
setlocal enabledelayedexpansion
set N=90

call :raschet %date% days_to_today


for /f "tokens=*" %%a in ('dir /b *.txt') 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

: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!
)
Автор: gryu
Дата сообщения: 28.04.2008 15:20
Коллеги, как поменять часовой пояс из командной строки.
Дата и время меняется командами date и time, а часовой пояс?
Автор: igor_andreev
Дата сообщения: 28.04.2008 15:36
gryu

Код:
start Control.exe TIMEDATE.CPL,,/Z Pacific Standard Time
Автор: gryu
Дата сообщения: 28.04.2008 15:53
igor_andreev
А без прямого указания "(GMT-07:00) Ла Пас, Мазатлан, Чихуахуа (старый)" ??
На компах с разной локализацией это пишется на разных языках.




Добавлено:
ступил.
вместо параметра "TimeZone_ХХ" смотред параметр "Display_UnInstall", а данные оттуда, тоже срабатывают
Автор: igor_andreev
Дата сообщения: 28.04.2008 16:00
gryu
Угу, это называется Mexico Standard Time 2 или Mountain Standard Time (Mexico)
Автор: gryu
Дата сообщения: 28.04.2008 16:12
igor_andreev
посмотри у себя
Цитата:
TimeZone_хх Russian Standard Time
это существующий параметр? У меня такого нет.


Добавлено:
и при вводе "E. Europe Standard Time" мне выдаётся Минск. Что то я сомневаюсь, что Минск по стандартному европейскому времени живёт.
Автор: igor_andreev
Дата сообщения: 28.04.2008 16:26
gryu

Цитата:

Цитата: TimeZone_хх Russian Standard Time

это существующий параметр? У меня такого нет.
Автор: gryu
Дата сообщения: 28.04.2008 16:42
igor_andreev

Цитата:
А что такое TimeZone_xx, ты куда смотришь?

"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\
параметр TimeZone_xx где "хх" номер.

TimeZone_22 Israel Standard Time
TimeZone_28 Eastern Standard Time
TimeZone_44 GTB Standard Time


Цитата:
Ключ "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Russian Standard Time", он всегда есть

Ну есть. Только как его ввести?
Как ты написал, не срабатывает.
на start Control.exe TIMEDATE.CPL,,/Z Russian Standard Time просто открывается аплет "дата время" без изменения.

Добавлено:
мда. .... написал и ещё раз проверил.
На этот раз сработало. Видать сам что то намудрил.


Добавлено:
Хм.
Спасибо. Но проблема осталась.
Подобное решение, к сожалению, не подходит. ... точнее подходит, но рождает другой вопрос. Я то предполагал что то типа
"команда" /t GMT+08:00
Короче общая задача.
1. считать часовой пояс, время и дату с компа.
2. поменять на заданные часовой пояс, время и дату
3. запустить блок программ
4. после окончания работы блока, вернуть всё обратно.
остаётся вопрос как загнать в переменную текущие данные о часовом поясе, времени и дате.
Автор: igor_andreev
Дата сообщения: 28.04.2008 17:24

Цитата:
1. считать часовой пояс, время и дату с компа.

Ну и сразу загвоздка, текущая зона сидит в реестре HKLM\SYSTEM\CurrentControlSet\Control\TimeZoneInformation и обзывается в соответствии с локалью винды, то есть на разных виндах по разному. В каком-то из ресурс китов была консольная утилитка именно для этого, то-ли tzchange.exe то-ли tzedit.exe, но ты же хочешь стандартными средствами?
Автор: sk754800
Дата сообщения: 28.04.2008 18:56
Tipulatoid 19:17 27-04-2008

Цитата:
Этот код удалит все файлы *.txt старше 90 дней из текущей папки. Потестил, вроде нормально работает. Однако, прежде чем применять, советую дождаться комментариев других участников топика - возможно найдут косяки:

Код:@echo off
setlocal enabledelayedexpansion
set N=90
[...]

Да... Мастерство дает красивый результат в любой сфере.
Спасибо! В субботу поставлю на испытания



Автор: gryu
Дата сообщения: 28.04.2008 20:21
igor_andreev
Наверное придётся действовать через реестр.
Путём бэкапа ветки реестра.
В принципе команда W32tm /tz выдаёт тайм зону, но в неудобном формате.
Там "сдвиг" выдаётся в минутах и выковыривать его придётся заумно.



Добавлено:

Цитата:
но ты же хочешь стандартными средствами?

именно.
Автор: Tipulatoid
Дата сообщения: 29.04.2008 06:27
sk754800

Цитата:
В субботу поставлю на испытания

Прежде чем удалять с помощью этого батника - проверь его, т.е. замени del /q "%%a" на echo Файл %%a старше %N% дней и запусти. Он выведет список файлов старше указанного числа дней. Если результат тебя удовлетворит, верни del /q "%%a" и удаляй.
Автор: 01MDM
Дата сообщения: 29.04.2008 07:26
gryu
Попробуй эти команды


Код:
wmic timezone get * /value
wmic timezone get Bias /value
Автор: vmix
Дата сообщения: 29.04.2008 19:35
01MDM

Цитата:
Попробуй DelOld, gui и command-line интерфейс.

Спасибо. Попробовал DelOld - в gui все ОК, а в cli не работает..

Вот мой батник:
---
@echo off
echo Now time>delold.log
call :test>>delold.log
exit
:test
echo %date:~-10% %time:~,5%
echo.
echo before DelOld
echo.
echo write time
dir /s /t:w /o:d /a:-d c:\test | find /I "test.bat"
echo access time
dir /s /t:a /o:d /a:-d c:\test | find /I "test.bat"
echo create time
dir /s /t:c /o:d /a:-d c:\test | find /I "test.bat"
echo.
echo DelOld /b /q /-c /n:10 /s /d "c:\test\*.*"
DelOld /b /q /-c /n:10 /s /d "c:\test\*.*"
echo.
echo after DelOld
echo.
echo write time
dir /s /t:w /o:d /a:-d c:\test | find /I "test.bat"
echo access time
dir /s /t:a /o:d /a:-d c:\test | find /I "test.bat"
echo create time
dir /s /t:c /o:d /a:-d c:\test | find /I "test.bat"
---
А это лог:
---
Now time
28.04.2008 19:21

before DelOld

write time
28.01.2008 19:05 12 test.bat
access time
28.03.2008 19:05 12 test.bat
create time
28.02.2008 19:04 12 test.bat

DelOld /b /q /-c /n:10 /s /d "c:\test\*.*"

after DelOld

write time
28.01.2008 19:05 12 test.bat
access time
28.03.2008 19:05 12 test.bat
create time
28.02.2008 19:04 12 test.bat
---
Файл не удалился, хотя по дате создания должен бы. Может чего не так делал?
Автор: JI063uk
Дата сообщения: 30.04.2008 18:59
01MDM


Цитата:
sc \\CompName start Messenger
sc /?


Это работает если служба просто остановлена а если она отключена что делать?

Автор: Ff
Дата сообщения: 30.04.2008 19:58
а можно ли получить изображение со сканнера с командной строки? желательно через freeware утилиту?
Автор: KapralBel
Дата сообщения: 30.04.2008 20:40
JI063uk

Цитата:
Это работает если служба просто остановлена а если она отключена что делать?

SC /?
Автор: JI063uk
Дата сообщения: 30.04.2008 21:20
KapralBel

Смотрел... чёто не нашел там ничего подобного (если служба отрублена) или у меня английский слабый.
А ты лучше бы написал как.....

sc continue - не работает

Автор: 01MDM
Дата сообщения: 30.04.2008 22:14
JI063uk

Вот на примере телнета, который был отключен:

Код:
sc config tlntsvr start= demand
sc start tlntsvr

sc config /?
Автор: ForposT_ForeveR
Дата сообщения: 01.05.2008 23:04
Здравствуйте.
Ребята подскажите пожалуйста, как реализовать цикл for в бат файле..
Поставили задачу в универе
Сделать цикл for (как в си), для любой команды.
Заранее спасибо за помощь)
Автор: 01MDM
Дата сообщения: 02.05.2008 00:03
ForposT_ForeveR

Не совсем понятно, что надо конкретно.

Пример разбивки даты на три переменные

Код:
@echo off
for /f "tokens=1-3 delims=./" %%i in ('date /t') do (
    set d=%%i
    set m=%%j
    set y=%%k
)
echo day %d%
echo month %m%
echo year %y%

Автор: ForposT_ForeveR
Дата сообщения: 02.05.2008 00:25
01MDM
Надо команду a1 повторить 25 раз в цикле.
Чтобы команду а1 не писать 25 раз.
Автор: 01MDM
Дата сообщения: 02.05.2008 00:39
ForposT_ForeveR

Код:
@echo off
for /l %%i in (0,1,25) do a1
Автор: Elroir
Дата сообщения: 02.05.2008 00:42
ForposT_ForeveR

Цитата:
Сделать цикл for (как в си), для любой команды.


Код: for /l %%a in (1,1,25) do (a1)
Автор: ForposT_ForeveR
Дата сообщения: 02.05.2008 09:29
Elroir
01MDM
Огромное спасибо




С П Р А З Д Н И Ч К О М В С Е Х
Автор: XXXXL
Дата сообщения: 03.05.2008 13:30
Здравствуйте.
Парни, помогите сделать чтобы батник взвешивал файл "x.dat" и если он весит от 10-15 производил запуск файла через команду call
Спасибо
Автор: 01MDM
Дата сообщения: 03.05.2008 15:10
XXXXL


Код:
@echo off
for /f %%i in ('dir /b x.dat') do (
    if %%~zi geq 10 (if %%~zi leq 15 (call:1))
)
goto:eof
:1
start bla-bla
Автор: XXXXL
Дата сообщения: 03.05.2008 15:35
01MDM, что то не получается (((

Делал так:

Код: @echo off
for /f %%i in ('dir /b x.dat') do (
if %%~zi geq 10 (if %%~zi leq 15 (call:1))
)
goto:eof
:1
call 123.bat
Автор: JI063uk
Дата сообщения: 03.05.2008 16:14

Цитата:
01MDM



Цитата:

Код:
sc config Messenger start= demand
sc start Messenger

Работает - включает остановленную службу и запускает её.
Теперь как это сделать на удаленных компах по сети????
Спасибо за помощь


Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172

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


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