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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
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
Cosmogor



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Есть файл 1.tmp, в нём одна строка:
default=multi(0)disk(0)rdisk(1)partition(1)\WINDOWS
 
Нужно Удалить из файла (default=), и добавить в конец строки
="ЏаЁ®ЎбЄ п ѓ®а®¤бЄ п Ў®«м-Ёж " /optin /Kernel=352.exe
Так что-бы получилась одна строка в файле.
 
Файл 1.tmp находится всегда в корне диска, вся сложность  
заключается вот в чём, что он может быть на другом диске.
 
Код:
 
 
FOR %%i IN (C D E F G H K Q W R T Y U I O P S J L Z X V B N M) DO (IF EXIST "%%i:\1.tmp" call:YES %%i)
:YES
for /f "tokens=*" %%a in ('more^<"%1:\1.tmp"') do set /p=%%a<nul>"%1:\2.tmp"
echo ="ЏаЁ®ЎбЄ п ѓ®а®¤бЄ п Ў®«м-Ёж " /noexecute=optin /Kernel=352.exe >>"%1:\2.tmp"
 
for /f "tokens=*" %%a in ('more^<"%1:\2.tmp"') do call :_replace %%a
goto eof
:_replace
Cset i=%*
echo %i%
set i=%i:default=%
if "%i:~0,1%"=="=" SET i=%i:~1%
echo %i%>"C:\3.tmp"
 
goto eof
EXIT

 
 
Этот код редактирует файл 1.tmp на диске C:
Но у меня ни как не получается отредактировать его,  
если он на диске D:

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

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

Цитата:
Или положи батник в нужную папку и исправь `for %%i in (*.lnk) do...`

отлично! теперь запуск указанного в списке ярлыка работает на УРА! Благодарю Вас за это. А теперь осталось только написать следующую команду, описанную в пункте "2" - Пропал и завис. С третьим пунктом я уже как-нибудь сам. Еще раз Вам спасибо за столь ценный код. Браво!

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

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cosmogor
 
Нужно Удалить из файла (default=), и добавить в конец строки  
="ЏаЁ®ЎбЄ п ѓ®а®¤бЄ п Ў®«м-Ёж " /optin /Kernel=352.exe  
Так что-бы получилась одна строка в файле.

 
Попробуй так:
(протестировать его не могу, так что расскажешь, что он делает)

Код:
 
@echo off
setlocal enabledelayedexpansion
for %%i in (c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z) do (
    if exist %%i:\1.tmp (
        set filename=%%i:\1.tmp
        set stopstring=not_exist
        for /f "tokens=1 delims= " %%j in (!filename!) do (
            if not !stopstring!==stop (
                set firststring=%%j
                set editstring=!firststring:~0,8!="ЏаЁ®ЎбЄ п ѓ®а®¤бЄ п Ў®«м-Ёж " /optin /Kernel=352.exe
                echo !editstring!>!filename!
                set stopstring=stop
            )
        )
    )
)
pause

Всего записей: 58 | Зарегистр. 05-08-2008 | Отправлено: 11:03 02-05-2009 | Исправлено: basstard, 11:18 02-05-2009
01MDM



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

Цитата:
А теперь осталось только написать следующую команду, описанную в пункте "2" - Пропал и завис.

 

Цитата:
Как Вы уже поняли, чтобы первый батник Общего действия не продолжил свою рабуту преждевременно.

 
Он и так будет работать и ждать завершения Commander.exe. Спрятать его можно, но потом придется завершать вручную, т.к второй батник не будет ждать завершения приложения, запущенного им с ярлыка (start /wait здесь не работает)
 
Добавь во второй батник:

Код:
 
nircmdc win hide ititle "Постоянные символы заголовока окна Коммандера"  
 


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

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

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

в том-то и оно! Первый (Общий) батник действительно должен дожидаться завершения процесса Commander.exe, а второй (Искомый) должен позаботиться, чтобы он правильно завершился. И именно поэтому мне необходимо не убить его, а только скрыть с глаз долой до момента его ненадобности. А уж потом, когда я закрою Приложение, завершится и сам процесс Commander.exe, и, соответственно, Общий батник продолжит свою работу.
  Я начинаю побаиваться, читая мануалы, что так просто манипулировать Видимостью уже запущенным процессом через БАТ - не выйдет. Хотя  может это только мои страхи...
 Спасибо Вам за поддержку. Жду дальнейшего решения.

Всего записей: 236 | Зарегистр. 19-07-2008 | Отправлено: 12:29 02-05-2009
Cosmogor



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
basstard
 
Нет, батник не сработал.
Вот как файл он отредактировал:
default=="ЏаЁ®ЎбЄ п ѓ®а®¤бЄ п Ў®«м-Ёж " /optin /Kernel=352.exe
 
А нужно чтоб получилось вот так:
multi(0)disk(0)rdisk(1)partition(1)\WINDOWS="ЏаЁ®ЎбЄ п ѓ®а®¤бЄ п Ў®«м-Ёж " /optin /Kernel=352.exe
 
Зато он этот файл на любом диске находит!
 
Спс.
 
Добавлено:
basstard
 
Нет, батник не сработал.
Вот как файл он отредактировал:
default=="ЏаЁ®ЎбЄ п ѓ®а®¤бЄ п Ў®«м-Ёж " /optin /Kernel=352.exe
 
А нужно чтоб получилось вот так:
multi(0)disk(0)rdisk(1)partition(1)\WINDOWS="ЏаЁ®ЎбЄ п ѓ®а®¤бЄ п Ў®«м-Ёж " /optin /Kernel=352.exe
 
Зато он этот файл на любом диске находит!
 
Спс.
 
Добавлено:
basstard
 
Вот подправил твой батник.
 
Было:
!firststring:~0,8!
 
Стало:
!firststring:~8!
 
Сейчас всё работает путём!!
 
Спс.  

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

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
01MDM
ну хорошо тогда такой вопрос. Как будет выглядеть отдельная команда в БАТ-файле для преобразования вида запущенного процесса в Невидимый вид?

Всего записей: 236 | Зарегистр. 19-07-2008 | Отправлено: 17:51 02-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