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

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

Автор: res2001
Дата сообщения: 07.10.2010 14:23
Free_Soft

Цитата:
т.е. при выводе текста через eсho в кириллице что chcp 1251 что DOS кодировка -все равно?

Ну да.
Если chcp 1251, то батник сохраняй в 1251, если chcp не используешь - батник в 866.

Добавлено:
главное то что? главное что юзер увидел читабельный текст, а не кракозябры.
Автор: wolf0425
Дата сообщения: 07.10.2010 15:00

Цитата:
главное то что? главное что юзер увидел читабельный текст, а не кракозябры.

для того чтоб юзер увидел 1251 без кракозябр - ещё и фонт консоли надо поменять с дефолтового терминала на какой-то уникодный, например на люсиду.

а вообще chcp 1251 ставится когда предполагается работа с текстовыми файлами в виндовой кодировке и возможно что-то надо будет в этой же кодировке напечатать, или когда сам батник пишется в виндовой кодировке.
Автор: Dead_Moroz
Дата сообщения: 07.10.2010 16:46
Возможно, вопрос и глупый, но:
на флешке есть каталог OEMINFO, в котором лежат файлы для добавления OEM-информации в "Свойства системы" - oemlogo.bmp, oeminfo.ini - это для WXP; W7.reg - для Windows 7.
Там же, в этом каталоге лежат примитивнейшие файлы:

Код: @echo off
copy oeminfo.ini %systemroot\system32% /Y
copy oemlogo.bmp %systemroot%\system32 /Y
Автор: smirnvlad
Дата сообщения: 07.10.2010 17:08
Dead_Moroz

Код:
@echo off
copy "%~dp0oemlogo.bmp" "%systemroot%\system32" /Y
reg import "%~dp0OEMLogoWin7.reg"
Автор: Dead_Moroz
Дата сообщения: 07.10.2010 17:09
Спасибо. А, все-таки, почему W7 не поняла, что копируемый файл надо брать из текущего каталога?
Автор: smirnvlad
Дата сообщения: 07.10.2010 18:46
Dead_Moroz

Цитата:
А, все-таки, почему W7 не поняла, что копируемый файл надо брать из текущего каталога?


при запуске от другого пользователя меняется рабочая папка, проверить можно перенаправив вывод команды cd в файл, а в той папке нет указанных файлов


Код:
@echo off
cd > c:\2906123.txt
Автор: Maximus777
Дата сообщения: 08.10.2010 08:04
Люди добрые! Подарите плиз кусок кода, решающий следующую задачу. Проверяется один конкретный файл, если время его последнего изменения была более часа назад, то ...
Дальше я уже сам.
Автор: res2001
Дата сообщения: 08.10.2010 08:24
Maximus777
Похожие задачи уже решались. Посмотри тут.
Автор: Maximus777
Дата сообщения: 08.10.2010 08:43
res2001
я шапку процедил перед задаванием вопроса. Скрипты отпадают. А время последнего изменения файла я так и не понял как узнать.
Ага! Вот нашёл тему "Переименовывание файлов по дате модификации". Щас попробую приспособить.
Автор: king_stiven
Дата сообщения: 08.10.2010 08:59

Цитата:
Скрипты отпадают.

Религия не позволяет? Просто интересно узнать почему. Ведь там скрипт автоматически создаётся батником.

Цитата:
Проверяется один конкретный файл, если время его последнего изменения была более часа назад, то

Вот там есть пример с VBS только по созданию а не по изменению. Сам в VBS не шарю, но думаю можно немного изменить, кто разбирается. и по изменению так же удобно будет.

Добавлено:

Цитата:
А время последнего изменения файла я так и не понял как узнать.

for %%i in ("файл") do echo %%~ti
Автор: res2001
Дата сообщения: 08.10.2010 09:03
Maximus777
С датами много проще работать через vbs - бат не понимает дат вообще.

Цитата:
А время последнего изменения файла я так и не понял как узнать.

например если имя файла передается в батник как параметр, то так:
echo %~t1

Добавлено:
Смотри for /?
Автор: Maximus777
Дата сообщения: 08.10.2010 09:12

Цитата:
Религия не позволяет?

Точно! Церковь святого Билли запрещает использование скриптов

Нашёл в справке выдачу даты и времени создания. А как воспользоваться только временем? Или вообще возможно ли получить дату не в человечьем формате, а в машинном (когда и дата и время в одном флаконе)? Чтобы без лишних движений вычислить последний час.

Код: Set f_DateTime=%~t1
echo %f_DateTime%
Автор: king_stiven
Дата сообщения: 08.10.2010 09:24

Цитата:
Церковь святого Билли запрещает использование скриптов

Visual Basic Scripting Edition (обычно просто VBScript) — скриптовый язык программирования, интерпретируемый компонентом Windows Script Host. Он широко используется при создании скриптов в операционных системах семейства Microsoft Windows.

VBScript был создан компанией Microsoft
Автор: res2001
Дата сообщения: 08.10.2010 09:28
Maximus777

Цитата:
А как воспользоваться только временем?

Смотри set /? - там есть конструкции, чтоб вырезать подстроку.
Только временем не получится, вдруг у тебя дата файла будет 00:30 к примеру - а это уже другой день.
Обрати внимание на лидирующие нули - от них надо избавлятся, иначи в арифметических операциях смд будет принимать число за восьмеричное.

Цитата:
Или вообще возможно ли получить дату не в человечьем формате, а в машинном (когда и дата и время в одном флаконе)?

Я же писал - батники не понимают дат в принципе, для бат это просто набор символов, не более.

Цитата:
Чтобы без лишних движений вычислить последний час.

Чтоб без лишних движений юзай VBS. А в бат будет много лишних движений.

Цитата:
Церковь святого Билли запрещает использование скриптов

По моему этот святой очень даже за vbs разве что ты сидишь на Вин9х до сих пор.

Добавлено:
Тебе потому сразу никто и не ответил толком, что реализовать твою задачу на бат можно - но геморно.
Автор: king_stiven
Дата сообщения: 08.10.2010 09:31
Set f_DateTime=%~t1
echo %f_DateTime:~-5%

смотри set/?
Автор: Maximus777
Дата сообщения: 08.10.2010 10:39
Вобщем благодаря вашим советам таки родил. Вот:

Код: @echo off
::Дата и время последней модификации файла
Set f_DateTime=%~t1
::Дата последней модификации файла
Set f_Date=%f_DateTime:~0,10%
::Часы из времени последней модификации файла
Set f_h=%f_DateTime:~11,2%
::Минуты из времени последней модификации файла
Set f_m=%f_DateTime:~14,2%
::Текущая дата
Set t_Date=%DATE%
::Часы из текущего времени
Set t_h=%TIME:~0,2%
::Минуты из текущего времени
Set t_m=%TIME:~3,2%
::Разница в минутах
Set a=%t_m%-%f_m%
if %t_Date%==%f_Date% (
if %f_h%==%t_h% (
if %a% GTR 30 goto :EOF
)
)
echo Bingo!
Автор: Rush
Дата сообщения: 08.10.2010 10:55
Maximus777

Цитата:
Правда сократил время до 30 минут


Код: Set /a a=%t_h%%t_m%-%f_h%%f_m%
Автор: res2001
Дата сообщения: 08.10.2010 10:56
Maximus777
нда ... говорю же геморно.
У тебя не учитывается еще несколько ситуаций:
1. время файла и текущее в одной дате, но разные часы и разница меньше 30 мин.
2. время файла и текущее в разных датах, такое тоже возможно.
Автор: Maximus777
Дата сообщения: 08.10.2010 10:57
Rush
спасибо, про "/а" я забыл.
Автор: Rush
Дата сообщения: 08.10.2010 10:57
в пределах одной даты, разумеется
Автор: res2001
Дата сообщения: 08.10.2010 10:58
А с ведущими нулями в числах у тебя проблем нет? Впрочем это зависит от региональных настроек виндов.
Автор: Maximus777
Дата сообщения: 08.10.2010 10:58
res2001
усё там норм. Если дата отличается, то уже работаем. А также если дата совпадает, но отличается час, тоже работаем.

Добавлено:

Цитата:
А с ведущими нулями в числах у тебя проблем нет? Впрочем это зависит от региональных настроек виндов.

Проблем не должно быть, ибо на одной и той же винде сравниваются два времени. Уж в пределах то одной винды они будут в одном формате?

Добавлено:
Блин! Вроде вот только разбирался как обнулить файл, не могу найти инфу. Склероз, тудыть его в качель! Подскажите, а!
echo %1 пихает в файл строку "Режим вывода команд на экран (ECHO) отключен."
Автор: res2001
Дата сообщения: 08.10.2010 11:12
Maximus777
Да про ведущие нули, в таком варианте проблем не будет. Вылезет если арифметические операции использовать.

Цитата:
усё там норм. Если дата отличается, то уже работаем. А также если дата совпадает, но отличается час, тоже работаем.

Так бы сразу и говорил

Цитата:
cho %1 пихает в файл строку "Режим вывода команд на экран (ECHO) отключен."

echo.%1 поможет
Автор: Maximus777
Дата сообщения: 08.10.2010 11:15

Цитата:
echo.%1 поможет

echo.>%1 сабака оставляет перевод строки.

nul>%1 обнуляет файл, но шкнит про отказ в доступе.
Автор: Rush
Дата сообщения: 08.10.2010 11:24
Maximus777

Цитата:
оставляет перевод строки


Код:
@echo off
> #.scr echo n ech.com
>>#.scr echo e 0100 bb 80 00 43 80 3f 0d 75 fa c6 07 24 b4 09 ba 82
>>#.scr echo e 0110 00 39 da 7f 02 cd 21 b4 4c cd 21
>>#.scr echo rcx
>>#.scr echo 001b
>>#.scr echo w
>>#.scr echo q
>>#.scr echo.
debug<#.scr>nul
del #.scr
ech>%1
del ech.com
Автор: wolf0425
Дата сообщения: 08.10.2010 11:30

Цитата:
Вроде вот только разбирался как обнулить файл, не могу найти инфу.

например cd . >%1
Автор: Maximus777
Дата сообщения: 08.10.2010 12:06
wolf0425
только собрался отписать ответ ...
Я пришёл к такому же выводу, только с двумя точками. Но полюбасу спасибо.
Автор: wolf0425
Дата сообщения: 08.10.2010 14:16

Цитата:
Я пришёл к такому же выводу, только с двумя точками.
с двумя точками - команда ещё и текущай каталог изменяет, а так только файл обнуляет.
Автор: NIKZZZZ
Дата сообщения: 08.10.2010 15:02
Maximus777

Цитата:
Вроде вот только разбирался как обнулить файл, не могу найти инфу.

Например:


Код: echo. 2>file
Автор: wolf0425
Дата сообщения: 08.10.2010 15:28
NIKZZZZ а твой пример печатает лишнюю строку в консоль.
можно конечно доработать echo>nul 2>file
но вариант c cd покрасивее

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

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


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