Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.
Внимание! Некоторое время письма не доходят до аккаунтов MAIL RU GROUP, не доходят на все почтовые ящики mail.ru, inbox.ru, bk.ru. Пишите им жалобы, чтобы быстрее восстановили получение писем, регистрируйтесь через яндекс почту и gmail, туда письма с активизацией доходят.

Вернуться   Форум программистов > Delphi > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Ответ
 
Опции темы
Старый 08.11.2018, 10:45   #1
ComAlex
Пользователь
 
Регистрация: 27.08.2012
Сообщений: 24
Репутация: 10
По умолчанию [РЕШЕНО] Как выполнить команды bat-файла

Подскажите, господа программисты, как выполнить команды из bat-файла:
Код:

" ...
for /f "delims=" %%i in ('dir "%userprofile%\AppData\Roaming\1C\1Cv82\" /a:d /b') do (IF "%%i" NEQ "ExtCompT" (IF "%%i" NEQ "tmplts" (rmdir /s /q  "%userprofile%\AppData\Roaming\1C\1Cv82\%%i")))
for /f "delims=" %%i in ('dir "%userprofile%\AppData\Local\1C\1Cv82\" /a:d /b') do rmdir /s /q "%userprofile%\AppData\Local\1C\1Cv82\%%i"
for /f "delims=" %%i in ('dir "%userprofile%\AppData\Roaming\1C\1Cv8\" /a:d /b') do (IF "%%i" NEQ "ExtCompT" (IF "%%i" NEQ "tmplts" (rmdir /s /q  "%userprofile%\AppData\Roaming\1C\1Cv8\%%i")))
for /f "delims=" %%i in ('dir "%userprofile%\AppData\Local\1C\1Cv8\" /a:d /b') do rmdir /s /q "%userprofile%\AppData\Local\1C\1Cv8\%%i"
..."

Я хочу не запускать сам bat-файл, а выполнить ТОЛЬКО его команды, например, так:

Код:

var
  Wsh:    Variant;
Begin
  Wsh := CreateOleObject('WScript.Shell');
  Body := 'for /f "delims=" %%i in ('dir "%userprofile%\AppData\Roaming\1C\1Cv82\" /a:d /b') do (IF "%%i" NEQ "ExtCompT" (IF "%%i" NEQ "tmplts" (rmdir /s /q  "%userprofile%\AppData\Roaming\1C\1Cv82\%%i")))';
 // Body - первая строка выше приведенного bat-файла
  Wsh.Run(Body, 0, True);
...

НО так не работает !

Решение:
Цитата:
Сообщение от ComAlex Посмотреть сообщение
Разобрался: %%i ->%i. Всем спасибо - тема закрыта

_____
Код программы нужно выделять (форматировать) тегами [CODE][/CODE] (читать FAQ)
Модератор

Последний раз редактировалось Вадим Мошев; 10.11.2018 в 13:15.
ComAlex вне форума   Ответить с цитированием
Старый 08.11.2018, 11:12   #2
Serge_Bliznykov
МегаМодератор
СуперМодератор
 
Регистрация: 09.01.2008
Сообщений: 24,615
Репутация: 5352
По умолчанию

я Вам не помогу (ибо Вы странного хотите - по сути написать свой командный интрепретатор).

но у меня вопрос есть.
Цитата:
Сообщение от ComAlex Посмотреть сообщение
Я хочу не запускать сам bat-файл
Чем это вызвано?
Serge_Bliznykov вне форума   Ответить с цитированием
Старый 08.11.2018, 16:56   #3
ComAlex
Пользователь
 
Регистрация: 27.08.2012
Сообщений: 24
Репутация: 10
По умолчанию

Я не хочу хранить батник, к которому моя программа будет обращаться потому что:
1. bat-файл пользователи могут удалить нечаянно или чаянно.
2. bat-файл содержит статическую информацию (которая не меняется) - зачем обращаться не нему несколько раз
ComAlex вне форума   Ответить с цитированием
Старый 08.11.2018, 16:59   #4
ComAlex
Пользователь
 
Регистрация: 27.08.2012
Сообщений: 24
Репутация: 10
По умолчанию

Выход есть: надо всего лишь переписать код bat-файла как команды CMD, но ковыряться неохота, так как функционал bat-файла уже рабочий
ComAlex вне форума   Ответить с цитированием
Старый 08.11.2018, 17:22   #5
Serge_Bliznykov
МегаМодератор
СуперМодератор
 
Регистрация: 09.01.2008
Сообщений: 24,615
Репутация: 5352
По умолчанию

Цитата:
Сообщение от ComAlex Посмотреть сообщение
Я не хочу хранить батник, к которому моя программа будет обращаться потому что:
1. bat-файл пользователи могут удалить нечаянно или чаянно.
они точно так же и вашу программу могут удалить нечаянно или чаянно.

Хотите скрыть батник от чужих глаз?
Так никто не мешает вам батник преобразовать в EXE (есть такие инструменты, вроде бы),
либо "зашить" батник в ресурсы своей программы и при необходимости извлекать во временный файл и запускать.


Цитата:
Сообщение от ComAlex Посмотреть сообщение
2. bat-файл содержит статическую информацию (которая не меняется) - зачем обращаться не нему несколько раз
не понял. кто что содержит?


Цитата:
Сообщение от ComAlex Посмотреть сообщение
Выход есть: надо всего лишь переписать код bat-файла как команды CMD, но ковыряться неохота, так как функционал bat-файла уже рабочий
Вы не поверите, но расписать эти команды в командах Delphi будет намного проще, чем распарсить строчку из батника.
Ну, если, конечно, "ковыряться неохота", то ничего не надо делать, оставляйте всё так, как есть.
Serge_Bliznykov вне форума   Ответить с цитированием
Старый 08.11.2018, 18:24   #6
jillitil
Форумчанин
 
Аватар для jillitil
 
Регистрация: 17.10.2018
Адрес: DS:SI
Сообщений: 81
Репутация: 149
По умолчанию

Код:

  
Uses ..., ShellApi;
...
ShellExecute(Application.Handle, Nil, 'Cmd.exe','/c for /f "delims=" %%i in ("dir "%userprofile%\AppData\Local\1C\1Cv 82\" /a /b") do rmdir /s /q "%userprofile%\AppData\Local\1C\1Cv 82\%%i"', Nil, SW_HIDE);
...

PS: Будьте внимательны с одинарными кавычками.

Последний раз редактировалось jillitil; 08.11.2018 в 18:26.
jillitil вне форума   Ответить с цитированием
Старый 08.11.2018, 20:53   #7
ComAlex
Пользователь
 
Регистрация: 27.08.2012
Сообщений: 24
Репутация: 10
По умолчанию

Нет. Так не прокатывает
Ошибка: "Непредвиденное появление: %%i"

Этот вариант я вначале пробовал.
Тут что-то хитрее надо. Про кавычки знаю
ComAlex вне форума   Ответить с цитированием
Старый 08.11.2018, 22:18   #8
ComAlex
Пользователь
 
Регистрация: 27.08.2012
Сообщений: 24
Репутация: 10
По умолчанию

Разобрался: %%i ->%i
Всем спасибо - тема закрыта
ComAlex вне форума   Ответить с цитированием
Старый 10.11.2018, 11:03   #9
саша40
Профессионал
 
Регистрация: 12.09.2012
Сообщений: 1,030
Репутация: -22
По умолчанию

А я думал, что он будет юзать функции работы с файлами и работы с директориями. Ведь по сути, всё что делает батник - перетаскивает файлы из верхнего каталога в более нижний. Обход средств защиты 1С СофтКлаб? Никогда не понимал такие костыли, даже в лицензионном ПО.
__________________
Что нужно программисту: Компьютер, Среда программирование, Воображение, Прямые руки, Мозги, Знания этой среды программирования.
Программист-это профессия, а программирование-это моё хобби.
саша40 вне форума   Ответить с цитированием
Старый 11.11.2018, 00:37   #10
Serge_Bliznykov
МегаМодератор
СуперМодератор
 
Регистрация: 09.01.2008
Сообщений: 24,615
Репутация: 5352
По умолчанию

Цитата:
Сообщение от саша40 Посмотреть сообщение
едь по сути, всё что делает батник - перетаскивает файлы из верхнего каталога в более нижний.
а по моему это батник удаляет какие-то временные папки 1C, чистит какие-то каталоги.


Цитата:
Сообщение от саша40 Посмотреть сообщение
Никогда не понимал такие костыли, даже в лицензионном ПО.
при чём здесь костыли?
Serge_Bliznykov вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как на bat или vbs открыть свойства файла? sergeinovilozf Windows 20 30.03.2018 15:17
Как удалить значение в реестре c помощью BAT файла? alex0097 Операционные системы общие вопросы 3 03.01.2017 19:00
bat-файл. Анализ команды ping Niro Помощь студентам 2 20.05.2015 16:10
Не удается выполнить команды сопроцессора! VintProg Общие вопросы Delphi 1 21.09.2011 21:38
Написать .bat: поиск данных в выводе команды и занесение в переменную Vilgelm Операционные системы общие вопросы 8 14.08.2011 16:46


20:42.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru