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

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

Автор: MammothDEL
Дата сообщения: 28.02.2008 12:10
01MDM

Цитата:
Кавычки убери вокруг /auto

это я чумился.. забыл убрать.
без кавычек то же самое было.. пока не сделал так

start "" /D "%~dp0" /B "batnik2.cmd" /auto
Автор: 01MDM
Дата сообщения: 28.02.2008 12:23
MammothDEL
Странно, у меня работает и без пустого заголовка.
Автор: MammothDEL
Дата сообщения: 28.02.2008 12:43
а можно сделать одновременно вывод на консоль и в файл?
Автор: Maza Faka
Дата сообщения: 28.02.2008 13:18
MammothDEL
Можно
Пример:

Код: echo hello | mtee c:\result.txt
Автор: moloch
Дата сообщения: 28.02.2008 13:40
А как узнать день недели через батник?
Автор: RomanF
Дата сообщения: 28.02.2008 13:43
01MDM

file.txt
Код: test=1
test2=2
[key]
test=1
test2=2
Автор: 01MDM
Дата сообщения: 28.02.2008 14:43
RomanF
Ты привел пример с не из батника (в ком строке), где переменная цикла %i. Для батника надо использовать %%i.
Т.е:

Код:
@echo off
for /f %%i in ('findstr /c:"[key]" file.txt') do echo %%i
Автор: JekaRus
Дата сообщения: 28.02.2008 15:37
Подскажите как решить задачу. Хочу подключится к удаленному компу после его перезагрузки не угадывая момент когда это станет возможным. Для этого использую батник

@echo off
ING
Ping -n 1 %1 >Nul
If ErrorLevel 1 (Goto ING)
If ErrorLevel 0 (Goto :VSETI)
:VSETI
Ping -n 25 %1 >Nul
start Mstsc.exe /v:%1 /w:1024 /h:768
:END

25 ответов на пинг это время когда запустится служба для подключения тк она запускается позднее чем пойдет пинг. Проблема в том, что при отправлении в перезагрузку комп еще некоторое время пингуется и если этот батник запустить сразу, то он отсчитает 25 пингов и начнет подключаться. Как сделать что-то вроде цикла, при котором будет происходить соединение только после 25 непрерывных эхо ответов?
Автор: Elroir
Дата сообщения: 28.02.2008 23:52
JekaRus

Цитата:
Как сделать что-то вроде цикла, при котором будет происходить соединение только после 25 непрерывных эхо ответов?


Код:
@echo off
setlocal
:PING
Ping -n 1 %1 >Nul
If ErrorLevel 1 (Goto :PING)
If ErrorLevel 0 (Goto :VSETI)
:VSETI
set "count=0"
for /f %%a in ('Ping -n 25 %1 ^| find /i "TTL="^>Nul') do set /a "count+=1"
if not %count%==25 goto PING
start Mstsc.exe /v:%1 /w:1024 /h:768
:END
Автор: MammothDEL
Дата сообщения: 29.02.2008 02:02
Maza Faka

Цитата:
Можно

А без доп. утилит?
Автор: JekaRus
Дата сообщения: 29.02.2008 05:16
Elroir
Где-то ошибка. Консольное окно висит. Пробелы на конце убирал.
Автор: yurkesha
Дата сообщения: 29.02.2008 08:56
JekaRus а так попробовать:
Код: start Mstsc.exe /v:%1 /w:1024 /h:768 & EXIT
Автор: Elroir
Дата сообщения: 29.02.2008 09:19
JekaRus

Цитата:
Где-то ошибка. Консольное окно висит. Пробелы на конце убирал

Извини - действительно ошибка. Замени строчку for-a:

Код:
for /f %%a in ('Ping -n 25 %1 ^| find /i "TTL="') do set /a "count+=1"
Автор: Igore4eg
Дата сообщения: 29.02.2008 16:06
Всем привет! Сразу скажу я новичок в этом деле, но гдето в этой теме вычитал про нахождение наиболее нового файла в папке и копировании его в другую с сообщением об этом по почте.
Попробовал переделать код, который был приведен в этом сообщении-не получилось, ниже сам код.
Условие моей задачи: есть папка на сетевом ресурсе в которой лежат много файлов с именем sb0822020000.html (имя файла это дата его создания), надо копировать файл с нынешней датой,когда появится новый файл не известно
итак, создаю батничек brak.bat

Код: @echo off
setlocal enabledelayedexpansion
FOR %%a IN (\\asusrv\exchange\edocs\sb*.html) DO (
set tmp=%%~ta
set tmp=!tmp:~0,13!
if "!tmp!" EQU "%DATE%" (call mail.bat)
)
Автор: wolf0425
Дата сообщения: 29.02.2008 16:52

Цитата:
if "!tmp!" EQU "%DATE%" (call mail.bat)
сделай echo %date% и посмотри результат - может это подтолкнет размышления?

А вообще, самый свежий файл легче вычислять по
for /f "delims=" %%a in ('dir /b /o-d \\asusrv\exchange\edocs\*.html') do set "file=%%a" & goto :endoffor
:endoffor


А у меня вот какой вопрос: надо из батника отключить переключатель клавиатуры (стандартный XP), а в соседнем батнике - наоборот, восстановить.
Кто-нить чего-то умное посоветует?
Автор: RomanF
Дата сообщения: 29.02.2008 23:59
1) Есть файл. Нужно найти в нём строку "name1=KEY55" и заменить эту строку на другую. По вопросам замены строк нашёл пару способов, один из них более менее подходит (через асм утилиту sbs2.com).
Есть ли другой способ замены строк?

2) Существут ли команда генерации случайных чисел?

3) Следующей строкой я дописываю из временного файла данные в главный файл
Код: for /f %%j in (file.txt) do @echo %%j>>main.txt
Автор: Elroir
Дата сообщения: 01.03.2008 00:22
RomanF

Цитата:
Есть ли другой способ замены строк?

Есть - с помощью сторонних утилит, типа gsar.exe или копированьем строчки за строчкой всего файла в новый файл, с заменой нужной строчки - этот способ намного хуже, так как батники очень ограничены в работе с текстом. Так что вариант с sbs2.com, на мой взгляд, тут подходит очень хорошо.


Цитата:
Существут ли команда генерации случайных чисел?

Существует переменная среды random, которая выводит случайное число:

Код: echo %random%
Автор: RomanF
Дата сообщения: 01.03.2008 01:42

Цитата:
В файле file.txt, строчка name1=AA66 идет с кавычками?

нет

Код: test=11
name1=AA66
test=11
test2=22
Автор: Astron
Дата сообщения: 01.03.2008 01:48
Elroir
спасибо за ответ, за помощь
Автор: Elroir
Дата сообщения: 01.03.2008 02:05
RomanF
Поставь кавычки вокруг %%j в сравнении - if %%j EQU "name1=AA66":

Код: for /f %%j in (file.txt) do if "%%j" EQU "name1=AA66" ( @echo __[%%j]__ ) else ( @echo %%j>>main.txt )
Автор: SPV_Ed
Дата сообщения: 02.03.2008 11:40
Доброго дня.

Подскажите, можно ли стандартными средствами командной оболочки XP определить наличие постоянного маршрута? route print x.x.x.x mask y.y.y.y z.z.z.z в любом случае возвращает errorlevel=0, даже если маршрута не существует через указанный шлюз z.z.z.z
Автор: Astron
Дата сообщения: 02.03.2008 14:06

Цитата:
Господа, если я хочу сделать так: щелкая правой кнопкой по файлу или папке с именем, например, 'Microsoft Word Addon v3.31.28' в контекстном меню или как-то иначе, чтобы получить переименование файла или папки в вид 'Microsoft_Word_Addon_v3.31.28', что мне нужно сделать? Посоветуйте софтину...


Elroir

Цитата:
Как один из вариантов - создаешь батник следующего содержания:

Код:
@echo off
setlocal
set "name=%~nx1"
set "name=%name: =_%"
ren "%~1" "%name%"

называешь его replace_spaces.cmd и кладешь в Windows\System32 директорию.
После этого, создаешь .reg файл такого содержания:

Код:
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\*\shell\Replace spaces with underscores]

[HKEY_CLASSES_ROOT\*\shell\Replace spaces with underscores\command]
@="replace_spaces.cmd \"%L\""

[HKEY_CLASSES_ROOT\Folder\shell\Replace spaces with underscores]

[HKEY_CLASSES_ROOT\Folder\shell\Replace spaces with underscores\command]
@="replace_spaces.cmd \"%L\""

и импортируешь его в реестр.


Поторопился на радостях - что-то у меня данный способ способ не работает. Контекстного меню не появляется...
Автор: Elroir
Дата сообщения: 02.03.2008 14:25
Astron

Цитата:
Поторопился на радостях - что-то у меня данный способ способ не работает. Контекстного меню не появляется...

Только что проверил еще раз - скопировал текст .reg файла из форума, создал новый .reg файл, внес в него этот текст, сохранил. Импортировал его в реестр, кликнув по нему 2 раза мышкой. Меню появилось и на файлах и на директориях.
Проверь, что у тебя есть права на редактирование реестра.
Автор: 474837
Дата сообщения: 02.03.2008 23:33
Подскажите, есть ли в windows аналог линуксовой команды time? Виндовая time делает совсем не то, что мне надо. Мне нужно получить время, затраченное для выполнения определеной команды. То есть, если мне в линуксе надо узнать сколько времени займет копирование файла file1 я могу написать что то типа:
time cp file1 subfolder/file1
и получить на выходе время в секундах.
Вопрос: как это же сделать в windows?
Автор: Nagual
Дата сообщения: 02.03.2008 23:57
474837
command_time.cmd
Код: @echo off
chcp 1251>nul

title
Определение времени выполнения команды...
set "ctime1=%time:~0,-3%"
set /a "sec1=36000*%time:~0,1%+3600*%time:~1,1%+600*%time:~3,1%+60*%time:~4,1%+10*%time:~6,1%+%time:~7,1%"
echo Сейчас: %ctime1%

:: Команда
ping loopback

:: Расчёт времени команды
set "ctime2=%time:~0,-3%"
set /a "sec2=36000*%time:~0,1%+3600*%time:~1,1%+600*%time:~3,1%+60*%time:~4,1%+10*%time:~6,1%+%time:~7,1%"
set /a "math=%sec2%-%sec1%"
echo Сейчас: %ctime2%. Время выполнения команды: %sec2%-%sec1%=%math% секунд.

pause
Автор: realister12
Дата сообщения: 03.03.2008 00:10
Elroir
проблема, поднятая Astron актуальна и для меня. Сделал всё по инструкции, меню появилось, но вот батник переименовывать папки не хочет. То есть запускается из меню replace_spaces.cmd, но увы не переименновывает. The system cannot find the file specified. Пробелы убрал
Автор: Elroir
Дата сообщения: 03.03.2008 00:25
realister12
Очень интересно.
Измени код replace_spaces.cmd:

Код:
@echo off
setlocal
echo %%1 = %1
set "name=%~nx1"
echo name = %name%
set "name=%name: =_%"
echo name = %name%
echo ren "%~1" "%name%"
pause
Автор: realister12
Дата сообщения: 03.03.2008 00:45
Elroir

%1 = "C:\temp\dfdf dsgfdsg dsgdsg"
name = dfdf dsgfdsg dsgdsg
name = dfdf_dsgfdsg_dsgdsg
ren "C:\temp\dfdf dsgfdsg dsgdsg" "dfdf_dsgfdsg_dsgdsg"
Press any key to continue . . .

ОС 2к3
Автор: Elroir
Дата сообщения: 03.03.2008 01:02
realister12
Не понимаю, почему у тебя не работает. Батник отрабатывает правильно.
Попробуй зайти в директорию c:\temp в консоли и запустить команду:

Код: ren "dfdf dsgfdsg dsgdsg" "dfdf_dsgfdsg_dsgdsg"
Автор: realister12
Дата сообщения: 03.03.2008 01:14
Elroir
знаю что спасибы в пм, но

Код: @echo off
setlocal
set "name=%~nx1"
set "name=%name: =_%"
pushd "%~dp1"
ren "%~nx1" "%name%"
popd

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869

Предыдущая тема: Доступ к реестру через RegEdit?


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