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

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

Автор: grablin
Дата сообщения: 12.01.2016 14:17
[HKEY_CLASSES_ROOT\.dpj]
@="DeskProto.Project.6.1"

[HKEY_CLASSES_ROOT\.dpj\DefaultIcon]
@="\"C:\\Program Files\\DeskProto 6.1\\DeskProto.exe\""

[HKEY_CLASSES_ROOT\.dpj\OpenWithProgids]
"DeskProto.Project.6"="none"
"DeskProto.Project.6.1"="none"


Добавлено:
так и так не работает

Нет иконки на файлах.

Точно, уехали от темы)


Вопрос по теме.
Как запускать батник от имени администратора по умолчанию?

Хочу реализовать идею "ехе(шником) запускать рабочий батник"

Ехешник запускает рабочий батник не от имени администратора и он не выполняет команды.
Заметил что выполняются только от админа.
И это несмотря на то чо я в сстеме под учетной записью администратора
Автор: bredonosec
Дата сообщения: 12.01.2016 15:58
YuS_2

Цитата:
DO echo %%G>>%FLOG%

вроде отработало, но потом - в конце файла, где только

Код: :NO_CONN
echo %1 >>%FLOG%
Автор: YuS_2
Дата сообщения: 12.01.2016 19:25
bredonosec

Цитата:
:NO_CONN
echo %1 >>%FLOG%
присутствует, получаю

По отрывочным кускам трудно судить о чем-либо... но всегда есть возможность проверить содержимое переменной, дав команду "echo %переменная%", типа:

Код: :NO_CONN
echo param1=%1
pause
echo %1>>%FLOG%
Автор: bredonosec
Дата сообщения: 13.01.2016 00:22
YuS_2

Цитата:
в %FLOG%, в примере выше, должно быть видно, что туда выводится...

флог - только логфайл, куда выводится или имя компа, с которым скрипту не вышло соединиться, или (в тестовых целях добавлял) - содержание искомого выражения (список папок в директории, т.д)

Цитата:
Если в качестве каталога используется только имя, без пути,

дык
Цитата:
Создаю переменные

Код:
set PD=%1\d$
set BCP=\\%PD%\%1

(где %1 - имя очередного компа из списка)
- путь, по которому он даёт листинг папки, правильный. А путь, где хотел удалять - нет.


Цитата:
for /f "skip=1 delims=" %%G in ('dir /B /ad-h /o-d %BCP%') DO rd /s /q %%~fG

а это разве не с файлами? Впрочем, проверю на работе, мож так изящнее выйдет, нежели моё корявое творчество (

Цитата:
всё же лучше проверить, что именно будет удаляться:
само собой )) Я не враг себе )))

спасибо
Автор: YuS_2
Дата сообщения: 13.01.2016 04:52
bredonosec

Цитата:
путь, по которому он даёт листинг папки, правильный. А путь, где хотел удалять - нет.

Тут не совсем понятно откуда берутся данные в %1. По сути - это первый параметр при запуске батника, либо при выполнении команды call.

Цитата:
Я не враг себе

Вообще, у микрософта с пониманием "правильности", есть некоторые проблемы, особенно в работе консоли с расшаренными ресурсами. Вот цитата:
[more=Цитата]
Цитата:
Однажды был написан простой командный сценарий, задача которого была просто удалить все каталоги рядом с собой. В «свою» директорию он переходил как раз через cd %~dp0. Все было проверено на локальной машине – работало замечательно. После этого сценарий был помещен на файл-сервер, где ему и полагалось быть. Я зашел с помощью Far в сетевой каталог, и для контрольной проверки решил запустить файл еще раз. Дальнейшее словно в тумане. cmd.exe правильно определил местонахождение bat-файла: \\servername\sharename\directory. Однако при попытке сделать туда cd, он сказал, что UNC-пути в качестве текущих каталогов не поддерживаются и лучше он сменит текущий каталог на C:\WINDOWS… Это было действительно мудрое решение… Часть сценария, отвечавшая за удаление всех каталогов, сработала отлично – хорошо, что я успел вовремя остановить это безумие.
В тот день я узнал, что такое System Restore…
[/more]
-хоть в ней и описано несколько другое действие, но рекомендую перед удалением делать проверку через errorlevel на существование ресурса по условию, т.е. осуществлять не только визуальный контроль и только после этого удалять...
Автор: Pasha_ZZZ
Дата сообщения: 13.01.2016 08:11
YuS_2
Я стараюсь никогда не использовать относительные пути и CD, проще лишний раз все закавычить и приписать %~dp0 ко всему.
Цитата:
проверку через errorlevel на существование ресурса по условию
Проще уж сравнивать "цель вашего визита" и %CD%
Автор: YuS_2
Дата сообщения: 13.01.2016 09:57
Pasha_ZZZ

Цитата:
стараюсь никогда не использовать относительные пути и CD

А это и есть осторожность при работе с консолью

Цитата:
Проще уж сравнивать "цель вашего визита" и %CD%

Дык, главное, чтобы костюмчик сидел, то бишь, чтобы вдруг неожиданно не изменилась текущая (либо целевая) директория, а уж каким способом - дело третье.
Просто, весь сценарий человек не показывает, а попытки удаления на расшаренных ресурсах наблюдаются, поэтому лучше предупредить заранее...
Автор: bredonosec
Дата сообщения: 13.01.2016 11:48

Цитата:
и приписать %~dp0 ко всему.

а что это означает?
%~dp1 - параметр drive&path only, а с нулем - не знаю.


Цитата:
%CD%

опять не понял, зачем переменную называть как команду? (сорри, в батниках я системного образования не получал, и давно вообще с ними не работал)

YuS_2

Цитата:
Тут не совсем понятно откуда берутся данные в %1.

это первый цикл фор, в котором батник читает список компов и для каждого выполняет дальнейшие операции


Цитата:
но рекомендую перед удалением делать проверку через errorlevel на существование ресурса по условию

погоди, но если он папки выбирает по команде дир ("дир" создаёт список и из этого списка удаляет каждый токен по очереди), то, по идее, не может не существовать ресурса - это же в пределах одной команды
Или я неправ?

Добавлено:

Цитата:
Просто, весь сценарий человек не показывает

там просто структура имен организации светится, а требования секретности и всё такое - как во всех конторах, так что, проще не изобретать велосипед с обозначениями безобидными, но понятными... (
Автор: YuS_2
Дата сообщения: 13.01.2016 12:15
bredonosec

Цитата:
а с нулем - не знаю.

Путь к папке откуда запускается батник.

Цитата:
опять не понял, зачем переменную называть как команду?

%CD% - текущая папка. Эта переменная существует без её установки, т.е. системная.

Цитата:
по идее, не может не существовать ресурса - это же в пределах одной команды

Команда dir - это одно, команда for - это другое, а rmdir - третье и чтобы не получилось накладки с произвольной сменой каталога, лучше всё проконтролировать, причем не только на локальных ресурсах.
При отсутствии ресурса или наличии какого-либо запрета на его использование (доступность на запись, ограничение прав и т.п.), может произойти не совсем ожидаемое действие, вроде того, которое произошло в вышеприведенной цитате.
Автор: Alex_Piggy
Дата сообщения: 13.01.2016 12:32
Доброе время.

Цитата:
проверку через errorlevel на существование ресурса по условию
...
Проще уж сравнивать "цель вашего визита" и %CD%

Может быть все-таки через pushd/popd? Что-то вроде

Код:
pushd "%BCP%" && (
for /f "skip=1 delims=" %%G in ('dir /B /ad-h /o-d') DO rd /s /q "%%~G"
popd
)
Автор: YuS_2
Дата сообщения: 13.01.2016 12:54
Alex_Piggy

Цитата:
Может быть все-таки через pushd/popd?

Да, это даже лучше, только необходимо включить расширенную обработку команд...
Автор: bredonosec
Дата сообщения: 13.01.2016 17:19
YuS_2
спасибо.
Только опять не пойму почему, эхо исправно пишет только имя самой папки (без пути, хоть
Цитата:
echo %%~fG
и стоит), rd- ищет эту папку рядом с батником..
путь видит только если скормить его через указанную переменную. %BCP%\%%G
Автор: Jon_Dow
Дата сообщения: 13.01.2016 21:34
bredonosec
а ты команду "dir /B /ad-h /o-d'" ручками одиночно выполнить не пробовал?
Попробуй - и вопросы насчет имени пропадут - что заказывал - то и получил в вывод и никакой модификатор не добавит несуществующее в plain text...

Добавлено:
PS - подробности естественно в "DIR /?"
Автор: YuS_2
Дата сообщения: 14.01.2016 03:17
bredonosec

Цитата:
Только опять не пойму почему, эхо исправно пишет только имя самой папки


Цитата:
rd- ищет эту папку рядом с батником

Вот! Я ведь, собственно, на это и обращал внимание несколько раз, что надо посмотреть, что именно выводится в лог.
Один из выходов уже предложили чуть выше (pushd). Ну и ещё такой вариант:

Код: dir /s/b/ad-h/o-d %BCP%
Автор: Jon_Dow
Дата сообщения: 14.01.2016 08:17
YuS_2
Цитата:
dir /s/b/ad-h/o-d
что самое немаловажное так это то что в этом случае будут выводиться полное имя папки вместе с путем.
Автор: YuS_2
Дата сообщения: 14.01.2016 09:17
Jon_Dow

Цитата:
выводиться полное имя папки вместе с путем.

Да, именно это ведь и требовалось... а то, что будут выводиться подпапки, большой проблемы не составит. Либо удалять их все подряд, либо можно отфильтровать только необходимые и уже их удалять, но, имхо, проще pushd использовать...
Автор: Unitaz
Дата сообщения: 19.01.2016 15:14
Есть не очень стандартная задача при работе программ с SSD иногда возникают повреждения файловой системы (NTFS) в одном случае перестают читаться файлы из директории d:/prog в другом случае просто убивается партишен d:\ , конечно это происходит не часто но очень далеко от моего рабочего места , требуется сделать автоматическое востановление работоспособности системы .
1. Надо про-детектировать что произошла авария тоесть не читается директория d:/prog или испортилась партиция .
2. Отформатировать партицию D: и скопировать с защищённого диска C:\ директорию prog и запустить рабочую программу D:\prog\prog.exe

как это реализовать с помощью батника ?
Автор: arkor
Дата сообщения: 19.01.2016 15:31
Unitaz


Вторая часть вопроса делается так
echo y|format d: /q
copy c:\prog d:\ /Y
d:\prog\prog.exe
Автор: hErAx
Дата сообщения: 19.01.2016 15:32
Проще пропустить пункт 1. и сразу перейти к 2.
Автор: Unitaz
Дата сообщения: 19.01.2016 21:46

Цитата:
Проще пропустить пункт 1. и сразу перейти  к 2.

Да это тривиальное решение задачи но оно сильно увеличивает время загрузки системы
Вторая часть в общем то понятна и я о ней написал только для полноты картины , а вот как решить первую да ещё не нарваться на зависон ?
P.S. Проблемы с SSD стали появятся после перехода с SLC на MLC и возникают после неожиданного пропадения питания , думал что поможет отключение журналирования NTFS , но похоже дело не в этом , а в ошибках контроллера SSD в стрессовых условиях .
Автор: hErAx
Дата сообщения: 19.01.2016 21:57
система Win 8.1 сборка.
Принтер Kyocera FS-1040 GX подключён к Wi-Fi роутеру.
При загрузке системы, всегда показывает статус "Отключён" в Устройствах и принтерах.
На других компьютерах принтер всегда готов к работе без шаманства.

Делаю так:
Удалить устройство;
Добавить принтер - жму "нужный принтер отсутствует в списке";
Добавить локальный или сетевой принтер с параметрами, заданными вручную - жму "Далее";
Использовать существующий порт - выбыраю созданный ранее порт, жму "Далее";
Выбран принтер Kyocera FS-1040 GX в списке драйверов - жму "Далее";
Использовать уже установленный драйвер (рекомендуется) - "Далее","Далее","Далее","Готово";
В списке устройств появляется мой принтер. И так до следующей перезагрузки.
Как удаление и установку осуществить автоматически?
Подскажите,какой командой производится удаление и установка принтеров?

Автор: Alex_Piggy
Дата сообщения: 20.01.2016 07:51
Доброе время
hErAx
rundll32 printui.dll,PrintUIEntry /?

Unitaz
chkdsk /?
Скорее всего
chkdsk d: /i /c || ( формат и тд )
Автор: YuS_2
Дата сообщения: 20.01.2016 09:44
SSchumi

Цитата:
Из командной строки запускаю
for /f %i in ('dir C:\TEMP\_klsbcmdtmp* /b /a:d') do echo %i
Работает, а из батника нет.

for /?

Цитата:
В пакетных файлах для команды FOR используется запись
%%переменная вместо %переменная.
Автор: Unitaz
Дата сообщения: 21.01.2016 11:20

Цитата:
chkdsk d: /i /c || (  формат и тд )
а подробней ?
Я вроде придумал , я буду проводить процедуру chkdsk и format только если пропадало питание , если не прошёл chkdsk запущу format , а как это поустойчивей проделать чтобы не зависнуть ?

Автор: YuS_2
Дата сообщения: 21.01.2016 11:21
Drivishe

Цитата:
@echo on
c:\jperf-2.0.2\bin\iperf.exe -c 172.16.199.193 > c:\jperf-2.0.2\log.txt
find /i log.txt "Mbits/sec"
for /f "tokens=6" %%i in (log.txt) do set i1=%%i


Код: c:\jperf-2.0.2\bin\iperf.exe -c 172.16.199.193 > c:\jperf-2.0.2\log.txt
for /f "tokens=6" %%i in ('type "c:\jperf-2.0.2\log.txt"^|find /i "Mbits/sec"') do set i1=%%i
Автор: Drivishe
Дата сообщения: 21.01.2016 13:59
YuS_2

все хорошо

теперь он вот так выводит
http://prntscr.com/9swbpr

Можно просто одну цыфру
Автор: Vanfear
Дата сообщения: 21.01.2016 15:24
это вопрос? Ы

do set i1=%%i & echo %%i

или если переменную не надо
do echo %%i
Автор: Drivishe
Дата сообщения: 21.01.2016 15:58
Vanfear
Вопрос

Можно просто одну цыфру ?
Пробовал как ты пишеш Vanfear обеими методами тоже не получается все равно пишит. http://prntscr.com/9sxvkk
Автор: lefrenchle
Дата сообщения: 21.01.2016 16:40
[more] Помогите. Скачал скрипт с echange Nagios ping_remote.bat
Но работать не хочет. Выдаёт локально в cmd "Непредвиденное появление =."
после того как делаю запрос к батнику с переменными, как было описано от разработчика этого скрипта
cmd: ping_remote.bat 192.169.0.1 7 100,1 200,5

сам скрипт

выручите пожалуйста.


[more=Сам скрипт]
@echo OFF
SETLOCAL
REM ####### ensure all required info is present --UNIX Var--######
@Echo %1%2%3%4%5%6|find "ARG"
IF NOT ERRORLEVEL 1 GOTO mseof

REM ####### ensure all required info is present --Win Var--######
IF "%1"=="" goto mseof
IF "%2"=="" goto mseof
IF "%3"=="" goto mseof
IF "%4"=="" goto mseof
IF "%5"=="" goto mseof
IF "%6"=="" goto mseof

@echo %4 |find "%%%"
IF not ERRORLEVEL 1 GOTO mseof
@echo %6 |find "%%%"
IF not ERRORLEVEL 1 GOTO mseof



REM ####### assign each to a variable to reference it later..######
SET ip=%1
SET pkt=%2
SET wrta=%3
SET wpl=%4
SET crta=%5
SET cpl=%6

REM ######## capture fresh data to a File #######
@echo ->%1

ping %ip% -n %pkt% >>%1

REM ######## pickout the data we need from the File #######
FOR /F "tokens=11 delims= " %%k in ('findstr /c:"Lost" %1') do set LST=%%k

IF ERRORLEVEL 1 GOTO timeout
FOR /F "tokens=9 delims= " %%k in ('findstr /c:"Average" %1') do set AVG=%%k

REM ######## trim the variables...####
set AVG=%AVG:m=%
set AVG=%AVG:s=%

:timeout
set LST=%LST=%
set LST=%LST:~0,-1%


REM ######## Now the fun stuff, compare the Warning, Critical values..####

if %LST% GEQ %cpl% goto CPL-2
if %AVG% GEQ %crta% goto Crta-2
if %LST% GEQ %wpl% goto WPL-1
if %AVG% GEQ %wrta% goto Wrta-1

Goto OK-0

:CPL-2
@echo CRITICAL: PKT-LS=%LST%%%^|rta=%crta%;%wrta% pl=%LST%%%
rem GOTO EOF
@exit 2

:Crta-2
@echo CRITICAL: PKT-LS=%LST%%%, RT-AV=%AVG%ms^|rta=%AVG%ms;%wrta%;%crta% pl=%LST%%%
rem GOTO EOF
@exit 2

:WPL-1
@echo WARNING: PKT-LS=%LST%%%, RT-AV=%AVG%ms^|rta=%wrta%;%crta% pl=%LST%%%
rem GOTO EOF
@exit 1

:Wrta-1
@echo WARNING: PKT-LS=%LST%%%, RT-AV=%AVG%ms^|rta=%AVG%ms;%wrta%;%crta% pl=%LST%%%
rem GOTO EOF
@exit 1



K-0
@ECHO OK: - PKT-LS=%LST%%%, RT-AV=%AVG%ms^|rta=%AVG%ms;%wrta%;%crta% pl=%LST%%%
rem GOTO EOF
@Exit 0




:mseof
@echo Usage:ping_remote ^<host_address^> ^<Packets^>^<wrta^>,^<wpl^> ^<crta^>,^<cpl^>
@echo example: /usr/local/nagios/libexec/check_nrpe -H 172.19.48.139 -c ping_remote -t 90 -a 172.19.88.30 65 450,1 700,5 (From Nagios SVR.)
@echo : ping_remote 192.168.0.1 5 200,1 400,10 (From a local win wks where ping_remote.bat resides)
@echo : (wpl\cpl are in percent, without the "%%%" symbol!!)

rem GOTO EOF
@exit 0



:eof
[/more] [/more]
Автор: YuS_2
Дата сообщения: 21.01.2016 17:13
Drivishe

Цитата:
Можно просто одну цыфру

Можно. В самом начале пакетного файла надо написать команду

Код: @echo off

Страницы: 123456789101112131415161718

Предыдущая тема: Не устанавливаются обои на рабочий стол (Windows 2003 x64)


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