Ru-Board.club
← Вернуться в раздел «Программы»

» Командная строка, батники, сценарии (bat, cmd)

Автор: YuS_two
Дата сообщения: 22.05.2016 11:37
sergiokapone

Цитата:
Прдскажите, пожалуйста, как можно организовать консольный progress bar?

подсказка
Автор: sergiokapone
Дата сообщения: 22.05.2016 12:47
YuS_two, можно как-то прикрутить прогресс бары, что-бы показывала время до завершения выполнения заданиякакой-нибудь консольной утилиты, ведь заранее не известно, когда она закончит?
Автор: GCRaistlin
Дата сообщения: 22.05.2016 12:55
sergiokapone
Нет, конечно.
Автор: YuS_two
Дата сообщения: 22.05.2016 15:33
sergiokapone

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

Чтобы показывало время до окончания - нет. Можно запустить отдельным окном бесконечный прогрессбар и выключать/закрывать его по какому либо событию.
Автор: sergiokapone
Дата сообщения: 22.05.2016 15:41
А можно тогда, показывать время в секундах после старта программы? А то на статичесую консоль во время выполнения скучно смотреть.
Автор: GCRaistlin
Дата сообщения: 22.05.2016 16:08
sergiokapone
Можно перед стартом вывести на экран текущее время. А вообще, у любой фичи должна быть рациональная цель. Эта:

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

таковой не является.
Автор: toshanNEW
Дата сообщения: 23.05.2016 11:03

Цитата:
Есть результат команды ipconfig на нескольких ПК в текстовом файле:
...
   Имя компьютера  . . . . . . . . . : NAME1
...
   Физический адрес. . . . . . . . . : MAC1
...
   Имя компьютера  . . . . . . . . . : NAME2
...
   Физический адрес. . . . . . . . . : MAC2
...
 
Нужно получить файл, со списком:
 
NAME1    MAC1
NAME2    MAC2
...

Сделал

Код:
@echo off
for /f "tokens=2 delims=:" %%a in ('FINDSTR "Имя компьютера*" mac.txt') do (
if not defined name set name=%%a
)
for /f "tokens=2 delims=:" %%b in ('FINDSTR "Физический адрес*" mac.txt') do (
if not defined mac set mac=%%b
)
set name=%name:~1%
set mac=%mac:~1%
echo %name%    %mac%
Автор: destinyChild
Дата сообщения: 23.05.2016 16:13

Код:
set OUTPUT=C:\backup\SwithMail\CheckLog.txt

if "%STDOUTERR_REDIRECTED%" == "" (
set STDOUTERR_REDIRECTED=yes

cmd.exe /c call %0 %* >%OUTPUT% 2>&1

IF %ERRORLEVEL% NEQ 0 GOTO :EOF
C:\backup\SwithMail\SwithMail.exe /s /x "C:\backup\SwithMail\SwithMailSettings.xml" /btxt "%OUTPUT%"

goto :EOF
)

"C:\backup\date_posix.exe" "+%%Y_%%m_%%d" > temp.txt
set /p BAK_DATE= < temp.txt
del temp.txt

set "backup_file=C:\backup\backup%BAK_DATE%_23_*.zip"

if not exist %backup_file% goto :error_point
EXIT 0

:error_point
EXIT 1
Автор: GCRaistlin
Дата сообщения: 23.05.2016 17:03
destinyChild
Хелп к EXIT почитайте.
Автор: destinyChild
Дата сообщения: 23.05.2016 17:23
GCRaistlin
а какая строчка из него мне помочь тут может?
если вы про параметр /В - то и с ним ничего не происходит толкового.
уже проверял.
Автор: GCRaistlin
Дата сообщения: 23.05.2016 17:35
destinyChild
Прошу прощения, мне самому внимательнее читать хелп надо - errorlevel устанавливается и без /b. А у вас ошибка в том, что вы используете %-раскрытие внутри скобок. "%errorlevel%" заменяется на "0" еще до перезапуска батника. Используйте что-нибудь вроде "if errorlevel 1".
Автор: YuS_two
Дата сообщения: 23.05.2016 17:38
toshanNEW

Цитата:
А как сделать чтобы и дальше все значения обрабатывались и записывались в файл?

Да сделать-то можно, вот только вопрос в том, что именно получится
Самый главный вопрос в том, что не всегда на одном компьютере присутствует строго один сетевой интерфейс, их может быть несколько...
Лучше определите, какой именно мак адрес (от какого интерфейса) требуется и идентичны ли у них названия на разных компьютерах... в общем, сначала необходимо составить алгоритм точного соответствия: один компьютер - один интерфейс (мак адрес). А уж в файл их вывести - это проблема попроще будет.
Автор: destinyChild
Дата сообщения: 23.05.2016 18:06
попробовал - не пашет....
errorlevel просто не раскрывается.

P.S. http://stackoverflow.com/questions/16852503/windows-batch-parentheses-scope
и все заработало... пропустил пару моментов....
Автор: YuS_two
Дата сообщения: 23.05.2016 18:22
destinyChild

Цитата:
ПОЧЕМУ строка

Код:   IF %ERRORLEVEL% NEQ 0 GOTO :EOF

всегда выдает мне if 0 neq 0
Автор: destinyChild
Дата сообщения: 23.05.2016 18:27
YuS_two сенкс!
уже втулил.... сосбно выше дал ссылку - где это расписали так же понятно.

но мелкомягкий - ну урод. придумать такое поведение.....
Автор: tw1ster83
Дата сообщения: 02.06.2016 07:14
День добрый. Подскажите как произвести вычисление в файле Плотность.txt. Смысл в следующем.
Необходимо заменить значение MASS_TOTAL в каждом TANK на следующее вычисление VOLUME_TOTAL *DENSITY из значений из этого TANK:
Пример файла плотность.txt:

# F4E6C00000000BEBEA842&&9758
DATE = 01/06/2016
TIME = 10:11

TANK = 1
DENSITY = 0.74737 # g/sm3
MASS_TOTAL = 5438.66
VOLUME_WATER = 0.0
LEVEL_WATER = 0.0 # sm
TEMPERATURE = 4.99541
VOLUME_TOTAL = 7276.27
LEVEL_TOTAL = 101.771 # sm
LEVEL_OIL = 101.771 # sm
# VOLUME_TOTAL_TC = 0.0

TANK = 2
LEVEL_WATER = 0.0 # sm
# VOLUME_TOTAL_TC = 0.0
TEMPERATURE = 4.96102
VOLUME_WATER = 0.0
LEVEL_OIL = 143.445 # sm
DENSITY = 0.842216 # g/sm3
LEVEL_TOTAL = 143.445 # sm
VOLUME_TOTAL = 16219.9
MASS_TOTAL = 13662.1
Автор: DenisRodman
Дата сообщения: 05.06.2016 15:20
Ребят не ругайтесь сильно, за то что сейчас не по теме напишу. Просто здесь присутствует толковые люди, поэтому нужна помощь по доработке одной программы. Точнее её нужно дополнить одним кодом. Прошу посмотреть мой запрос по доработке здесь Ссылка на скачивание подробности, что нужно сделать я написал внутри архива.
Автор: GCRaistlin
Дата сообщения: 05.06.2016 15:40
DenisRodman
Сильно ругаться не будем, если офтоп свой уберете.
Автор: thejustsoul
Дата сообщения: 06.06.2016 10:46
Подскажите, почему не работает такое:

Код: if exist CHANGE (
for /F "delims=" %%i in (CHANGE) do set CHANGE=%%i
echo CHANGE=%CHANGE%
)
Автор: GCRaistlin
Дата сообщения: 06.06.2016 11:31
thejustsoul
http://forum.ru-board.com/topic.cgi?forum=5&topic=48565&start=40#2
Автор: YuS_two
Дата сообщения: 06.06.2016 12:49
thejustsoul
1.

Цитата:
if exist CHANGE

Это что проверяем? Файл или папку? Если хочется проверки существования переменной, то:

Код: if defined CHANGE ...
Автор: thejustsoul
Дата сообщения: 07.06.2016 04:59
YuS_two

Цитата:
Это что проверяем? Файл или папку?

Файл проверяется, в папке со скриптом.
Ничего не понял.. что вы оба выше написали

Есть код, который проверяет значение переменной (которая выше в скрипте обозначена), если одно значение, то делается одно, если другое, то другое действие. Если не делать goto, то у меня не получилось добавить for, в "действие" после первой скобки. Та переменная которая появляется в результате действия for, пуста. Но если этот for вынести за скобки, то все срабатывает и переменная содержит правильный результат.
Что нужно дописать, чтобы for работал внутри скобок после IF exist FILE (действие с фор) или IF "%VAR%"=="test1" (действие с фор)...
Добавить setlocal enabledelayedexpansion и использовать переменную которая появляется после for, не как как %CHANGE%, а %%CHANGE%% или !CHANGE! ?
Автор: thejustsoul
Дата сообщения: 07.06.2016 09:21
Есть ли что-то для форматирования кода батников? По-типу HTML Tidy, PHP Beautifier и т.п.
Автор: GCRaistlin
Дата сообщения: 07.06.2016 11:18
thejustsoul

Цитата:
Добавить setlocal enabledelayedexpansion и использовать переменную которая появляется после for, не как как %CHANGE%, а %%CHANGE%% или !CHANGE! ?

Как !Change!. Можете также почитать справку к SET.
Автор: YuS_two
Дата сообщения: 07.06.2016 15:22
thejustsoul

Цитата:
Файл проверяется, в папке со скриптом.

А если это файл, то каким образом имя файла (причем без расширения) оказалось равным имени переменной?

Цитата:
if exist CHANGE


Цитата:
Переменная %CHANGE%

Зачем наступать на грабли, которые можно обойти?


Цитата:
Есть код, который проверяет значение переменной (которая выше в скрипте обозначена), если одно значение, то делается одно, если другое, то другое действие.

Вы уж определитесь, переменная это или файл... соберитесь с мыслями и по пунктам распишите, что хотелось получить в итоге... а мы уже подскажем как это лучше сделать.

Код: set "file=x:\!!!длинный путь с пробелами и восклицательными знаками\Имя файла.ext"
if exist "%file%" (
for /F "usebackq delims=" %%i in ("%file%") do set CHANGE=%%i&&call echo CHANGE=%%CHANGE%%
)
Автор: GCRaistlin
Дата сообщения: 07.06.2016 16:11
YuS_two

Цитата:
А если в переменной записан путь, который содержит восклицательные знаки?

Никакой проблемы нет. !-раскрытие происходит один раз. Вот если имя переменной содержит их, тогда да...
Автор: thejustsoul
Дата сообщения: 07.06.2016 18:02
YuS_two
А что, не бывает файлов без расширений?) Там где первый if (который проверяет наличие файла), я указываю как нужно, это не переменная. Но в другом месте кода, есть и сравнение значений переменной..
А то что файл и переменная называются одинаково, в этом нет ничего странного -)

Вот, примерно так выглядел код, по которому были вопросы..

Код:
setlocal enableextensions
set FILE=test.exe

<...>

if exist CHANGE (
for /F "delims=" %%i in (CHANGE) do set CHANGE=%%i
)

<...>

if "%FILE%"=="test.exe" (
for /F "delims=" %%d in ('dir /B /A:D "tmp\*"') do set APPDIR=%%d
<...> тут код, которому нужна переменная %APPDIR%, но она пуста получается, если этот FOR внутри скобок...
)

if "%FILE%"=="test2.exe" (
<...>
)
Автор: YuS_two
Дата сообщения: 07.06.2016 18:38
GCRaistlin

Цитата:
Никакой проблемы нет.

Есть, только она немного... в общем, так:

Код: @echo off
rem пример пути к файлу: c:\!!111ОдинОдинразраз\
set fil=file.txt
setlocal enabledelayedexpansion
if not defined pap (set /p pap="Введите абсолютный путь к файлу: ")
rem ===============================================================
if exist "%pap%%fil%" (echo 1. Файл существует&&echo 1. %pap%) else (echo 1. Индейская хижина&&echo 1. %pap%)
if exist "!pap!!fil!" (echo 2. Файл существует&&echo 2. !pap!) else (echo 2. Индейская хижина&&echo 2. !pap!)
pause
Автор: GCRaistlin
Дата сообщения: 07.06.2016 19:18
YuS_two

Цитата:
Есть, только она немного...

Немного - что? В первом случае вы при включенном delayed expansion используете %-раскрытие, со всеми вытекающими. При !-раскрытии все хорошо.
Автор: thejustsoul
Дата сообщения: 07.06.2016 19:56
Наверно надоел уже, но посмотрите, поправьте где не верно)..

Код:
setlocal EnableExtensions или EnableDelayedExpansion? и надо ли..
set FILE=test.exe

<...>

if exist CHANGE (
for /F "delims=" %%i in (CHANGE) do set CHANGE=%%i
)
тут (за скобками) обращаться к переменной CHANGE как "%CHANGE%" или как "!CHANGE!" ?
<...>

if "%FILE%"=="test.exe" (
for /F "delims=" %%d in ('dir /B /A:D "tmp\*"') do set APPDIR=%%d
тут нужно обращаться к переменной как "!APPDIR!"
<...>
)

if "%FILE%"=="test2.exe" (
<...>
)

Страницы: 1234567

Предыдущая тема: Дубль


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