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

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

Автор: wolf0425
Дата сообщения: 02.05.2007 13:49

Цитата:
set /a parC-=1& IF %parC% GTR 0 GOTO Loop1
set /a parF-=1& IF %parF% GTR 5 GOTO Loop

в текущем виде - в IF участвуют значения переменных ДО того как сделали set /a parC-=1
так и задумано?
Автор: Maza Faka
Дата сообщения: 02.05.2007 14:40
wolf0425

Цитата:
в текущем виде - в IF участвуют значения переменных ДО того как сделали set /a parC-=1
так и задумано?

Так ведь их значение изменяется, отнимается единица, а потом идёт сравнение.
Автор: MegaSin
Дата сообщения: 02.05.2007 14:42
Уважаемые знатоки!

Есть небольшая задачка:
необходимо написать батник, в конечном итоге загонял в переменную дату и время в формате день.месяц.год_час.минута.секунда
Самая проблема - это сделать скрипт независимым от региональных настроек! ибо тулзой пользуется очень много людей..
Как только не пробовал решить задачу... И на С++ програмулинку писал, и на js скрипт мне писали... всегда есть какие то проблемы у других пользователей скрипта

Буду очень признателен если поможете решить данную проблему
Автор: wolf0425
Дата сообщения: 02.05.2007 14:53
Maza Faka
Цитата:
Так ведь их значение изменяется, отнимается единица, а потом идёт сравнение
НЕТ. сравнение идет с той же величиной, от которой отнимается единица.
чтобы было, как ты (и наверно автор) считаешь "потом" - надо
или разнести set и IF в разные строчки
или вставить enabledelayedexpansion в начало и изменить строки на

Код: set /a parC-=1& IF !parC! GTR 0 GOTO Loop1
Автор: Maza Faka
Дата сообщения: 02.05.2007 15:00
GORA2

Код:
:Loop
set /a parC=6
:Loop1
.........
.........
set /a parC-=1& IF %parC% GTR 0 GOTO Loop1
set /a parF-=1& IF %parF% GTR 5 GOTO Loop
Автор: wolf0425
Дата сообщения: 02.05.2007 15:08
Maza Fakaнормальная структура двухуровневого for, непонятно только зачем вручную расписана - но на скорость кривизна врядли влияет, всё в 268*7=1876 вызовов тормозного Upack упирается.
Автор: Molt
Дата сообщения: 02.05.2007 15:23
Кажись где-то проскакивало: батник для работы по telnet с DSL-роутером (или типа того)
Конкретно:
Имеем: D-link DSL-562T в режиме роутера.
Задача: По результату пинга (если зависло соединение) автоматически переконектить модем (вплоть до перезагрузки)
Решение: на сайте http://zyxmon.streamclub.ru/ качаем консольную утилитку ZthBatch 0.4 (самую свежую на сегодняшний момент, версии старше 0.3 умеют работать так же и длинками), копируем сам файл в директорию system32.
Применение: по срабатыванию условия выполняем

Код: ztnbatch -loginT admin -p admin -h 192.168.1.1 -c "reboot"
Автор: Maza Faka
Дата сообщения: 02.05.2007 15:23
wolf0425
Да, ты прав, совсем забыл про, то, что переменные в цикле сразу раскрываются и что бы этого избежать нужно заключать переменную в "!!"
GORA2
У тебя ошибка в коде, сделай как советует wolf0425
P.S.
Вот уж не думал что такая
Код: set /a parC-=1& IF %parC% GTR 0 GOTO Loop1
Автор: wolf0425
Дата сообщения: 02.05.2007 15:25
imho нормальный вид этого батника такой
Код: @echo off
::Поиск оптимальных параметров сжатия файла 7ZSD_LZMA_original.sfx утилитой Upack
::Утилита Upack выводит 15 строк информации в 14-й строке 5-й элемент является размером после упаковки
::Диапазон изменяемых параметров: parF=273...5; parC=6...0
set min_size=80000

for /l %%f in (5,1,273) do ^
for /l %%c in (0,1,6) do ^
for /f "eol= skip=14 tokens=5" %%i in ('Upack 7ZSD_LZMA_original.sfx -test -rai -red -c%%c -f%%f') do ^
if %%i LSS %min_size% set min_size=%%i & set params=%%f,%%c & echo %%f,%%c - %%i
pause>nul
Автор: GORA2
Дата сообщения: 02.05.2007 15:51
Спасибо всем. Ошибку понял. Исправлюсь.
Автор: 0Vovan0
Дата сообщения: 02.05.2007 16:25
wolf0425

Цитата:
for /f "delims=" %%a in ('dir /b /s /a-d') do anyprogram "%%a"

спасибо, блин забыл что в смд надо %a указывать а в батнике %%a
а насчет относительных путей к файлам - нельзя ли?


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

либо первое, тогда я уже сам смогу повторить н раз это действо, либо ну пусть для всего списка, в общем тут главное можно ли в батнике выбрать случайный элемент из списка?
Автор: Maza Faka
Дата сообщения: 02.05.2007 16:46
0Vovan0
На предыдущей странице тебе давали примеры, посмотри внимательно
Автор: 0Vovan0
Дата сообщения: 02.05.2007 16:54
Maza Faka
хм.. это?

Код: @echo off
enabledelayedexpansion

del tmplist.txt
for /f "delims=" %%a in ('dir /b /s /a-d *.mp3') do echo !random! %%a >>tmplist.txt
del tmplist2.txt
for /f "tokens=1*" %%a in ('sort tmplist.txt') do echo %%b >>tmplist2.txt
Автор: Maza Faka
Дата сообщения: 02.05.2007 17:09
wolf0425

Цитата:
%переменная% заменяется на значение в первый же момент обработки строки. всей строки, а не куска до &

Значит здесь:

Код:
Set parC=1
set /a parC-=1 & IF %parC% GTR 0 (Echo ERROR) Else (Echo OK)
Автор: Elroir
Дата сообщения: 02.05.2007 17:13
MegaSin
VBscript:

Код:
wscript.echo day(date) & " " & month(date) & " " & year(date) & " " & hour(time)& " " & minute(time) & " " & second(time)
Автор: Maza Faka
Дата сообщения: 02.05.2007 17:14
0Vovan0
На 4-ой странице я приводил пример:

Код:
@Echo off
Setlocal enabledelayedexpansion
Set /p "Select=Введите номер файла, который нужно скопировать "
Set Var=0
For /F "Tokens=*" %%a in ('Dir /b /s /a:-d') do (
Set /a Var+=1
If "!Var!"=="%Select%" copy "%%a" D:\Test)
Автор: Elroir
Дата сообщения: 02.05.2007 17:16
Maza Faka

Цитата:
в выделенной строке до символа "&", вычисления не происходит?

Происходит, но результат "проявится" только в следующей строке.
Автор: Vick_Tor
Дата сообщения: 02.05.2007 17:16
Вечер добрый продвинутым пиплам.
Такой вопрос: батничком можно архивировать?
ну или прописать в него что-то.
Изи папки юзера надо выдернуть все файлы (*.DOC , *.RTF)
со структурой расположения и упаковать в определенном месте.
Есть такое:

xcopy "%HOMEPATH%"\*.doc D:\New\%USERDOMAIN%\%USERNAME% /d /s /i
xcopy "%HOMEPATH%"\*.rtf D:\New\%USERDOMAIN%\%USERNAME% /d /s /i

Ни как не догоню.
Автор: Elroir
Дата сообщения: 02.05.2007 17:28
Vick_Tor
Команда упаковки Rar-ом:

Код:
rar u -r путь_к_архиву\имя_архива "%HOMEPATH%"\*.doc "%HOMEPATH%"\*.rtf
Автор: Maza Faka
Дата сообщения: 02.05.2007 17:32
0Vovan0

Цитата:
такой батник только создал два текстовых файла, в которых все было по порядку, в одном просто вывод dir, в другом тоже, только в начале каждой строчки просто текст !random! :-\

Батник wolf0425-a рабочий, только добавь "Setlocal" перед "enabledelayedexpansion" wolf0425 почему-то забыл написать...

Добавлено:
Elroir

Цитата:
Происходит, но результат "проявится" только в следующей строке.

Ввёл в командной строке этот код
Код: Set parC=1
set /a parC-=1 & Echo %parC%
Автор: Elroir
Дата сообщения: 02.05.2007 18:02
Maza Faka

Цитата:
я правильно понял?

Да.
Автор: wolf0425
Дата сообщения: 02.05.2007 18:02

Цитата:
wolf0425 почему-то забыл написать...
вот и я туплю рожу об монитор - не понимаю куда оно делось и кто виноват

Elroir, Maza Faka

Цитата:
Цитата:
в выделенной строке до символа "&", вычисления не происходит?
Происходит, но результат "проявится" только в следующей строке.

результат и в этой строке проявится, если суметь до него добраться - он только для %parC% в текущей строке недоступен - т.к. %parC% заменяется на значение ДО в самом начале обработки строки - раньше всего остального, в т.ч. и до set /a

Добавлено:
0Vovan0

Цитата:
а насчет относительных путей к файлам - нельзя ли?

только через задницу.

Код: @echo off
setlocal enabledelayedexpansion

del tmplist.txt
for /f "delims=" %%a in ('dir /b /s /a-d *.*') do set "xx=%%a" && echo !random! !xx:%cd%\=! >>tmplist.txt

del tmplist2.txt
for /f "tokens=1*" %%a in ('sort tmplist.txt') do echo %%b >>tmplist2.txt
Автор: 0Vovan0
Дата сообщения: 02.05.2007 18:53

Цитата:
@echo off
setlocal enabledelayedexpansion

del tmplist.txt
for /f "delims=" %%a in ('dir /b /s /a-d *.*') do set "xx=%%a" && echo !random! !xx:%cd%\=! >>tmplist.txt>>tmplist.txt

del tmplist2.txt
for /f "tokens=1*" %%a in ('sort tmplist.txt') do echo %%b >>tmplist2.txt

спасибо, работает

Цитата:
выбрать один случайный конечно тоже можно - если сначала длину списка подсчитать...

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

Еще небольшой вопрос, если альтернатива start /low команда только чтобы последующие команды выполнялись после того как выполнится оная команда?
Автор: Elroir
Дата сообщения: 02.05.2007 18:53
wolf0425

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

Это понятно. Ты уже написал о setlocal enabledelayedexpansion и !parC!. Я не стал повторяться.
Автор: Maza Faka
Дата сообщения: 03.05.2007 06:58
0Vovan0

Цитата:
Еще небольшой вопрос, если альтернатива start /low команда только чтобы последующие команды выполнялись после того как выполнится оная команда?


Код:
Start /wait /low
Автор: wolf0425
Дата сообщения: 03.05.2007 09:40
0Vovan0

Цитата:
выбрать один случайный конечно тоже можно - если сначала длину списка подсчитать...
ну если можно всетаки пример)

ну держи

Код: @echo off
setlocal enabledelayedexpansion

dir /b /s /a-d *.* >list.txt
for /f %%a in ('type list.txt ^|find /c /v ":::"') do set /a yy=%random% %% %%a
set nn=0
for /f "delims=" %%a in (list.txt) do set /a nn+=1 && if !nn! GTR %yy% set randomname=%%a && goto :exitfor
:exitfor
set "randomname=!randomname:%cd%\=!"
set randomname
Автор: GORA2
Дата сообщения: 03.05.2007 14:11
Здравствуйте всем. Я опять за помощью. Следующая задача:
Имеются две переменные %COMMANDER_PATH% в которой может быть, например, D:totalcmd и %CustomPath% в которой должно быть, например, D:totalcmd\Utilites, но может быть и совершенно другое, например, c:\Program Files\Total Commander\Prog
1 Как проверить является ли содержимое %COMMANDER_PATH% началом содержимого %CustomPath% ?
2 Если п1 выполнен, то как выделить остаток пути (разницу %CustomPath%-%COMMANDER_PATH%) в переменную %LessPart% ?
Если это возможно с помощью бат файла. Заранее спасибо.
Автор: 0Vovan0
Дата сообщения: 03.05.2007 14:32
Maza Faka

Цитата:
Кстати параметр "/low" служит для запуска приложения с низким приоритетом

Это мне собственно и надо, перефразирую вопрос - как-то еще модно запустить в банике приложение с низким приоритетом? Start /wait /low подходит, но постоянно всплывающие окна несколько мешают
Весьма удивило что в start /? про ключ /wait ничего не написано

wolf0425
спасибо, думал конечно оно проще будет - ну работает , чего еще надо
Автор: Maza Faka
Дата сообщения: 03.05.2007 14:37
GORA2
Ну например так:

Код:
@Echo off
Set COMMANDER_PATH=D:\totalcmd
Set CustomPath=D:\totalcmd\Utilites

If /i %COMMANDER_PATH%==%CustomPath:~0,11% Set LessPart=%CustomPath:~12%
If defined LessPart Echo %LessPart%
Автор: wolf0425
Дата сообщения: 03.05.2007 14:50
GORA2, @#$%&@#$%@#$ @#$#@#%!!!!
как вычитать текстовые переменные - я тебе вчера, в примере с вычислением относительного пути, написал, на п.2 это линейно переносится.
set LessPart=!CustomPath:%COMMANDER_PATH%;=!

а п.1 - проще делать после п2. : сравниваешь полученную %LessPart% с %CustomPath% и если не различаются (не удалось заменить подстроку) - то значит COMMANDER_PATH не является частью CustomPath ...
хотя при большом желании можно написать ручной пересчет количества символов в COMMANDER_PATH и сравнить его с начальным куском CustomPath

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566

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


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