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

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

Автор: wolf0425
Дата сообщения: 13.06.2007 18:15

Цитата:
просто не понимаю сути кода по проверки версии ...

ver |find "4." && for /f "tokens=1,2" %%u in ('date /t') do set d=%%v
выполнить команду ver, вывод перенаправить (|) в команду find "4."
если find завершилась с нулевым кодом ошибки (т.е. в выводе ver есть сочетание 4. - т.е. ОС winNT4.0)
то выполнить следующую за && часть строки: с помощью команды for получить в переменной d второе (%%v) слово от вывода команды date /t
дальше с помощью команд set из %d% нарезать и склеить куски...
Автор: Elroir
Дата сообщения: 13.06.2007 18:17
wolf0425

Цитата:
в региональных настройках оно действительно правится, но проще без проверки версий ОС

В Win2000 и ниже не определена переменная date.

LightSoft
Как альтернатива тому, что привел wolf0425 и для того, чтобы батник продолжал работать в любых NT системах, добавь к батнику, четвертую строчку:
ver |find "5.2" && for /f %%u in ('date /t') do set d=%%u


Цитата:
всё же может мне кто-то доступно объяснить суть приведённого мною кода

В первых, теперь уже четырех строках, проверяется версия операционной системы (ver | find "...") и в зависимости от результата, определяется переменная d, в которую и записывается текущая дата. Проверка делается потому, что в разных NT системах дата выводится немного по разному.
А дальше создаются переменные с разным форматом даты - из переменной d вытаскиваются подстроки определяющие день, месяц и год и компонуются в зависимости от определяемого формата.
Техническую сторону надо смотреть в ответе Maza Faka
Автор: wolf0425
Дата сообщения: 13.06.2007 18:20

Цитата:
В Win2000 и ниже не определена переменная date.
я сидел на win2000 когда то писал, и проверил - есть она там.

вот в WinNT (4.0) - переменной может и нет, но это ныне мало кому интересно.
Хотя если совместимость с winNT4 нужна - можно не разбирая версий в одну строку переопределить %date%
for /f "delims=" %%a in ('date /t') do set "%date%=%%a"
и далее по моему варианту...
Автор: LightSoft
Дата сообщения: 13.06.2007 18:22
Огромное всем спасибо -- плод для размышлений получил! Буду учиться и рости над собой :)

Автор: Elroir
Дата сообщения: 13.06.2007 18:39
wolf0425

Цитата:
я сидел на win2000 когда то писал, и проверил - есть она там

Действительно есть. Перепутал
Автор: sadmn
Дата сообщения: 14.06.2007 16:30
Как лучше переделать проверку на то, изменился ip или нет, если
искомый IP (внешний) выходит первым, а не вторым, как в решении на 10 странице?
Можно ли сделать, чтобы то, что сейчас делает строка
for /f "tokens=1* delims=:. " %%a in ('ipconfig ^| find "IP"') do set "old_address=%%b"
ограничивалось первым найденным "IP"?
[more=ответ ipconfig]
пример:
в случае неподключенной сети:

Код: Подключение по локальной сети - Ethernet адаптер:
DNS-суффикс этого подключения . . :
IP-адрес . . . . . . . . . . . . : 169.254.195.178
Маска подсети . . . . . . . . . . : 255.255.0.0
Основной шлюз . . . . . . . . . . :
Автор: newhome
Дата сообщения: 14.06.2007 16:55
Здравствуйте.
Подскажите пожалуйста команду для чтения чисел из файла и вычисления их суммы.
Есть код:
----------------------------
del sum.txt
for /F "usebackq tokens=1 delims=" %%i in (`dir /b *.txt`) do (set fname=%%i)
for /F "usebackq tokens=9,10 delims='ru. " %%i in (`find %fname% "R'"`) do (echo %%i >>sum.txt)
----------------------------
Нужно, чтобы пользователь выбирал из списка файлов в конкретной папке
любой. Далее этот файл обрабатывается по заданной маске ("tokens=9,10 delims='ru. ")
и в файл sum.txt записывается следующее:
10000
26000
12344
...и.т.д.
Далее нужно, чтобы указанные числа складывались (их может быть до 10000) и результат выводился на экран.

Долго мучился. Не могу придумать как сделать дальше...


Автор: Elroir
Дата сообщения: 14.06.2007 17:05
sadmn
Измени первый и второй for так:

Код:
...
for /f "tokens=1* delims=:. " %%a in ('ipconfig ^| find "IP"') do (
set "new_address=%%b"
goto cont2
)
:cont2
...
Автор: Maza Faka
Дата сообщения: 14.06.2007 17:45
newhome

Цитата:
чтения чисел из файла и вычисления их суммы

Какой формат файла? Приведи пример.


Цитата:
в файл sum.txt записывается следующее:
10000
26000
12344

В файле могут быть числа начинающиеся с нуля?


Цитата:
Далее нужно, чтобы указанные числа складывались

Числа из одного файла или из всех выбранных?
Автор: sadmn
Дата сообщения: 14.06.2007 18:42
Elroir
Спасибо! т.е., если я правильно понял, просто цикл прерывается после нахождения первого "IP" ?
тогда вот что у меня в итоге получилось для (пере)подключения с проверкой сменился ли IP для висты: [more=листинг]

Код: @echo off
setlocal
rem проверка, включен ли модем с таймаутом в 30 секунд
set "try=0"
:loc
cls
echo Установка связи с модемом %try%
set /a "try+=1"
ipconfig | Find /i "IPv4-адрес">nul && goto start
ping -n 2 127.0.0.1>nul
if "%try%"=="30" goto fail
goto loc
:start
set "con=0"
set "trya=1"
for /f "tokens=1* delims=:. " %%a in ('ipconfig ^| find "IPv4-адрес"') do (
set "old_address=%%b"
goto reconnect
)
:reconnect
set "try=1"
set /a "con+=1"
rem проверка, было ли подключение на момент запуска батника, если нет - пропуск паузы в 5 секунд
if not "%old_address:~0,3%"=="[первые 3 цифры внутреннего IP]" (rasdial "/имя подключения/" /d) else if "%trya%"=="1" goto try
:wait
for /L %%j in (5,-1,1) do cls & echo начало ПОДКЛЮЧЕНИЕ# %con% ПОПЫТКА# %try% & echo ЖДЁМ 5 секунд [ %%j% ] & ping -n 2 127.0.0.1 >nul
:try
cls
echo ПОДКЛЮЧЕНИЕ# %con% ПОПЫТКА# %try% (%trya%)
rasdial "/имя подключения/" "/логин/" "/пароль/"
if %errorlevel% LEQ 1 goto okay
set /a "try+=1"
set /a "trya+=1"
Goto wait
:fail
Echo Связь с модемом не установлена
pause
:okay
for /f "tokens=1* delims=:. " %%a in ('ipconfig ^| find "IPv4-адрес"') do (
set "new_address=%%b"
goto check
)
:check
if "%new_address%"=="%old_address%" goto reconnect
Автор: misha1950
Дата сообщения: 14.06.2007 20:54
Помогите пожалуйста написать Bat. Для перезагрузки программы с таймаутом 10-20сек.
Спасибо.
Автор: qwesz
Дата сообщения: 14.06.2007 22:20
А можно создать интерактивный батник? Так чтобы по ходу выполнения можно было вводить значения в диалоговом режиме?
Автор: wolf0425
Дата сообщения: 14.06.2007 22:42
qwesz RTFM set /? на тему set /p
Автор: LightSoft
Дата сообщения: 15.06.2007 09:57
Подскажите плз... Можно ли вывести полный лог работы батника, и если можно, то как ?
Пробовал в 1й строке после @Echo off дописывать >log.txt , но файл всегда выходит пустой :(
Автор: KapralBel
Дата сообщения: 15.06.2007 10:22
LightSoft
super.cmd >log.txt
Автор: slayer120
Дата сообщения: 15.06.2007 10:32
Вопрос

for /f "tokens=2,3* delims= " %%o in (result.txt) do (
for /f "tokens=1* delims=\ " %%u in ("%%~p") do (
IF NOT EXIST %%u.txt ( del /Q e:\arch\%%u\
xcopy /i %%o e:\arch\%%u /Y /F /Z
echo Copying good %%u %Date% %Time% >> log_copy.log
)))
Почему то в лог пишется одно и то же время (первого копирования)
т.е. %Date% %Time% не меняются. А хотелось бы видеть время окончания копирования очередного файла. Или перед echo надо задержку ставить?

Автор: KapralBel
Дата сообщения: 15.06.2007 10:38
slayer120


Код:
SETLOCAL ENABLEDELAYEDEXPANSION
for /f "tokens=2,3* delims= " %%o in (result.txt) do (
for /f "tokens=1* delims=\ " %%u in ("%%~p") do (
IF NOT EXIST %%u.txt ( del /Q e:\arch\%%u\
xcopy /i %%o e:\arch\%%u /Y /F /Z
echo Copying good %%u !Date! !Time! >> log_copy.log
)))
Автор: LightSoft
Дата сообщения: 15.06.2007 10:48
KapralBel
Хм.. что-то не выходит ... на сколько я понял мне нужно написать "название батника".cmd >log.txt но файл всё равно идёт пустой.
Автор: SPV_Ed
Дата сообщения: 15.06.2007 10:58

Цитата:
Можно ли вывести полный лог работы батника, и если можно, то как ?

В самом батнике после каждой команды, работу которой нужно журналировать, добавить >>c:\logfile.txt 2<&1
Автор: KapralBel
Дата сообщения: 15.06.2007 11:18
LightSoft
А в консоль все равно выводится?
Автор: LightSoft
Дата сообщения: 15.06.2007 11:24
KapralBel
Да в консоль выводиться ... у меня получилось логиование всего батника, если запускать его из командной строки -- т.е. можно привернуть для этого 2й батник!
банально 1.bat>log1.txt
Но правда придёться иметь в 2 раза больше бат файлов :)
Автор: KapralBel
Дата сообщения: 15.06.2007 11:37
LightSoft
Тогда воспользуйся советом SPV_Ed
Автор: Maza Faka
Дата сообщения: 15.06.2007 11:51
LightSoft

Цитата:
Можно ли вывести полный лог работы батника, и если можно, то как ?

В начале батника вставь этот код:

Код:
@echo off
if not defined var (
set var=ok
cmd /c 1.bat> log1.txt
goto :eof)
...You code...
................
Автор: LightSoft
Дата сообщения: 15.06.2007 12:24
Большое СПАСИБО -- теперь работает, хотя не совсем осознал как О_о
Автор: KapralBel
Дата сообщения: 15.06.2007 12:40
LightSoft
В общем так - проверяется существование переменной var
Если она существуетт то выполняется сам батничек (он уже вызван с перенаправлениемв файл)
Если не существует то сам батничек вызывается повторно с перенаправлением
Автор: AlessTO
Дата сообщения: 15.06.2007 13:19
Привет всем.
Подскажите как батником открыть папку (реальное окошко)?
Автор: sadmn
Дата сообщения: 15.06.2007 13:27
AlessTO
хм..
start /путь к папке/
?

Добавлено:
путь к папке без слешей, я так неумело просто выделил то, что надо подставить своё
Автор: AlessTO
Дата сообщения: 15.06.2007 13:37
sadmn
я тож так думал - "недопустимый ключ"
Ещё есть предложения?
Автор: KapralBel
Дата сообщения: 15.06.2007 13:46
sadmn
AlessTO
start Y:\Документы\
Работает - что я не правильно сделал?
Автор: sadmn
Дата сообщения: 15.06.2007 13:48
KapralBel
да у меня тоже работает. более того, какой ключ? здесь ключа-то нет, вроде..
Добавлено:
блин, допёр!!
я под /имя папки/ имел ввиду подставить имя папки без слешей, просто выделил так неуместно! сорри.

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566

Предыдущая тема: Автозагрузка терминальной сессии


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