Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Объединить нескольно cmd

Ответить
Настройки темы
CMD/BAT - Объединить нескольно cmd

Пользователь


Сообщения: 69
Благодарности: 0

Профиль | Отправить PM | Цитировать


День добрый, помогите объединить такое "творение", что-то у меня не получается (
Имеется установленная TiddlyWiki на Node.js, рабочая папка вики 'wiki' расположена в папке пользователя

Первым cmd я создаю бекап вики

Код: Выделить весь код
@echo off
cd /D %Userprofile%
tiddlywiki wiki --build index
Запускать команду бекапа надо именно из папки, где установлена вики, из других команда не отрабатывает
В ответ получаем
syncer-server-filesystem: Dispatching 'save' task: $:/StoryList
и в папке %UserProfile%\wiki\output создаётся файл index.html

Код: Выделить весь код
mkdir \\server\backup\tw\%date%
Создаю архивную папку с текущим числом в месте хранения

Код: Выделить весь код
move /y %UserProfile%\wiki\output\index.html \\server\backup\tw\%date%
переношу в созданную папку файл бекапа

Вообще эти три команды у меня настроены в штатном шедулере, и отрабатывают, но выглядит как "костыль". И к тому же тут мне попался на глаза прекрасный скрипт по удалению старых папок архивов, подправил под себя, прекрасно работает, спасибо Iska

Код: Выделить весь код
@echo off
setlocal enableextensions enabledelayedexpansion

set sFolder=\\server\backup\tw\%date%
set /a iCount = 5

for /f "skip=%iCount% usebackq delims=" %%i in (
    `dir /b /a:d /o:-d /t:w "%sFolder%"`
) do rd /s /q "%sFolder%\%%~i"

endlocal
exit /b 0
Можно ли объединить всё в один cmd, и присовокупить errorlevel к первой команде, ExitCode '0', если успех, то есть если успешный бекап, то переносится архив на сервер и удаляются старые ахивы. Но моё очередное "творение" даже в таком тестовом виде
Код: Выделить весь код
@echo off
cd /D %Userprofile%
tiddlywiki wiki --build index
if errorlevel 0 (
Msg /time:90 * "Готово."
) else (
Msg /time:90 * "Ошибка"
goto :eof
)
ничего не даёт, бекап создаётся, но более ничего не происходит. Такое впечатление, что после выполнения команды tiddlywiki my19 --build index скрипт завершается, ибо как даже при таком варианте
Код: Выделить весь код
@echo off
cd /D %Userprofile%
tiddlywiki my19 --build index
Msg /time:90 * Тест.
сообщение не показывает.

Спасибо за помощь!

Отправлено: 10:43, 20-09-2019

 

Старожил


Сообщения: 427
Благодарности: 72

Профиль | Отправить PM | Цитировать


Цитата mxm199:
сообщение не показывает. »
добавить pause в конце скрипта
и запустить

Отправлено: 10:49, 20-09-2019 | #2



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

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Пользователь


Сообщения: 69
Благодарности: 0

Профиль | Отправить PM | Цитировать


Пробовал, тоже самое, только создаёт бекап
Соответственно, так
Код: Выделить весь код
@echo off
cd /D %Userprofile%
tiddlywiki wiki --build index
echo %ErrorLevel%
тоже не показывает код выхода



Может можно как-нибудь отловить успех по выводу консоли? Он всегда одинаков "syncer-server-filesystem: Dispatching 'save' task: $:/StoryList".

Последний раз редактировалось mxm199, 20-09-2019 в 11:06.


Отправлено: 10:51, 20-09-2019 | #3


Аватара для Charg

Ветеран


Сообщения: 2798
Благодарности: 469

Профиль | Отправить PM | Цитировать


Цитата mxm199:
но выглядит как "костыль" »
Честно говоря вики в виде одного файла (если я правильно понял) работающая в контексте пользователя локально - это наикостыльнейший костыль из всех костылей.
Может стоит посмотреть в сторону альтернативных вариантов решения изначальной задачи, для которой эта вики используется?


Насчёт ErrorLevel - так не получится.
Потому что ты говоришь командной строке "отправь команду такую-то", и т.к. команда успешно отправляется на обработку куда-то дальше (на tiddlywiki) - errorlevel всегда будет 0.
Утилита CMD ничего не знает о том кто такое tiddlywiki, что оно делает или не делает и произошла ли на той стороне ошибка. С колокольни CMD это выглядит "я отправил команду, получил ответ - всё работает", следовательно errorlevel = 0

Если нужен лог ошибок - простейший (имхо) вариант - парсить всё на выходе построчно и дальше уже что-то делать.

Последний раз редактировалось Charg, 20-09-2019 в 11:41.


Отправлено: 11:29, 20-09-2019 | #4


Пользователь


Сообщения: 69
Благодарности: 0

Профиль | Отправить PM | Цитировать


Изображения
Тип файла: png 12.PNG
(15.2 Kb, 4 просмотров)
Тип файла: png 11.PNG
(23.4 Kb, 4 просмотров)

Цитата Charg:
отправь команду такую-то »
а если это завернуть в какой-либо, не знаю, обработчик что-ли?

Для автоматизации разного рода задач на серверах я вообще привык использовать xStarter, он очень даже хорошо справляется с основными задачами, и если через него запускать эту команду -
http://forum.oszone.net/attachment.p...1&d=1568969461
то он показывает и код выхода и вывод консоли
http://forum.oszone.net/attachment.p...1&d=1568968973

Но! На Win10, на Win2008r2 это почему-то не прокатывает, ругается мол неопознанная команда tiddlywiki

Последний раз редактировалось mxm199, 20-09-2019 в 11:51.


Отправлено: 11:45, 20-09-2019 | #5


Аватара для Charg

Ветеран


Сообщения: 2798
Благодарности: 469

Профиль | Отправить PM | Цитировать


mxm199, что это за автоматизация такая, которая предполагает клацание по кнопочкам в интерфейсе?
В шиндовсе есть встроенный планировщик, который делает ровно то же самое, бонусом отменяет зависимость от внешнего программного обеспечения (xStarter'a этого).
Нет, я не спорю, инструмент может хороший и удобный, и может что-то такое особенное он умеет, но если задача стоит просто на запуск команды по таймеру - это лишнее звено, имхо.

Цитата mxm199:
ругается мол неопознанная команда tiddlywiki »
В выводе echo %path% на клиентском компе есть упоминание этой вики (а точнее - месторасположения), а на серверной - нет. Угадал?

Последний раз редактировалось Charg, 20-09-2019 в 12:05.


Отправлено: 11:55, 20-09-2019 | #6


Пользователь


Сообщения: 69
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата Charg:
Угадал? »
Нет, это разные вики, на серваке стоит основная, а эксперементирую на локально установленной, пути разные по-этому

Цитата Charg:
предполагает клацание »
Дык, сначала наклацал, как конструктор, собрал что надо, а дальше и не вспоминаешь об этом

Отправлено: 12:23, 20-09-2019 | #7


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


mxm199,
  1. Где именно взять tiddlywiki, чтобы пощупать?
  2. В таком варианте:
Цитата mxm199:
Код: Выделить весь код
if errorlevel 0 (
    Msg /time:90 * "Готово."
) else (
    Msg /time:90 * "Ошибка"
    goto :eof
)
»
ветвь else никогда не получит управление. Потому как if errorlevel Number означает:
Цитата if /?:
ERRORLEVEL число Условие является истинным, если код возврата последней выполненной программы не меньше указанного числа.
То есть — для приведённого Вами кода получается не просто «равен нулю», а «равен или больше нуля». Если нужно именно сравнение на равенство, то:
Код: Выделить весь код
if "%errorlevel%" equ "0" …

Отправлено: 16:22, 20-09-2019 | #8


Ветеран


Сообщения: 1274
Благодарности: 564

Профиль | Отправить PM | Цитировать


Цитата mxm199:
можно как-нибудь отловить успех »
Цитата mxm199:
Первым cmd я создаю бекап вики »
Цитата mxm199:
в папке %UserProfile%\wiki\output создаётся файл index.html »
Код: Выделить весь код
if exist "%UserProfile%\wiki\output\index.html" (
 Msg /time:90 * "Готово."
) else (
 Msg /time:90 * "Ошибка"
)

Отправлено: 17:29, 20-09-2019 | #9


Пользователь


Сообщения: 69
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата Iska:
де именно взять tiddlywiki, чтобы пощупать »
Здесь

Цитата alpap:
if exist »
Да, кстати неплохая идея)


p.s. спасибо за советы, попробовал и так и так, но как я и писал выше

Цитата mxm199:
Такое впечатление, что после выполнения команды tiddlywiki my19 --build index скрипт завершается »
ничего после не выполняется, хотя наверно можно "if exist" завернуть просто в отдельный скрипт, который будет в шедулере выполняться после первого

Последний раз редактировалось mxm199, 23-09-2019 в 14:49.


Отправлено: 14:31, 23-09-2019 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Объединить нескольно cmd

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Общее - [статья]OOBE.cmd/SetupComplete.cmd/FirstLogon.cmd alegz81 Автоматическая установка Windows 11 / 10 / 8 / 7 / Vista 19 17-04-2018 08:18
CMD/BAT - Можно ли средствами cmd объединить однотипные XML-файлы в один? uzlprog Скриптовые языки администрирования Windows 4 09-06-2016 08:41
CMD/BAT - [решено] написать скрипт cmd используя cmd оператор for Den Скриптовые языки администрирования Windows 6 29-03-2012 09:48
CMD/BAT - [решено] как запустить cmd на удаленной машине чтобы cmd отобразилось у меня Mickle Скриптовые языки администрирования Windows 13 21-09-2010 14:43
CMD/BAT - [решено] Помогите запустить CMD-файл из CMD-файла с параметрами Oleg48 Скриптовые языки администрирования Windows 2 18-11-2009 11:08




 
Переход