Ru-Board.club
← Вернуться в раздел «Microsoft Windows»

» Задачи на bat-файлах 6

Автор: AZJIO
Дата сообщения: 15.11.2008 03:07
Elroir
Нашёл параметр %cd% в справке, хотя подобная справка и в винде есть.

Ещё вопрос: можно ли из батника запустить второй батник, но чтобы он выполнялся как самостоятельный, чтобы путь %cd% использовался для последующего батника.
В первом батнике так:
Цитата:
cd..
cd..
my2.bat
Пробовал вариант через exe-файл, который запускает второй батник, но два варианта exe-файла почему-то использовали корневой каталог первого батника, то есть второй батник работал неправильно. Если второй батник запустить кликом мыши, то он отрабатывает правильно.
Автор: NIKZZZZ
Дата сообщения: 15.11.2008 09:25
AZJIO

Цитата:
можно ли из батника запустить второй батник

call /?

Автор: timsky
Дата сообщения: 15.11.2008 12:36
Есть текстовый файл, содержащий телефонные номера. Около 50 номеров, каждый номер в отдельной строке.
Может кто-нибудь, показать, как из этого файла читать рандомную строку в переменную?
Автор: Elroir
Дата сообщения: 15.11.2008 13:49
timsky

Код:
@echo off
setlocal
set "lines=0"
for /f "tokens=*" %%a in (numbers.txt) do set /a "lines+=1"
set /a "skip=%random% %% lines"
if %skip% lss 1 (set "skip=") else (set "skip=skip=%skip%")
for /f "%skip% tokens=*" %%a in (numbers.txt) do set "number=%%a"&goto display
:display
echo %number%
Автор: timsky
Дата сообщения: 15.11.2008 16:29
Elroir
Огромное спасибо!
Автор: AZJIO
Дата сообщения: 15.11.2008 18:44
Elroir
если я делаю батник, то в нём я использую относительные пути, относительно каталога в котором находится батник. Если я его запускаю, он работает правильно. Если я пытаюсь запустить батник из другого батника, то он пишет что не найден путь, или не найден файл.
В теме LiveCD есть конструктор, который после сборки вносит изменения в сборку, там и переменные определены, казалось бы всё просто, и пути легко настроить, но сколько не бился с разными вариантами импортирования своего кода, так и не смог сделать чтоб он отработал самостоятельно. Если я буду при каждой сборке копировать файлы внутрь переменных окружения, то есть во временную папку, думаю всё бы получилось, но это лишнее время на копирование 480 мелких файлов. Файлы - иконки, которые патчат системные библиотеки под висту.
Может если сделать извлекающийся архив во временную папку тогда действительно пару секунд на извлечение не имело бы значение.
Были ещё случаи, к примеру нужно одним кликом запустить офисные программы, каждая программа не обязательно запускается *.exe файлом, а чаще батником, который проверит наличие профилей и (или) скопирует прогу на диск B, тогда приходится копировать код из батника в батник который запускает несколько программ сразу и переделывать пути и прочее, чтоб этот код сработал из текущей директории, когда на много удобней было бы указать пути к батникам, которые требуется выполнить. Редактировать тоже приходится уже не один батник, но и про второй не забывать. Есть программка installs.exe (60 кб), которая вроде решила часть проблем, но она не работает с CD-носителя.
Автор: king_stiven
Дата сообщения: 15.11.2008 21:13
AZJIO

Цитата:
Если я пытаюсь запустить батник из другого батника, то он пишет что не найден путь, или не найден файл.

Пиши абсолютные пути. Может Elroir и поймёт твоё объяснение (или вопрос?), я смутно догадываюсь. но не до конца. . Лучше задавать вопрос с конкретным кодом, с конкретной директорией, с конкретным примером, что пишется в батнике.
Вот здесь http://forum.ru-board.com/topic.cgi?forum=62&topic=11825&start=220
обсуждалось что то, может поможет.
Автор: DANT1FIL
Дата сообщения: 15.11.2008 22:42
Зравствуйте. Помошите пожалуйста написать батник...

Как сделать что бы при запуске компа батник проверял, работает ли интернет или нет? если работает, то завершал свою работу, а если нет, то перезагружал комп.??
Помогите пожалуйста.

Автор: Froz
Дата сообщения: 15.11.2008 22:49
DANT1FIL


Код:
@echo off
ping ya.ru
if errorlevel 1 shutdown -r -f -t 0
exit
Автор: AZJIO
Дата сообщения: 16.11.2008 01:11
king_stiven

Цитата:
я смутно догадываюсь. но не до конца

не стал отправлять свой пост, пока писал и проверял, понял, что дело в конструкторе, нужно с ним проверять батники.
Автор: Elroir
Дата сообщения: 16.11.2008 01:34
AZJIO
Один способ:
1. В начале custom_commands.cmd прописать команду "pushd".
2. Прописать команду "popd" перед cd.., cd..
3. Запускать !modify.bat командой "call !modify.bat"
Второй способ:
1. Изменить команду SET Start_Dir=%CD% на SET "Start_Dir=%CD%".
2. Прописать команду "cd /d "%Start_Dir%"" (без внешних кавычек) перед перед cd.., cd..
3. Запускать !modify.bat командой "call !modify.bat"

king_stiven

Цитата:
Может Elroir и поймёт твоё объяснение

Спасибо за веру в меня, но я тоже только "смутно догадывался", что имеется в виду
Автор: batniki
Дата сообщения: 16.11.2008 03:29
Помогите. Нужно получить список всех рабочих устройств в системе.
Автор: 01MDM
Дата сообщения: 16.11.2008 06:02
batniki
Тема слишком широкая, чтобы дать прямой ответ. Может есть специальные консольные утилиты, которые могут сразу вывести весь список устройств. А так, если штатными средствами, то смотри в сторону wmic, netsh, systeminfo (wmic и systeminfo отсутствуют в Home-версии).

Определение процессора на примере wmic:

Код:
wmic cpu get name,manufacturer
Автор: Ortios
Дата сообщения: 16.11.2008 10:09
Привет всем!
Как в реальном масштабе времени узнать имя залогинившегося в домене пользователя зная имя компьютера. Результат нужен в виде переменной для дальнейшей обработки.
Желательно через батник, подставляя имя компа как параметр.
Может быть можно как-нибудь просканировать папки в профилях \\comp01\c$\Documents and Settings\*.*, определить самый свежий ntuser.dat и потом вырезать из пути имя пользователя?
Автор: batniki
Дата сообщения: 16.11.2008 15:04
01MDM, спасибо большое!

Подскажите еще, как заменить \n на %0A , но при этом экранизировать %


Код: set mess=ru-board\nru-board\nru-board...
set "mess=%mess:\n=%%0A%"
Автор: 01MDM
Дата сообщения: 16.11.2008 22:21
batniki

Цитата:
Подскажите еще, как заменить \n на %0A , но при этом экранизировать %


Такой вариант подойдет?

Код:
@echo off
setlocal enabledelayedexpansion

set mess=ru-board\nru-board\nru-board...
echo %mess%

set mess=!mess:\n=%%0A!
echo %mess%
Автор: batniki
Дата сообщения: 16.11.2008 22:49
01MDM, спасибо, то что нужно!
А как сделать, чтобы несколько переменных обработать?
Вот на примере этого скрипта, только тут файл обрабатывается, а нужно, чтоб несколько переменных парсилось...

Код: @echo off
setlocal enableextensions enabledelayedexpansion
if not exist %1 goto :eof
for /f "delims=" %%i in (%1) do (
set Line=%%i
set Line=!Line:а=a!
set Line=!Line:б=b!
set Line=!Line:в=v!
....
Автор: 01MDM
Дата сообщения: 16.11.2008 23:07
batniki

Не совсем понял какие переменные, но если они уже определены, то можно так:

Код:
@echo off
setlocal enabledelayedexpansion

set mess_1=ru-board\nru-board\nru-board...
set mess_2=forum.ru-board\nforum.ru-board\n...

for %%i in (%mess_1% %mess_2%) do call:parse "%%i"
goto:eof

:parse
set line=%~1
set line=!line:\n=%%0A!
echo %line%
Автор: batniki
Дата сообщения: 16.11.2008 23:27
01MDM, второй вариант работает почти так, как нужно. Спасибо за скрипт.

Вот может кому пригодится этокий парсер символов:

Код: @echo off
chcp 1251 > nul
setlocal enableextensions enabledelayedexpansion

set mess01=спасибо за скриптъ
set mess02=01MDM

for %%i in ("{1}%mess01%" "{2}%mess02%") do (
set var=%%i
set var=!var:"=!
set var=!var:а=a!
set var=!var:б=b!
set var=!var:в=v!
set var=!var:г=g!
set var=!var:д=d!
set var=!var:е=e!
set var=!var:ё=e!
set var=!var:ж=zh!
set var=!var:з=z!
set var=!var:и=i!
set var=!var:й=jj!
set var=!var:к=k!
set var=!var:л=l!
set var=!var:м=m!
set var=!var:н=n!
set var=!var:о=o!
set var=!var:п=p!
set var=!var:р=r!
set var=!var:с=s!
set var=!var:т=t!
set var=!var:у=u!
set var=!var:ф=f!
set var=!var:х=kh!
set var=!var:ц=c!
set var=!var:ч=ch!
set var=!var:ш=sh!
set var=!var:щ=shh!
set var=!var:ъ=`!
set var=!var:ы=i!
set var=!var:ь=`!
set var=!var:э=e!
set var=!var:ю=yu!
set var=!var:я=ya!

echo !var! | findstr "{1}" 1>nul && set mess01=!var:{1}=!
echo !var! | findstr "{2}" 1>nul && set mess02=!var:{2}=!
)
echo !mess01!
echo !mess02!
pause >nul
Автор: AZJIO
Дата сообщения: 16.11.2008 23:29
Elroir
неожидал, что будет ответ, завтра с утра ещё поразмышляю, хотя сейчас проверил оба варианта, но не работают. Интересные команды, посмотрел справку, вот только не понял, почему нужно (SET Start_Dir=%CD% ) устанавливать переменную, которая по сути и есть переменная и не меняется для текущего батника. Разве %CD% в конце батника поменяет своё значание?

Мне понравился такой батник:

Цитата:
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:\VirtW.cmd set DVD=%%i:
setenv -m CDROM %DVD%

добавление переменной для CD-диска, определяющий букву по наличию файла VirtW.cmd на диске. Но, что мне не понравилось, что на компе с картридером он вызвал сообщения недословно: "отсутствует диск в приводе", и того 5 сообщений, которые нужно в ручную закрыть. От этих сообщений избавиться можно?
Автор: batniki
Дата сообщения: 17.11.2008 00:00
AZJIO, вот может пригодится такой вариант...

Код:
@echo off
for /f "skip=1" %%r in ('%systemroot%\system32\wbem\wmic cdrom get Drive') do set cdrom=%%r
if defined cdrom (echo Ћ- вгв: %cdrom%) else (echo ‘ЇҐа«Ё...)
pause
Автор: bobojon
Дата сообщения: 17.11.2008 06:53
Здравствуйте.
Помогите, пожалуйста. Есть ли возможность установить пароль на батник?
Автор: AZJIO
Дата сообщения: 17.11.2008 10:54
bobojon
есть вариант - сжать батник в запароленный SFX-архив в котором указать запуск батника после распаковки. Распаковать можно в temp и в конце батника указать строчку на удаление этого батника.

batniki
да, определяет букву, но не ту где нужный диск, а первый попавшийся привод, в моём случае виртуальник определился.
Автор: Elroir
Дата сообщения: 17.11.2008 11:04
AZJIO

Цитата:
сейчас проверил оба варианта, но не работают. Интересные команды, посмотрел справку, вот только не понял, почему нужно (SET Start_Dir=%CD% ) устанавливать переменную, которая по сути и есть переменная и не меняется для текущего батника. Разве %CD% в конце батника поменяет своё значание?

Переменная %CD% меняет свое значение каждый раз, когда меняется текущая директория.
Поэтому в начале батника сохраняется текущая (на тот момент) директория.
Теперь вопрос - та директория в которой лежит батник и та директория из которой он запускается - это одна и та же директория? Если нет - где по отношению к каждой из этих директорий лежит батник !modify.bat?
Автор: AZJIO
Дата сообщения: 17.11.2008 11:42
Вот пост, который я не отправил в прошлый раз:
вот архив, там два батника, один запускается из директории C:\pebuilder_xpe\BartPE\PostProcessing\custom_commands.cmd, он работает из любой директории. Второй C:\pebuilder_xpe\!modify_dll.bat, тоже сам по себе работает из любой директории. Нужно чтоб !modify_dll.bat запустился по окончании выполнения custom_commands.cmd, там почти в конце строка GOTO all_done, вот перед ней можно было бы выполнить !modify_dll.bat. Содержимое !modify_dll.bat вносил в custom_commands.cmd, тоже не сработало.
если конкретно: в батнике custom_commands.cmd указать строчку:
Цитата:
cd..
cd..
!modify_dll.bat
при поднятии на два уровня вверх оказываемся в директории C:\pebuilder_xpe, далее строка на запуск батника. Вот только он не выпонит своего назначения. Сейчас проверил, создал батник с вышеуказанным кодом, он сработал верно, а добавил строки в custom_commands.cmd, он не сработал. Предположение, что изменён текущий каталог.
Если запускаю custom_commands.cmd кликом мыши, то он запускает мой батник, но появляются ошибки других команд. Если custom_commands.cmd отрабатывается программой, то есть запускается конструктор выполняет свои действия, в конце запускает батник, то моя команда cd.., cd.., !modify_dll.bat не срабатывает.
Автор: batniki
Дата сообщения: 17.11.2008 11:43
bobojon, можно сделать проверку пароля непосредственно в запущенном сценарии командной строки. Вписав в начало, что то-подобное:
@echo off
set /P pass="Chtoby prodolzhit vypolnenie scenarija vvedite parol:"
if %pass%==qwerty echo Vhod vypolnen
pause>nul

А сам bat'ник конвертировать в *.exe с помощью QuickBFC.
Автор: Elroir
Дата сообщения: 17.11.2008 11:56
AZJIO
Попробуй так:

Код:
pushd "%~dp0"
cd..
cd..
call !modify_dll.bat
Автор: AZJIO
Дата сообщения: 17.11.2008 13:12
Elroir
Проверил открыв каталоги:
Цитата:
C:\pebuilder_xpe\BartPE
%Temp%
Мой компьютер
Дело в том, что в начале отработки (или перед) батника custom_commands.cmd, лог которого ведётся в окне конструктора в реальном времени, сама папка "postprocessing" исчезает из каталога BartPE, и не появляется ни в %Temp%, ни в виде какого нибудь виртуального диска. Вспомнил, что каталог temp у меня появлялся внутри папки конструктора (C:\pebuilder_xpe\temp), и я считал что это неправильные действия батника в ходе экспериментов. Сейчас проверил с учётом того, что нужно поднятся на один уровень вверх (cd..). Всё заработало, спасибо за уверенность что код верен, а то я считал, что проблема батника.
Автор: vitaliy91
Дата сообщения: 17.11.2008 15:56
Помогите пожалуйста. Как с помощью батника можно определить что комп начал перезагружаться или выключаться ?
Автор: snu
Дата сообщения: 18.11.2008 06:25
заранее сорри если туплю. поискла не нашел, решил спросить.
есть текстовый файл, в нем в два столбца идут ip адреса и время, нужно добавить тертью колонку в которой каждоу ip будет сопоставленно доменое имя.
возможно сделать это через батник?

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

Предыдущая тема: как сохранить сетевые настройки


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