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

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

Автор: KapralBel
Дата сообщения: 03.12.2005 09:29
igor_andreev
Погонял на разных языках - ошибок нет, посмотрел код - вроде бы не должно быть (по крайней мере я не заметил)
Автор: hacsoft
Дата сообщения: 03.12.2005 16:07
igor_andreev
Интересно оформлен файл, респект! Только выход в конце не стоило делать...

Собственно все свелось к тому, что бы посмотреть формат даты в реестре.
Попутный вопрос по REGEDIT.EXE: какие еще ключи (кроме /ea) он поддерживает?
Автор: Smitis
Дата сообщения: 04.12.2005 08:48
igor_andreev
Позавчера, думая над этой задачей, сформулировал её примерно так:
- Испольльзовать только возможности командного процессора и стандартных утилит, имеющихся во всех системах, начиная с NT.
- Без побочных эффектов (т.е. без попытки сменить дату, региональные настройки и т.п.).
Собственно, все пути решения свелись всего к двум:
1. Анализировать настройки в реестре и на основе их получить дату.
2. Найти стандартную утилиту, у которой где-нибудь в выводе проскакивает дата в заранее известном формате.
Собственно, через реестр, ты уже задачу решил. Поздравляю!

hacsoft

Цитата:
какие еще ключи (кроме /ea) он поддерживает

Уже было сдесь: http://forum.ru-board.com/topic.cgi?forum=62&bm=1&topic=0009#1
В кратце:
/s или -s - silent режим (отключение вывода диалоговых окон при импорте)
/e или -e - экспорт в формат unicode
/ea - экспорт в формат ansi


Добавлено:
igor_andreev
Можно добавить ещё проверку на ось - в NT 4.0, насколько мне помнится, ключа /ea нет, там как и в 9x в ansi кодировке экспорт. Что-то типа:

Код:
set exp=/ea
ver | find /i "Windows NT 4.0" > nul && set exp=/e
regedit %exp% temp.reg "HKEY_CURRENT_USER\Control Panel\International"
Автор: hacsoft
Дата сообщения: 04.12.2005 17:47
Пакет утилит для организации интерфейса в bat-файлах:
http://fsaver.hut1.ru/users/arigato/HS_Packet.rar
Может кому пригодится...
Автор: Smitis
Дата сообщения: 04.12.2005 23:10
hacsoft

Цитата:
Пакет утилит для организации интерфейса в bat-файлах

Сам писал?
Автор: hacsoft
Дата сообщения: 05.12.2005 10:08
Smitis
Да, восполнил те пробелы, которые есть в стандартном cmd. Хотя еще много чего не хватает для хорощей работы с cmd, до нормального языка программирования ему очень далеко...
Автор: igor_andreev
Дата сообщения: 05.12.2005 11:12
Smitis

Цитата:
в NT 4.0, насколько мне помнится, ключа /ea нет

Да, спасибо. Действительно нет. Но с этим в общем то обошлось, ключ /ea смело меняем на /e. NT экспортирует таким образом в ANSI, более новые OS в Unicode, а команда FIND нормально ищет и в файлах REGEDIT4(ANSI) и в "Windows Registry Editor Version 5.00"(Unicode). Это я о чем-то не том подумал, когда про /ea писал.

Цитата:
Собственно, через реестр, ты уже задачу решил. Поздравляю!

Не с чем В NT4 не работает абсолютно. Можно рассматривать первый вариант как способ узнать день-месяц-год в 2000/XP (2003 не проверял еще, но там по идее все, как в XP).
В NT4 команда SET не понимает отрицательных цифр(c минусом) var=%var:~1,-1%. От кавычек таким образом не избавиться. В sDate еще можно, там все равно разделитель даты один, или точка("."), или прямой слеш("/"), или дефис("-").
var=%var:~1,1% работает.
А в sShortDate не знаю, как в NT от кавычек откреститься. Вернее знаю, считать количество букв в sShortDate(X), видел где-то пару способов и var=%var:~1,X%. Или оставлять sShortDate в кавычках, но тогда придется проверять еще все варианты с пробелами, букфф блин в батнике в два раза больше станет. Сейчас то батнику фиолетово "dd.MM.yy" или "dd. MM. yy".
Еще в NT пару форматов дурацких обнаружил...
И CALL :метка почему-то не работает как надо, хотя должна...

В общем я постараюсь добить этот cutdate.cmd до полной работоспособности на всех NT-образных, но вообще жалко из-за полумертвой ОС раздувать код. NT4 уже и не стоит то нигде практически...

Кстати, есть в каком-нибудь языке форматы год.день.месяц (типа yy.dd.MM, yyyy/d/M)?
То есть год - первым, день - вторым, месяц - третьим.
Нигде не увидел пока, а то еще кучу строк в батник добавлю


Добавлено:
У меня Punto Switcher сломался, слабак Сидит в уголке, охреневший от такого количества языковых раскладок и не знает, что ему делать.
Автор: Smitis
Дата сообщения: 05.12.2005 22:05
igor_andreev

Цитата:
но вообще жалко из-за полумертвой ОС раздувать код. NT4 уже и не стоит то нигде практически...

У нас, например, ещё в начале этого года на серваке стояла. Несколько лет назад отказались от 2К в пользу неё. Впрочем, 2К тогда сырая была, ещё безо всяких SP. Если бы новые админы не угробили старушку, работала ла бы долго. А что - есть не просила, домен держала, проксю и почту тянула (стороними, конечно же прогами), места на диске занимала мизер, ресурсов совсем мало жрала. Жаль...

Добавлено:
Впрочем, "раздувать код" действительно не стоит
Автор: Smitis
Дата сообщения: 06.12.2005 08:01
Маленькая задачка на сообразительность для всех
Вывести из командного файла строку "OFF" (без кавычек). Т.е. так, чтобы в выведенной строке были только эти три буквы. Ну можно ещё и "ON" в другой строке вывести.
Вот так (кусок текстового скриншота):

Код:
C:\Test>off-on.cmd
OFF
ON
C:\Test>
Автор: igor_andreev
Дата сообщения: 06.12.2005 08:37

Цитата:
Вывести из командного файла строку "OFF" (без кавычек).

Шесть вариантов знаю Кто больше? Скрою под тегом MORE, пусть другие сами сначала сообразят, как это сделать. [more]

Код:

@ECHO OFF

ECHO.OFF
ECHO.ON
ECHO/OFF
ECHO/ON
ECHO\OFF
ECHO\ON
ECHO+OFF
ECHO+ON
ECHO[OFF
ECHO[ON
ECHO]OFF
ECHO]ON

PAUSE

Автор: Smitis
Дата сообщения: 06.12.2005 09:14
igor_andreev
Я в тебе и не сомневался
Автор: hacsoft
Дата сообщения: 06.12.2005 11:21

Цитата:
Маленькая задачка на сообразительность для всех
Вывести из командного файла строку "OFF" (без кавычек).

Вот, что я смог сделать:

Способ 1:

Код: @echo off
echo XXX > OFF
dir OFF /b
del OFF
Автор: KapralBel
Дата сообщения: 06.12.2005 11:28
hacsoft

Цитата:
Остается побочный файл OFF.bat, не придумал, как его убрать без сообщений

Del off.bat /q
Автор: Smitis
Дата сообщения: 06.12.2005 12:00
hacsoft
В способе 2 перед OFF лишний пробел выводиться.
Автор: hacsoft
Дата сообщения: 06.12.2005 12:26
Smitis
Это опять проблема обработки псевдотега code на данном форуме, про которую я писал на 1 странице. Если удалить все пробелы в конце каждой строки (которые добавляются автоматически на этом форуме, не пойму зачем?), то все нормально.

KapralBel
Удалить его не проблема, проблема его так удалить, что бы ничего на экран не вывелось.
Посмотрим 2 варианта:

Код: @prompt $s$h
@echo @prompt > OFF.bat
OFF
@del OFF.bat /q
Автор: MonsterMax
Дата сообщения: 06.12.2005 12:54
а как в локальной сетке при условии что я везде на машинах являюсь админом удалить определенные файлы? Естественно при наличии их там.
Самое сложное для меня не найти и удалить файл а как в скрипте задать чтоб он по всей подсетке пробежался и покилял?
Автор: hacsoft
Дата сообщения: 06.12.2005 13:49
Практическая задача:
Разыменование переменной
Попробуем реализовать ссылки в командных файлах
Пусть в переменной %var% записано имя другой переменной, значение которой нам надо вывести на экран.
Как это сделать?
ECHO %%var%% - не сработает...
Автор: KapralBel
Дата сообщения: 06.12.2005 14:42
hacsoft
Задача "Калькулятор".

Код:
@Echo Off
Set /p input=Введите выражение:
Set /a output=%input%
Echo %input%=%output%
Автор: Smitis
Дата сообщения: 06.12.2005 21:24
hacsoft

Цитата:
Это опять проблема обработки псевдотега code на данном форуме,

Пардон, это у меня на экране при проверке лишний пробел появлялся. Очепятка была
Кстати, твой батник можно переименовать в OFF.BAT и сделать таким:

Код:
@prompt $s$h
@if "%off%" == "1" exit
@set off=1
%~n0
Автор: hacsoft
Дата сообщения: 06.12.2005 21:35
KapralBel
Спасибо за код разыменования переменной, все бился, как это сделать (в функции обрабатывается переданный ей массив по ссылке).

Задача: Лабиринт
Классическая задача на нахождение кратчайшего пути из т. B в т. E. Вот на досуге решил ее средствами командных файлов. В файле input.txt должна лежать карта лабиринта. Пример:

Код: 0000000000
1111111110
0000100100
0100100100
0100100000
0100000100
0000100110
0000100100
0110110000
0010100000
Автор: Refugee
Дата сообщения: 06.12.2005 21:36
Разыменование переменной
Set var1=123
set var2=var1
setlocal ENABLEDELAYEDEXPANSION
echo !%var2%!

Автор: russianczar
Дата сообщения: 08.12.2005 04:53
Ребята, можно ли сделать батник на русификацию компьютера?
Тоесть чтобы в Региональных настройках ставилась 20880 Cyrillic Russian, и выставлялся для програм Russian?
Автор: Death_INN
Дата сообщения: 08.12.2005 06:15
russianczar
Для нижеследующих действий необходимо написать батник:
-----------
REGEDIT4

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage]
"20880"="c_20880.nls"

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\Language]
"Default"="0419"
----------
Файл с_20880.nl_ распаковать из дистрибутива (с_20880.nls) винды и поместить в папку system32
Автор: shibog
Дата сообщения: 09.12.2005 10:13
а кто объяснит, как заставить правильно работать в cmd.exe строку
if exist *.* echo Files exist
сообщение выводится независимо от наличия файлов в каталоге.
Проявляется в ОС win2000, XP, win2003server
Автор: KapralBel
Дата сообщения: 09.12.2005 11:11
shibog

Код:
@Echo Off
For %%a In (1\*.*) Do Call :File_Ex %%a
If Defined FileExist Echo Exist
GoTo :EOF

:File_Ex
Set FileExist=Yes
GoTo :EOF
Автор: russianczar
Дата сообщения: 09.12.2005 16:41
Напишите мне пожалуйста батник на руссификацию, вот полный список действий:
Надо чтобы батник сам:
В "Региональных Настройках" Выставлял 20880 Cyrillic Russian, также выставлял для не юникодных программ язык Russian.
Сам помещал файл с_20880.nls в System 32
И в конце, чтобы добавлял расскладку русского языка...

Зарание благодарю !
Автор: morjov
Дата сообщения: 10.12.2005 14:30
А как можно сделать батник, чтобы он файлы перименовал в соответствии с датой создания, т.е. ГГГГ_ММ_ДД_ЧЧ_ММ_СС[b/]?

Хоца фотки в нормальный вид переименовать и в одну папку кинуть.

[b]Добавлено:

И можно ли пикнуть спикером из батника?
Автор: KapralBel
Дата сообщения: 10.12.2005 14:58
morjov

Код:
@Echo Off
For %%a In (*.txt) Do @Call :Rena %%a %%~ta
GoTo :EOF

:Rena
Set f_Name=%1
Set f_Date=%2
Set f_Time=%3
Set f_Day=%f_Date:~0,2%
Set f_Month=%f_Date:~3,2%
Set f_Year=%f_Date:~6,4%
Set f_Hour=%f_Time:~0,2%
Set f_Min=%f_Time:~3,2%
Ren %F_Name% %f_Year%_%f_Month%_%f_Day%_%f_Hour%_%f_Min%.txt
GoTo :EOF
Автор: morjov
Дата сообщения: 10.12.2005 17:20
KapralBel, сенькс! А секунды никак нельзя? А то у меня много снимков в одну и ту же минуту.
Автор: igor_andreev
Дата сообщения: 10.12.2005 19:20

Цитата:
И можно ли пикнуть спикером из батника?


Код:

@ECHO OFF
ECHO N BEEP.COM>BEEP.SCR
ECHO E 0100 B0 07 CD 29 C3>>BEEP.SCR
FOR %%A IN (RCX 0005 W Q) DO ECHO %%A>>BEEP.SCR
DEBUG<BEEP.SCR>NUL
DEL BEEP.SCR

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

Предыдущая тема: Вернуть библиотеку АТМ (поддержка шрифтов Type 1)


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