Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Программы » Командная строка, батники, сценарии (bat, cmd)

Модерирует : gyra, Maz

Widok (03-03-2010 16:29): Лимит страниц. Продолжаем здесь.  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101

   

Widok



Moderator-Следопыт
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Командная строка, батники\сценарии (bat, cmd)
(часть 1) (часть 2)
Вопросы, задачи и их решения по работе с командной строкой, файлами, а также сопутствующие ссылки.

 
Важно: копируя батник через буфер обмена из форума не забывайте удалять пробелы в конце каждой строки, т.к. в некоторых случаях из-за этого программа будет работать неправильно!!!
 
Примечание: Большие куски кода заключайте в тэг [more]  
 
Смежные темы:
В помощь системному администратору » Автоматизация администрирования
Microsoft Windows » Задачи на bat-файлах 5
 
Полезные ссылки:
· Cmd. Описание от разработчиков
· Урок bat-аники (для начинающих)
· Курс лекций для начинающих. Полезно и просто описано
· Набор GNU утилит для win32
· Пакет утилит для организации интерфейса в bat-файлах
· Использование ansi.sys
· cmdow — изменение параметров и видимости дос-окна
· blat — отправка почты из консоли
· Справка по командам в виде Html
· Команды RunDll32
· Quick Batch File Compiler - Позволяет превратить ваш батник в независимое приложение
· Пример - получение и обработка списка пользователей
· Уильям Станек - Командная строка Microsoft Windows (вплоть до w2k3)
· Простой способ получать текущую дату всегда в одном формате (не зависит от языков и настроек)
· Переход из 32-битной версии cmd.exe в 64-битную

Всего записей: 24190 | Зарегистр. 07-04-2002 | Отправлено: 12:38 10-03-2009 | Исправлено: TechnicsKuzya, 13:54 27-12-2009
timka85

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
 С мыслью, что меня не так поняли, еще раз обращаюсь к знатокам батного дела!!! Есть идея реализовать алфавитный запуск файлов через батники таким образом, чтобы каждый батник следовал своему алфавитному правилу запуска файла в той папке где он находится.
   
  Что значит алфавитное правило запуска? Очень просто! К примеру, у вас есть 3 файла (расширение не важно) и нужно соответствующее число батников для их запуска. Скажу сразу, число и тех и других не должно иметь значения. Дальше проблема такая. Первые 3 файла постоянно заменяются и конечно же меняются их имена! А это значит, что разговоры о статической настройке запуска через батники можно сразу отбросить в сторону. Для тех, кто еще не совсем понял цель операции, поясняю, что нужны батники с динамическим обнаружением и запуском файлов, в соответствии с порядковым представлением их имен по алфавиту.
 
  Надеюсь, на этот раз я был более понятет для всех, и мой вопрос не останется в стороне.
  Спасибо вам заранее.
 
З.Ы.
Вот идея в красках, если что:
 

Всего записей: 236 | Зарегистр. 19-07-2008 | Отправлено: 22:21 30-04-2009 | Исправлено: timka85, 22:51 30-04-2009
01MDM



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
timka85
Так сколько у тебя батников? 3? 26?

Код:
 
@echo off
setlocal
 
for %%i in (*.*) do set /a cnt+=1 && call:start "%%i"
goto:eof
 
:start
if %cnt% geq 4 goto:eof
start Batnic#%cnt%.cmd %1
 

 

Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 22:55 30-04-2009
Cosmogor



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Доброго времени суток.
 
У меня есть вопрос гуру, как сделать переменную для найденного файла.
Из встроенной справки ни чего не понял.
Я так понимаю это функция set.
 
код:
 
FOR %%I IN (C D E F G H K) DO IF EXIST "%%I:\1.txt" (
CALL :save %%I) && (GoTo :EOF)
 
echo Y|attrib -s -h -r "%переменная%:\1.txt"
start %переменная% Activation.txt
start %переменная% Activation.exe
 
Как её найти "%переменная%:\1.txt,  
а затем использовать для других команд?
 
Спс.

Всего записей: 230 | Зарегистр. 22-04-2009 | Отправлено: 09:07 01-05-2009
Maza_Faka



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Cosmogor

Цитата:
Как её найти

%1

Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 09:36 01-05-2009
Cosmogor



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Maza_Faka
 
Но она не работает!
 
Код
FOR %%I IN (C D E F G H K) DO IF EXIST "%%I:\1.txt" (  
CALL :save %%I) && (GoTo :EOF)
Здесь работает
FOR %%I IN (C D E F G H K) DO IF EXIST "%%I:\2.txt" (  
CALL :save1 %%I) && (GoTo :EOF)
А здесь не работает
 
После первого FOR работает, всё путём.
Спускаемся ниже, и всё потерялась,
После второго FOR переменная %1 для первого FOR
Неработает!

Всего записей: 230 | Зарегистр. 22-04-2009 | Отправлено: 09:45 01-05-2009 | Исправлено: Cosmogor, 09:57 01-05-2009
Maza_Faka



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Cosmogor
Приведите полный пример.

Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 10:24 01-05-2009
basstard

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cosmogor
 
После первого FOR работает, всё путём.  
Спускаемся ниже, и всё потерялась,

 
в обоих случаях "%%I"?
попробуй во втором %%Y
а лучше расскажи откуда скрипт пути .txt узнает?
ты их как параметры передаешь? если да,
то можно проще сделать

Всего записей: 58 | Зарегистр. 05-08-2008 | Отправлено: 11:22 01-05-2009
Cosmogor



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
basstard
 
Ну я и подставлял , %%V и %%B
 
Вот и получается , что теряется для верхнего FOR
переменная. В чём причина? Незнаю.
Подскажите Пжл.
 
Спс.
 
Добавлено:
Maza_Faka
 
Вот тут пример:  
 
Не судите строго за батник.
 
Подробнее...

Всего записей: 230 | Зарегистр. 22-04-2009 | Отправлено: 12:50 01-05-2009
timka85

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
01MDM,

Цитата:
Скажу сразу, число и тех и других не должно иметь значения.

Батники мне нужны для их универсального использования в запуске ярлыков для какой-либо программы в какой-либо папке и для последовательного запуска одной и той же сторонней программы... Скажем, мне нужно каждый раз, как я запускаю ярлык, чтобы вместе с этим запускался Notepad.exe для пометки времени и причины ее запуска ))) Только это для примера, и сами батники не должны использоваться только для этих ярлыков.
 
ВСЕМ,
И ЕЩЕ! Вдруг вспомнил, что нужно еще добавить такую важную функцию в каждый батник, чтоб после запуска нашего ярлыка (Внимание!) окно совсем другой программы (напр. Winamp.exe) становилось невидимым и только отображалось в списке процессов в Диспетчере задач! А затем, после завершения работы приложения, запущенного с ярлыка, скрытая программа (процесс Winamp.exe) должна убиваться. Такая игра с окном Winamp.exe нужна для продолжения действия другого батника, ожидающего завершения этого процесса. Этот батник уже готов, так что осталась самая малость - написать то, о чем я тут прошу уважаемых мастеров батного дела уже не первый день. Кстати, если для реализации ЭТОГО через батник понадобится вложить в System32 дополнительную утилитку, то я на это согласен.
 
Сбасибо за ответ.
 
З.Ы.
Прошу указывать какие значения в вашем решении мне прийдется изменять для каждого батника.
З.Ы.Ы.
01MDM, только что проверил Ваш вариант и вынужден признать, что Вы в корне меня не так поняли. Судя по всему, Вы создали нечто, что запускает 3 файла .cmd, каждый из которых якобы должен запускать свой статичный ярлык... Это не то, что мне нужно. Извините. Попробуйте, пожалуйста, снова.

Всего записей: 236 | Зарегистр. 19-07-2008 | Отправлено: 15:59 01-05-2009
basstard

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cosmogor,
 
так ты и не сказал, как скрипт имена файлов получает..
но извлекать имя диска, как сейчас, все равно никуда не годится,
если ты все-таки хочешь делать это ч/з FOR и по одному,
то лучше сделать это так (можно сразу все скопировать,
вставить имя файла и проверить):

Код:
@echo off
setlocal enabledelayedexpansion
for %%i in ("<путь к интересующему файлу>") do (
    set diskname=%%~di
)
echo Fail raspolozhen na diske !diskname!
pause

цикл вернет имя диска с двоеточием, но без слеша, напр. C:
файлу не обязательно находится в корне, он может быть где угодно,
напр., H:\windows\system32\cmd.exe все равно вернет H:
что происходит в скрипте дальше я понял только местами,
но <GOTO> не нужны совсем:
ВСЕ файлы могут быть обработаны
в рамках одного-единственного цикла
 
Добавлено:
Cosmogor,
 
если же путь не известен, а знаешь только имя, и по нему ищешь, то так:

Код:
@echo off
setlocal enabledelayedexpansion
for %%j in (C D E F G H K) do (
    if exist "%%j:\<имя файла>" (
        set filename="%%j:\<имя файла>"
        for %%i in (!filename!) do (
            set diskname=%%~di
        )
    )
)
if defined diskname (
    echo Fail raspolozhen na diske !diskname!
) else (
    echo Fail ne naiden
)
pause

Всего записей: 58 | Зарегистр. 05-08-2008 | Отправлено: 16:10 01-05-2009 | Исправлено: basstard, 16:14 01-05-2009
Cosmogor



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
basstard
 
Спасибо, подтолкнул на путь истинный.
Сейчас буду всё заново строить.
Но GOTO тоже хорошая вещь!
И иногда она требуется, хотя у меня весь батник  
построен на GOTO  

Всего записей: 230 | Зарегистр. 22-04-2009 | Отправлено: 17:05 01-05-2009
01MDM



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
timka85
Напиши, что должен делать батник конкретно.
 

Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 17:44 01-05-2009
basstard

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cosmogor,
 
для одного файла и без <GOTO> это выглядит вот так:
(содержимое :save и :Write не изменилось совсем (кроме ссылок конечно)
вызов :_replace тоже пришлось оставить: так и не понял, чего он там делает
и с какими параметрами должен быть вызван) изменилась только структура,
так что должно работать искаропки чтобы скрипт обрабатывал сразу
несколько файлов, придется добавить еще 2 строки

Код:
@echo off
setlocal enabledelayedexpansion
for %%j in (C D E F G H K) do (
    if exist "%%j:\boot.ini" (
        if not exist "%%j:\boot_save.tmp" (
            echo Y|copy "%%j:\boot.ini" "%%j:\boot_save.tmp"
        )
        more<"%%j:\boot_save.tmp" | Findstr /b "default">"%%j:\4.tmp"
        for /f "tokens=*" %%a in ('more^<"%%j:\4.tmp"') do call :_replace %%a
    )
)
exit
:_replace
set i=%*
echo %i%
set i=%i:default=%
if "%i:~0,1%"=="=" SET i=%i:~1%
echo %i%>"%%j:\5.tmp"
echo Y|DEL "%%j:\4.tmp"
Pause  
EXIT

Всего записей: 58 | Зарегистр. 05-08-2008 | Отправлено: 17:47 01-05-2009
Cosmogor



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Мир не без добых людей
Форум forum.ru-board рулит!

Всего записей: 230 | Зарегистр. 22-04-2009 | Отправлено: 18:02 01-05-2009
timka85

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
01MDM,
дык уже написал на примере блокнота и винампа. Ну а если все с самого начала и по делу, то давайте объясню еще раз.
Общее действие с моим батником.
Запускаю свой простенький батник, который запускает ф. менеджер Commander.exe . Далее батник продолжает ждать его завершения в Диспетчере задач и затем выполняет дальнейшую операцию... Так вот, для завершения этого процесса в нашем случае запускается один из нужных мне БАТников, заключающий в себе общую (Универсальную) схему работы. И вот, схема такая:
Схема действия нужного БАТника.
1. функция "Порядковый номер".
В запущенном окне Commander.exe я нахожу Постоянную папку с меняющимися ярлыками каждый раз новой программы (вот поэтому и нужны универсальные БАТники). Я знаю, что для комбинированного запуска ярлыка и одновременного изменения статуса окна (Невидимое) мне нужен пакетный файл, который автоматически сможет определить визуально-выбранный мной второй ярлык из списка всех ярлыков и запустить его. То есть, определив кокой ярлык мне подходит, я обращаю свой выбор к списку БАТников, а именно к Приоритет#2.bat, а лучше так - к Start_second_link.bat.
 
2. функция "Пропал и завис".
Запустив Start_second_link.bat, стартует приложение (по ярлыку) и вместе с тем окно Commander.exe прячется и остается висеть в Д.з. Для чего? Как Вы уже поняли, чтобы первый батник Общего действия не продолжил свою рабуту преждевременно.
 
3. функция "Контрольный выстрел".
Закончив работу с приложением, я закрываю его, и тут же должен убиться тот спрятанный процесс Commander.exe .На этой стадии задача Универсального батника заканчивается.
  Дальше батник Общего действия продолжает выполнять свою работу, а timka85 со слезами на глазах от радости быстро возвращается сюда и благодарит автора кода.
(прошу, не спрашивайте, пожалуйста, зачем мне нужен запуск ярлыков из ф. менеджера, а также почему мне нужно так заморачиваться с этой Постоянной папкой)

Всего записей: 236 | Зарегистр. 19-07-2008 | Отправлено: 19:38 01-05-2009 | Исправлено: timka85, 19:48 01-05-2009
Solotoy



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
день добрый...
задача start.bat при запуски  
вырезает все с разрешением .rar файлы с папки "X:\date"
и вставляет их в папку "G:\down"
спасибо за код и время потраченное на меня...

Всего записей: 175 | Зарегистр. 23-01-2007 | Отправлено: 19:40 01-05-2009
timka85

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Solotoy
move /-Y X:\date\*.rar G:\down
 
/Y на случай, если ты не хочешь подтверждать перезапись существующих в папке назначения файлов.

Всего записей: 236 | Зарегистр. 19-07-2008 | Отправлено: 20:01 01-05-2009
01MDM



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
timka85

Цитата:
Запускаю свой простенький батник, который запускает ф. менеджер Commander.exe . Далее батник продолжает ждать его завершения в Диспетчере задач и затем выполняет дальнейшую операцию...


Код:
 
@echo off
start /wait "" "%ProgramFiles%\Commander\Commander.exe"
 
:: Батник будет ждать закрытия Коммандера и после этого продолжит свою работу
 
echo Next Task
 

 
Батник запускающий второй по списку ярлык из папки "Some Folder":

Код:
 
@echo off
setlocal enabledelayedexpansion
 
for %%i in ("C:\Some Folder"\*.lnk) do (
    set /a cnt+=1
    if !cnt!==2 "%%i"
)
 

 
 
 
 
 

Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 20:46 01-05-2009
timka85

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
01MDM
где-то ошибка.. не работает.
А нельзя без указания пути? Батник лежать должен в той же папке. Я потестил все, что можно, но безуспешно.

Всего записей: 236 | Зарегистр. 19-07-2008 | Отправлено: 21:04 01-05-2009
01MDM



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
timka85
Eсли в пути к папке есть русские названия и если батник сохранен в win кодировке, используй команду chcp

Код:
 
@echo off
chcp 1251 1>nul
.....
 
 
 
Или положи батник в нужную папку и исправь `for %%i in (*.lnk) do...`
 

Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 21:50 01-05-2009
   

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101

Компьютерный форум Ru.Board » Компьютеры » Программы » Командная строка, батники, сценарии (bat, cmd)
Widok (03-03-2010 16:29): Лимит страниц. Продолжаем здесь.


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru