Ru-Board.club
← Вернуться в раздел «Программы»

» Командная строка, батники, сценарии (bat, cmd)

Автор: timka85
Дата сообщения: 30.04.2009 21:21
С мыслью, что меня не так поняли, еще раз обращаюсь к знатокам батного дела!!! Есть идея реализовать алфавитный запуск файлов через батники таким образом, чтобы каждый батник следовал своему алфавитному правилу запуска файла в той папке где он находится.

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

Надеюсь, на этот раз я был более понятет для всех, и мой вопрос не останется в стороне.
Спасибо вам заранее.

З.Ы.
Вот идея в красках, если что:
Автор: 01MDM
Дата сообщения: 30.04.2009 21:55
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
Автор: Cosmogor
Дата сообщения: 01.05.2009 08:07
Доброго времени суток.

У меня есть вопрос гуру, как сделать переменную для найденного файла.
Из встроенной справки ни чего не понял.
Я так понимаю это функция 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,
а затем использовать для других команд?

Спс.
Автор: Maza_Faka
Дата сообщения: 01.05.2009 08:36
Cosmogor

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

%1
Автор: Cosmogor
Дата сообщения: 01.05.2009 08:45
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
Неработает!
Автор: Maza_Faka
Дата сообщения: 01.05.2009 09:24
Cosmogor
Приведите полный пример.
Автор: basstard
Дата сообщения: 01.05.2009 10:22
Cosmogor

После первого FOR работает, всё путём.
Спускаемся ниже, и всё потерялась,


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

Ну я и подставлял , %%V и %%B

Вот и получается , что теряется для верхнего FOR
переменная. В чём причина? Незнаю.
Подскажите Пжл.

Спс.

Добавлено:
Maza_Faka

Вот тут пример:

Не судите строго за батник.

[more] FOR %%I IN (C D E F G H K) DO IF EXIST "%%I:\boot.ini" (
CALL ROVERKA %%I) && (GoTo :EOF)

ROVERKA
REM Проверка на наличие файла boot_save.tmp
IF EXIST "%1:\boot_save.tmp" GOTO Write
IF NOT EXIST "%1:\boot_save.tmp" GOTO save
EXIT

:save
REM Резервное копирование файла boot.ini
echo Y|copy "%1:\boot.ini" "%1:\boot_save.tmp"
GOTO Write
EXIT

:Write
REM Запись из файла boot_save.tmp третьей строки в файл 4.tmp
more<"%1:\boot_save.tmp" | Findstr /b "default">"%1:\4.tmp"

REM Удаление из файла 4.tmp - "default=" и запись результатов в файл 5.tmp
for /f "tokens=*" %%a in ('more^<"%1:\4.tmp"') do call :_replace %%a
goto eof
:_replace
set i=%*
echo %i%
set i=%i:default=%
if "%i:~0,1%"=="=" SET i=%i:~1%
echo %i%>"%1:\5.tmp"

REM Удаление файла:4.tmp
echo Y|DEL "%1:\4.tmp"
Pause
EXIT [/more]
Автор: timka85
Дата сообщения: 01.05.2009 14:59
01MDM,

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

Батники мне нужны для их универсального использования в запуске ярлыков для какой-либо программы в какой-либо папке и для последовательного запуска одной и той же сторонней программы... Скажем, мне нужно каждый раз, как я запускаю ярлык, чтобы вместе с этим запускался Notepad.exe для пометки времени и причины ее запуска ))) Только это для примера, и сами батники не должны использоваться только для этих ярлыков.

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

Сбасибо за ответ.

З.Ы.
Прошу указывать какие значения в вашем решении мне прийдется изменять для каждого батника.
З.Ы.Ы.
01MDM, только что проверил Ваш вариант и вынужден признать, что Вы в корне меня не так поняли. Судя по всему, Вы создали нечто, что запускает 3 файла .cmd, каждый из которых якобы должен запускать свой статичный ярлык... Это не то, что мне нужно. Извините. Попробуйте, пожалуйста, снова.
Автор: basstard
Дата сообщения: 01.05.2009 15:10
Cosmogor,

так ты и не сказал, как скрипт имена файлов получает..
но извлекать имя диска, как сейчас, все равно никуда не годится,
если ты все-таки хочешь делать это ч/з FOR и по одному,
то лучше сделать это так (можно сразу все скопировать,
вставить имя файла и проверить):

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

Спасибо, подтолкнул на путь истинный.
Сейчас буду всё заново строить.
Но GOTO тоже хорошая вещь!
И иногда она требуется, хотя у меня весь батник
построен на GOTO
Автор: 01MDM
Дата сообщения: 01.05.2009 16:44
timka85
Напиши, что должен делать батник конкретно.

Автор: basstard
Дата сообщения: 01.05.2009 16:47
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
Автор: Cosmogor
Дата сообщения: 01.05.2009 17:02
Мир не без добых людей
Форум forum.ru-board рулит!
Автор: timka85
Дата сообщения: 01.05.2009 18:38
01MDM,
дык уже написал на примере блокнота и винампа. Ну а если все с самого начала и по делу, то давайте объясню еще раз.
Общее действие с моим батником.
Запускаю свой простенький батник, который запускает ф. менеджер Commander.exe . Далее батник продолжает ждать его завершения в Диспетчере задач и затем выполняет дальнейшую операцию... Так вот, для завершения этого процесса в нашем случае запускается один из нужных мне БАТников, заключающий в себе общую (Универсальную) схему работы. И вот, схема такая:
Схема действия нужного БАТника.
1. функция "Порядковый номер".
В запущенном окне Commander.exe я нахожу Постоянную папку с меняющимися ярлыками каждый раз новой программы (вот поэтому и нужны универсальные БАТники). Я знаю, что для комбинированного запуска ярлыка и одновременного изменения статуса окна (Невидимое) мне нужен пакетный файл, который автоматически сможет определить визуально-выбранный мной второй ярлык из списка всех ярлыков и запустить его. То есть, определив кокой ярлык мне подходит, я обращаю свой выбор к списку БАТников, а именно к Приоритет#2.bat, а лучше так - к Start_second_link.bat.

2. функция "Пропал и завис".
Запустив Start_second_link.bat, стартует приложение (по ярлыку) и вместе с тем окно Commander.exe прячется и остается висеть в Д.з. Для чего? Как Вы уже поняли, чтобы первый батник Общего действия не продолжил свою рабуту преждевременно.

3. функция "Контрольный выстрел".
Закончив работу с приложением, я закрываю его, и тут же должен убиться тот спрятанный процесс Commander.exe .На этой стадии задача Универсального батника заканчивается.
Дальше батник Общего действия продолжает выполнять свою работу, а timka85 со слезами на глазах от радости быстро возвращается сюда и благодарит автора кода.
(прошу, не спрашивайте, пожалуйста, зачем мне нужен запуск ярлыков из ф. менеджера, а также почему мне нужно так заморачиваться с этой Постоянной папкой)
Автор: Solotoy
Дата сообщения: 01.05.2009 18:40
день добрый...
задача start.bat при запуски
вырезает все с разрешением .rar файлы с папки "X:\date"
и вставляет их в папку "G:\down"
спасибо за код и время потраченное на меня...
Автор: timka85
Дата сообщения: 01.05.2009 19:01
Solotoy
move /-Y X:\date\*.rar G:\down

/Y на случай, если ты не хочешь подтверждать перезапись существующих в папке назначения файлов.
Автор: 01MDM
Дата сообщения: 01.05.2009 19:46
timka85

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


Код:
@echo off
start /wait "" "%ProgramFiles%\Commander\Commander.exe"

:: Батник будет ждать закрытия Коммандера и после этого продолжит свою работу

echo Next Task
Автор: timka85
Дата сообщения: 01.05.2009 20:04
01MDM
где-то ошибка.. не работает.
А нельзя без указания пути? Батник лежать должен в той же папке. Я потестил все, что можно, но безуспешно.
Автор: 01MDM
Дата сообщения: 01.05.2009 20:50
timka85
Eсли в пути к папке есть русские названия и если батник сохранен в win кодировке, используй команду chcp

Код:
@echo off
chcp 1251 1>nul
.....
Автор: Cosmogor
Дата сообщения: 02.05.2009 00:02
Есть файл 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:
Автор: timka85
Дата сообщения: 02.05.2009 02:41

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

отлично! теперь запуск указанного в списке ярлыка работает на УРА! Благодарю Вас за это. А теперь осталось только написать следующую команду, описанную в пункте "2" - Пропал и завис. С третьим пунктом я уже как-нибудь сам. Еще раз Вам спасибо за столь ценный код. Браво!
Автор: basstard
Дата сообщения: 02.05.2009 10:03
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
Автор: 01MDM
Дата сообщения: 02.05.2009 10:14
timka85

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



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


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

Добавь во второй батник:

Код:
nircmdc win hide ititle "Постоянные символы заголовока окна Коммандера"
Автор: timka85
Дата сообщения: 02.05.2009 11:29
01MDM

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

в том-то и оно! Первый (Общий) батник действительно должен дожидаться завершения процесса Commander.exe, а второй (Искомый) должен позаботиться, чтобы он правильно завершился. И именно поэтому мне необходимо не убить его, а только скрыть с глаз долой до момента его ненадобности. А уж потом, когда я закрою Приложение, завершится и сам процесс Commander.exe, и, соответственно, Общий батник продолжит свою работу.
Я начинаю побаиваться, читая мануалы, что так просто манипулировать Видимостью уже запущенным процессом через БАТ - не выйдет. Хотя может это только мои страхи...
Спасибо Вам за поддержку. Жду дальнейшего решения.
Автор: Cosmogor
Дата сообщения: 02.05.2009 15:58
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!

Сейчас всё работает путём!!

Спс.
Автор: timka85
Дата сообщения: 02.05.2009 16:51
01MDM
ну хорошо тогда такой вопрос. Как будет выглядеть отдельная команда в БАТ-файле для преобразования вида запущенного процесса в Невидимый вид?
Автор: LikvidatorMax
Дата сообщения: 02.05.2009 18:18
Помогите решить проблему.
Есть папка, в которой лежат книги. Они начали занимать слишком много места. Я хочу их все заархивировать в zip каждый файл в отдельный архив (чтобы было удобнее).
Не хочется делать вручную
Автор: 01MDM
Дата сообщения: 02.05.2009 18:41
timka85

Цитата:
Как будет выглядеть отдельная команда в БАТ-файле для преобразования вида запущенного процесса в Невидимый вид?

Я же написал, с помощью утилиты nircmd. Штатными способами может быть на vbs, но это "другая песня".
Автор: Cosmogor
Дата сообщения: 02.05.2009 19:44
Вот силами форума создал наконец батничек.
Вот Ссылка на файл
он упакован в самораспаковывающийся архив
При желании все файлы можно извлечь (чтоб посмотреть код)
Суть файла такова:

Устанавливается начальная загрузочная заставка
Boot Screen, на замену Windows-кой, есть возможность
восстановить всё как было до установки Boot Screen.
В системе ни чего не удаляется! Просто редактируется
файл boot.ini, и делается запись в реестре.

Мне он потребовался для одного дела, работает без
изьянов (у меня работает хорошо, в оси Windows XP SP2)
Может кому и понадобится он.

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

Предыдущая тема: SAS.Планета (часть 2)


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.