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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
sk754800



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Tipulatoid Командная строка, батники, сценарии (bat, cmd) 2
 

Цитата:
Цитата:не мог бы кто-нибудь пояснить этот кусочек когда-то приведенного тут кода...прям по частям по буковкам если можно...    
 
Действительно, связно объяснить сложно. Надеюсь, объясню кое-что:  
 
for /f "tokens=*" %%i in ('dir /b /s /a c:\1') do (echo %%~ti | findstr /v %date% 1>nul && del /q "%%i")  
[...]
 

Спасибо за детальное объяснение!

Подскажите плс: как модифицировать предложенную команду, чтобы удалялись не "не-сегодняшние" файлы, а файлы датой на n дней старше, чем сегодня?
 
Утилитку DelOld посмотрел. Но приведенное решение imho красивее и переносимо без дополнения Path и переноса утилиты delold...
 

Всего записей: 90 | Зарегистр. 06-11-2006 | Отправлено: 15:28 27-04-2008 | Исправлено: sk754800, 15:31 27-04-2008
01MDM



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
sk754800
 
Это одной строчкой не сделаешь, если бы все было так просто, то и forfiles и delold наверное не существовали. А писать код на полстраницы..

Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 17:15 27-04-2008
Tipulatoid



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
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!
)

 
Изменяемые параметры выделены жирным - сколько дней выставлять, и какие именно файлы и из каких папок удалять.

Всего записей: 349 | Зарегистр. 22-12-2006 | Отправлено: 18:28 27-04-2008 | Исправлено: Tipulatoid, 19:17 27-04-2008
gryu



дикий гусь
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Коллеги, как поменять часовой пояс из командной строки.
Дата и время меняется командами date и time, а часовой пояс?

Всего записей: 13019 | Зарегистр. 15-03-2006 | Отправлено: 16:20 28-04-2008
igor_andreev

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

Код:

start Control.exe TIMEDATE.CPL,,/Z Pacific Standard Time


Код:

start Control.exe TIMEDATE.CPL,,/Z Russian Standard Time

Названия зон (а-ля Russian Standard Time) в реестре HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones
 
Добавлено:
Или
Код:

rundll32.exe SHELL32.DLL,Control_RunDLL TIMEDATE.CPL,,/Z Pacific Standard Time

Всего записей: 1704 | Зарегистр. 08-12-2004 | Отправлено: 16:36 28-04-2008 | Исправлено: igor_andreev, 16:39 28-04-2008
gryu



дикий гусь
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
igor_andreev
А без прямого указания "(GMT-07:00) Ла Пас, Мазатлан, Чихуахуа (старый)" ??  
На компах с разной локализацией это пишется на разных языках.
 
 
 
 
Добавлено:
ступил.  
вместо параметра "TimeZone_ХХ" смотред параметр  "Display_UnInstall", а данные оттуда, тоже срабатывают

Всего записей: 13019 | Зарегистр. 15-03-2006 | Отправлено: 16:53 28-04-2008
igor_andreev

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
gryu
Угу, это называется Mexico Standard Time 2 или Mountain Standard Time (Mexico)

Всего записей: 1704 | Зарегистр. 08-12-2004 | Отправлено: 17:00 28-04-2008 | Исправлено: igor_andreev, 17:02 28-04-2008
gryu



дикий гусь
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
igor_andreev
посмотри у себя
Цитата:
TimeZone_хх   Russian Standard Time  
это существующий параметр? У меня такого нет.  
 
 
Добавлено:
и при вводе "E. Europe Standard Time" мне выдаётся Минск. Что то я сомневаюсь, что Минск по стандартному европейскому времени живёт.  

Всего записей: 13019 | Зарегистр. 15-03-2006 | Отправлено: 17:12 28-04-2008
igor_andreev

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

Цитата:

Цитата:
TimeZone_хх   Russian Standard Time
 
это существующий параметр? У меня такого нет.  

А что такое TimeZone_xx, ты куда смотришь? Ключ "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Russian Standard Time", он всегда есть

Цитата:
и при вводе "E. Europe Standard Time" мне выдаётся Минск. Что то я сомневаюсь, что Минск по стандартному европейскому времени живёт.

Не сомневайся GMT +2 у них, на час меньше, чем в Москве, как и в Прибалтике. Просто в английской XP обычно там фигурирует Бухарест, а в русской Минск. Но с какого боку не посмотри - GMT +02:00 оно и есть GMT +02:00
 

Всего записей: 1704 | Зарегистр. 08-12-2004 | Отправлено: 17:26 28-04-2008
gryu



дикий гусь
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
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. после окончания работы блока, вернуть всё обратно.  
остаётся вопрос как загнать в переменную текущие данные о часовом поясе, времени и дате.

Всего записей: 13019 | Зарегистр. 15-03-2006 | Отправлено: 17:42 28-04-2008 | Исправлено: gryu, 18:01 28-04-2008
igor_andreev

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

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

Ну и сразу загвоздка, текущая зона сидит в реестре HKLM\SYSTEM\CurrentControlSet\Control\TimeZoneInformation и обзывается в соответствии с локалью винды, то есть на разных виндах по разному. В каком-то из ресурс китов была консольная утилитка именно для этого, то-ли tzchange.exe то-ли tzedit.exe, но ты же хочешь стандартными средствами?

Всего записей: 1704 | Зарегистр. 08-12-2004 | Отправлено: 18:24 28-04-2008
sk754800



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Tipulatoid 19:17 27-04-2008

Цитата:
Этот код удалит все файлы *.txt старше 90 дней из текущей папки. Потестил, вроде нормально работает. Однако, прежде чем применять, советую дождаться комментариев других участников топика - возможно найдут косяки:  
 
Код:@echo off  
setlocal enabledelayedexpansion  
set N=90  
[...]
 

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

 
 

Всего записей: 90 | Зарегистр. 06-11-2006 | Отправлено: 19:56 28-04-2008 | Исправлено: sk754800, 20:02 28-04-2008
gryu



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

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

именно.

Всего записей: 13019 | Зарегистр. 15-03-2006 | Отправлено: 21:21 28-04-2008
Tipulatoid



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

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

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

Всего записей: 349 | Зарегистр. 22-12-2006 | Отправлено: 07:27 29-04-2008
01MDM



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

Код:
 
wmic timezone get * /value
wmic timezone get Bias /value
 

 
Похоже, что вторая определяет сдвиг времени в минутах относительно гринвича.
Вот на коленке:

Код:
 
for /f "tokens=2 delims==" %%i in ('wmic timezone get Bias /value') do set tz=%%i
set /a tz/=60
echo %tz%
 

Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 08:26 29-04-2008 | Исправлено: 01MDM, 08:37 29-04-2008
vmix



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
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
---
Файл не удалился, хотя по дате создания должен бы. Может чего не так делал?

Всего записей: 162 | Зарегистр. 22-10-2002 | Отправлено: 20:35 29-04-2008
JI063uk



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

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

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

Всего записей: 55 | Зарегистр. 24-01-2008 | Отправлено: 19:59 30-04-2008 | Исправлено: JI063uk, 20:02 30-04-2008
Ff



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
а можно ли получить изображение со сканнера с командной строки? желательно через freeware утилиту?

Всего записей: 75 | Зарегистр. 29-02-2004 | Отправлено: 20:58 30-04-2008
KapralBel



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

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

SC /?

Всего записей: 11354 | Зарегистр. 16-02-2005 | Отправлено: 21:40 30-04-2008
JI063uk



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
KapralBel
 
Смотрел... чёто не нашел там ничего подобного (если служба отрублена) или у меня английский слабый.
А ты лучше бы написал как.....
 
sc continue - не работает
 

Всего записей: 55 | Зарегистр. 24-01-2008 | Отправлено: 22:20 30-04-2008 | Исправлено: JI063uk, 22:47 30-04-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.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru