Войти

Показать полную графическую версию : Надо сконфигурировать последовательное исполнение команд


zhxr
22-10-2017, 17:43
Здравствуйте, есть такой скрипт:
@echo off
chcp 65001>nul
set /p Var=<counter.txt
set /a "Var+=1"
echo %Var% >counter.txt
....
Читает число из файла, прибавляет единицу и пишет результат обратно в файл.
Теперь пытаюсь поместить всю эту радость в одну строку:
setlocal enabledelayedexpansion
set "BuildN=set /p Var=<counter & set /a "Var+=1" & echo !Var! & echo !Var! >counter"
прога %BuildN% ещё аргументы
но с кавычками не справляюсь.
Пока даже set "BuildN=set /p Var=<counter & set /a "Var+=1" & echo %Var% & echo %Var% >counter" не получается корректно исполнить.
Помогите пожалуйста с конфигурацией. Может скобки нужны или ещё что.

Iska
22-10-2017, 17:53
Вот что это:
set "BuildN=set /p Var=<counter »
такое? Для чего это?

Вы хотите получить нечто наподобие:
@echo off
setlocal enableextensions enabledelayedexpansion

set sBuildNumberFile=counter.txt
<"%sBuildNumberFile%" set /p iBuildNumber= & set /a iBuildNumber += 1 & >"%sBuildNumberFile%" echo !iBuildNumber!
прога.exe %iBuildNumber% ещё аргументы

endlocal
exit /b 0

?!

zhxr
22-10-2017, 19:36
Здравствуйте, есть батник который крутится всё время.
В конце каждой рутины он вызывает другой батник и передаёт ему аргументы.
call Next.bat
На данный момент я желаю повысить информативность и пытаюсь вывести информацию в title.
Если очень упрощённо то:
call "Считаем плюс один и передаём результат в переменную bild" & title %times run% х %bild% & Next.bat
С %times run% проблем нет это считается отдельно и изменяется редко. Но с %bild% у меня загвоздка.
Проблема в том что всё включая счётчик надо поместить в одну строку
иначе тайтл не меняется. А у меня проблема с скобками.
Я не настолько опытен что бы самому справится.
Я попытался вставить то что вы написали.
На тестовом файле счётчик работает и заголовок меняется.
Но в живую не работает. Я пока не разобрался как именно исполняется
ваш код.

Iska
22-10-2017, 19:40
zhxr, без полного кода навряд ли можно будет что-то сказать.

zhxr
22-10-2017, 21:14
Iska, скажите пожалуйста что именно делают угловые скобки?
Это экранирование? Совсем не понимаю последовательность исполнения.
<"counter.txt" set /p iBuildNumber= & set /a iBuildNumber += 1 & >"counter.txt" echo !iBuildNumber!
Как разделить это на этапы?
1) "counter.txt" set /p iBuildNumber= Почему не set /p iBuildNumber="counter.txt"?
2) set /a iBuildNumber += 1
3) < 1) + 2) > пишем в "counter.txt"
4) echo !iBuildNumber!
Почему перед echo !iBuildNumber! нет & и это работает?

Iska
22-10-2017, 21:39
Iska, скажите пожалуйста что именно делают угловые скобки? »
Перенаправление потоков.

Это экранирование? »
Нет. Экранирование делается посредством «^».

Совсем не понимаю последовательность исполнения.
<"counter.txt" set /p iBuildNumber= & set /a iBuildNumber += 1 & >"counter.txt" echo !iBuildNumber!
Как разделить это на этапы? »
<"%sBuildNumberFile%" set /p iBuildNumber=
set /a iBuildNumber += 1
>"%sBuildNumberFile%" echo %iBuildNumber%


Почему не set /p iBuildNumber="counter.txt"? »
Видимо, имелось в виду «Почему не «set /p iBuildNumber=<"%sBuildNumberFile%"»?»

В данном случае какой-то принципиальной разницы нет, где будет находиться перенаправление — до команды или после. Можно и так, и так.

4) echo !iBuildNumber!
Почему перед echo !iBuildNumber! нет & и это работает? »
Есть перед echo «&»:
<"%sBuildNumberFile%" set /p iBuildNumber= & set /a iBuildNumber += 1 & >"%sBuildNumberFile%" echo !iBuildNumber!

alpap
23-10-2017, 00:30
Я полагаю что ТС требуется скорее не разовый запуск bat и чтобы при следующем запуске число в файле увеличивалось по отношению к последнему записанному, а не первоначальному, код должен быть такой:

@echo off
set "f=file.txt"
(if exist "%f%" <"%f%" set /p n=)& set /a n+=1& >"%f%" cmd /v/c echo:!n!
pause>nul


для начального (нового) счета, файл нужно удалять.

Iska
23-10-2017, 00:59
и чтобы при следующем запуске число в файле увеличивалось по отношению к последнему записанному, а не первоначальному »
Так вроде ж так и работает.

alpap
23-10-2017, 09:58
Так вроде ж так и работает. »
Действительно

Просто помню у меня были проблемы после перезагрузки надо было помнить последнее состояние, а файл то ли обнулялся, то ли перезаписывался, без хитростей не получалось, но то видимо такая задача была, а в голове засело.




© OSzone.net 2001-2012