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

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

Автор: igor_andreev
Дата сообщения: 22.10.2008 09:00
01MDM
Ему же первое найденное значение нужно было занести в переменную, это test2.cmd и делает, без разницы, сколько раз запускать.
Автор: yurkesha
Дата сообщения: 22.10.2008 09:08
sL4yer
SageNS
а почему бы просто не нормализовать результат разбив диапазон от 0 до 32767 на 10 поддипазонов? Например методом деления нацело... И не надо будет ждать. Вероятности выпадения чисел в этой ситуации незначительно изменятся, но скорей всего среднее отклонение от равномерного распределения конструкции %RANDOM% выше и соответственно погрешностью метода можно пренебречь.
Автор: igor_andreev
Дата сообщения: 22.10.2008 09:14
01MDM
А-а, понял, что ты имеешь ввиду, только проснулся и сразу за комп, не вьехал Тогда да, нужно после @echo off второй строкой сделать сначала обнуление переменной set "value=". В реале то *.ini читают одним батником, не двумя.
Автор: SageNS
Дата сообщения: 22.10.2008 09:26
yurkesha
я думал об этом, но ожидание, по крайней у меня состовляет не более 4 секунд. Мне, кажется, что это не такое уж и большое время

Добавлено:
Итак, уважаемые знатоки, вопрос на засыпку....


есть код


Код:
set a=1
:circle
echo %a%
for /f "tokens=%a% delims=:" %%i in (C:\list.txt) do (
set group=%%i
set /a a=%a%+1
)
if %a% NEQ 100 goto circle
Автор: 01MDM
Дата сообщения: 22.10.2008 12:15
SageNS

Дело не в количестве частей, а по всей видимости в длине строки. Не помню точное ограничение, но оно есть. Если токен находится за этим пределом, то for не может прочитать значение и заканчивает работу.

Добавлено:
Sorry, действительно работает только 31 токен.
Автор: avkorets
Дата сообщения: 22.10.2008 13:06
Ребят подскажите решение.
Если строка в файле начинается на любое число то выводим строку полностью в новый файл если на что то другое то не выводим...
Спасибо!
Автор: 01MDM
Дата сообщения: 22.10.2008 13:19
avkorets

Код:
@echo off
setlocal

for /f "tokens=*" %%i in (test_1.txt) do call:1 "%%i"
goto:eof

:1
set "line=%~1"
echo %line:~0,1% | findstr [0-9] 1>nul && echo %line% 1>>test_2.txt
Автор: igor_andreev
Дата сообщения: 22.10.2008 13:22
avkorets

Код:
more test.txt | findstr "^[0-9]">new.txt
Автор: monsoon
Дата сообщения: 22.10.2008 13:29
igor_andreev
сорри, test2.cmd действительно выдает первое значение.

test3.cmd

Код: For /F "usebackq delims=" %%i In (`Find /I "mykey=" test.ini`) Do Set Value=%%i
echo %value%
Автор: INNO_SANCTUM
Дата сообщения: 22.10.2008 13:32
А вот еще один глупый детсадовский вопрос.
Как мне определить, входит ли заданная подстрока в строку?
Задача такая: если в имени пользователя нет "1с" (оно всегда в конце - такое правило. То есть, существуют пользователи вида vasya, либо вида vasya1c), то подключить сетевую папку \\server\%username%\ как диск Z. Если же есть 1с в имени, то подключить папку \\server\<%username% без 1с>, то есть и для пользователя vasya, и для пользователя vasya1c подключить папку \\server\vasya.

Все несложно, кроме определения вхождения подстроки в строку. Может я чего-то не знаю, и есть простой способ?
Как пытаюсь сделать я:
for %%i in ('echo %username%|find "1c"') do (.....)

Но этот код выдает "непредвиденное появление |".
Буду благодарен за помощь.

PS самое смешное, что я эту задачу слвсем недавно уже решал, и решил как-то легко и довольно красиво. Но не могу вспомнить как!!! Люди, спите хотя бы по 6 часов в сутки.
Автор: igor_andreev
Дата сообщения: 22.10.2008 13:50
monsoon

Цитата:
Посмотрел help по команде, ничего вроде такого нет.

Это команда find выдает на экран название файла. Запусти просто

Код:
Find /I "mykey=" test.ini
Автор: avkorets
Дата сообщения: 22.10.2008 14:08

Цитата:
01MDM


Цитата:
igor_andreev

спасибо!!!!!


Цитата:
igor_andreev

а можно так же в одну строку,если перед числом стоит пробел?
пробел неважно =)
Возможно ли убрать из строки все русские символы не трогая латиницу и цифры?
И так же строку в новый файл..????
Автор: igor_andreev
Дата сообщения: 22.10.2008 14:57

Цитата:
Возможно ли убрать из строки все русские символы не трогая латиницу и цифры?
И так же строку в новый файл..????

Можно, только у findstr очень ограниченная поддержка регулярных выражений

Код:
chcp 1251
sed -e "s/[а-яА-Я]//g" old.txt > new.txt
Автор: GORA2
Дата сообщения: 22.10.2008 15:55
Подскажите утилиту для конвертации .reg файла в .bat файл, который бы выполнял действия равнозначные запуску .reg файла, т.е. вносил в реестр нужные значения, но уже без .reg файла. Может можно написать батник для конвертации?
Автор: igor_andreev
Дата сообщения: 22.10.2008 17:06
GORA2
Попытки были. Попробуй доработай под свои нужды
http://www.msfn.org/board/lofiversion/index.php/t82457.html
Автор: SageNS
Дата сообщения: 22.10.2008 20:01
[more]
Цитата:
Итак, уважаемые знатоки, вопрос на засыпку....


есть код


Код:
set a=1
:circle
echo %a%
for /f "tokens=%a% delims=:" %%i in (C:\list.txt) do (
set group=%%i
set /a a=%a%+1
)
if %a% NEQ 100 goto circle




в list.txt 99 значений разделеные :. Все отлично... НО! При достижении а значения 32 for входит в ступор, выводится только терминейтом. Получается следующее...

Подробнее...

Неужели for может резать только на 32 части, тем более число такое... опасно круглое

Цитата:
SageNS

Дело не в количестве частей, а по всей видимости в длине строки. Не помню точное ограничение, но оно есть. Если токен находится за этим пределом, то for не может прочитать значение и заканчивает работу.

Добавлено:
Sorry, действительно работает только 31 токен.

[/more]

Есть какие-нибудь мысли, чтоб обойти это?
Автор: 01MDM
Дата сообщения: 22.10.2008 20:40
SageNS
В данном конкретном случае можно сделать так (и при условии, что в строке нет запятых):

Код:
@echo off
setlocal
for /f "tokens=*" %%i in (test.txt) do call:1 "%%i"
goto:eof

:1
set line=%~1
set line=%line:;=,%
for %%i in (%line%) do echo %%i
Автор: avkorets
Дата сообщения: 22.10.2008 21:21
ребят
есть %%х нужно это сравнить с константами числовыми а,б,в..
если %%х совпадает хотя бы с одним а,б... то не печатаем строку,если не совпадает ни с одним то печатаем?
Автор: Elroir
Дата сообщения: 23.10.2008 00:40
SageNS
Или можно так:

Код:
@echo off
setlocal
set /p line=<C:\list.txt
:next
if not defined line goto :EOF
for /f "tokens=1* delims=:" %%a in ("%line%") do (
echo %%a
set "line=%%b"
)
goto next
Автор: GORA2
Дата сообщения: 23.10.2008 14:35
igor_andreev, спасибо за ссылку, очень помогла. Правда пришлось переделывать, т.к. не правильно работало с многострочными ключами, задваивало слеши и кавычки, и еще по мелочи, но это удалось решить.
Подскажите как можно в строке, например:
Код: "\"C:\Program Files\7-Zip\7zFM.exe\" \"%1\""
Автор: igor_andreev
Дата сообщения: 23.10.2008 15:06

Цитата:
переменной !dat! удвоить знак процента

попробуй set dat=!dat:%%1=%%%%1!
Автор: patron2d
Дата сообщения: 23.10.2008 16:03
Помогите с несложным батником
надо вытянуть файл с http распаковать его и залить в базу уже на локальной машине + какой нить лог
сам файл name_y-m-d.sql.gz - вроде dump_2008-10-22.sql.gz
есть cygwin date gzip и wget для винды

@echo off

set DATE=%date.exe -I%
set SERVER=http://localhost/
set NAME=filename
set EXT=sql
set EXTZ=gz
set DATABASE=data

wget %SERVER%%NAME%_%DATE%.%EXT%.%EXTZ% && gzip -d %NAME%_%DATE%.%EXT%.%EXTZ% && C:\mysql\bin\mysql.exe -u user -ppass -D %DATABASE% < %NAME%_%DATE%.%EXT%

верно я думаю ? винды под рукой нет проверить + что и как можно записать в лог файл -- хоть пару строчек время и результат


Автор: igcirkov
Дата сообщения: 23.10.2008 16:14
Всё так сложно
Автор: avkorets
Дата сообщения: 23.10.2008 17:51
ребят а как правлильно провести деление одной переменной на другую??
set /a new=%%x/%%y не пашет
%%x типа 12.3456
%%y типа 1,10,100,1000
причем если первое число 0 после деления то его не писать т.е.
делим на 100 =>.123456
делим на 1000 =>.0123456
делим на 10 =>1.23456
спасибо!
Автор: cluster
Дата сообщения: 23.10.2008 22:06
Есть много-много каталогов. Необходимо взвесить размер каждого из них (подкаталоги не надо) и достаточно будет вывести результаты в лог-файл.
Total Commander'ом бесполезно, потому что данные сбрасываются при любом изменении размера каталогов во время взвешивания (а такое имеет место быть).
Помогите решить задачу.
Автор: Nagual
Дата сообщения: 23.10.2008 23:30
cluster
нажимаешь Alt+Shift+Enter, после чего выполянешь внутреннюю команду тотала 2036 кнопкой, горячей клавишей, или чем угодно, а вообще, плагинов для этого предостаточно
Автор: Elroir
Дата сообщения: 24.10.2008 02:42
avkorets
CMD умеет работать только с целыми числами.
Используй утилиту CLCC (ссылка в шапке, в "Полезных утилитах")

Код:
@echo off
setlocal enabledelayedexpansion
....
здесь определяются %%x и %%y
...
...
for /f "tokens=1* delims=0 " %%a in ('clcc %%x/%%y') do set "result=%%b"
echo !result!
...
Автор: cluster
Дата сообщения: 24.10.2008 07:56
Nagual

Цитата:
после чего выполянешь внутреннюю команду тотала 2036 кнопкой

Ещё раз повторюсь, что в процессе измерения содержимое каталогов меняется (пользователи работают), и результат измеренения сбрасывается!
Автор: igor_andreev
Дата сообщения: 24.10.2008 08:59
cluster
http://gammon.com.au/utilities/treeinfo.htm
http://technet.microsoft.com/en-us/sysinternals/bb896651.aspx
Автор: patron2d
Дата сообщения: 24.10.2008 09:44
Кто знает как в переменную записать результат команды
например для bash
a=`date +%Y`
echo $a # 2008

как для батника такая конструкция
ЗЫ сорри если ответ уже был в ветке - я не нашел

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566

Предыдущая тема: Сброс пароля администратора


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