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

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

Автор: nik4z
Дата сообщения: 27.12.2015 13:55
Inoz2000

Цитата:
Почему же, команда dir для каталога выдаст файл не найден?


dir /b /a:-d будет искать только указанный файл, каталоги проигнорирует.


Цитата:
про то, что ~dpnx можно заменить на ~f, я уже молчу

Imxo, для меня ~dpnx просто повышает читаемость батника.


Цитата:
но и мой CD не хуже.

Он рабочий, но портит %cd%, после теста нужно будет восстанавливать.



Автор: Sphinx114
Дата сообщения: 27.12.2015 14:39
VitaminP, и ещё вариант:

Код: if exist "%~1\" (echo folder) else echo file
Автор: VitaminP
Дата сообщения: 27.12.2015 17:30
Всем спасибо за ответы, больше понравился последний вариант, так как наиболее короткий
Автор: sundraw
Дата сообщения: 03.01.2016 12:09
Всех поздравляю с Новым Годом!
Автор: ssi
Дата сообщения: 04.01.2016 00:13
доброго времени суток уважаемые!
прошу помощи в таком вопросе. Кратко: нужен батник, берущий из реестра путь и помещающий его в переменную:

Начало такое
set "reg_path=hkcu\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders"
set "reg_param=Favorites"

и вот тут должна следовать конструкция которая в переменную "reg_value" помещает содержимое ключа Favorites, то есть путь к Избранному
Автор: Inoz2000
Дата сообщения: 04.01.2016 01:18
Продолжение такое
for /f "tokens=3" %%v in ('reg query "%reg_path%" /v "%reg_param%" ^| findstr REG_') do SET "reg_value=%%v"
Автор: Jon_Dow
Дата сообщения: 04.01.2016 11:36
Inoz2000
при таком продолжении результат будет в данной ситуации "%USERPROFILE%\Favorites"
А вот чтобы получить абсолютное значение придется чуток [more=постараться:]
Код: @ECHO OFF
set "reg_path=hkcu\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders"
set "reg_param=Favorites"

CLS
:: 1-й параметр = раздел реестра для чтения
:: 2-й параметр = имя считываемого параметра - указать пустые кавычки для чтения параметра "По умолчанию"
:: 3-й параметр = имя переменной окружения куда считываем результат

:: Пример чтения именованного параметра:
CALL :REG_READ "%reg_path%" "%reg_param%" "reg_value"
ECHO Именованный параметр значение "%reg_value%"
ECHO Именованный параметр тип "%reg_value_TYPE%"

GOTO :EOF

:REG_READ
IF NOT "%~2"=="" (
FOR /F "USEBACKQ TOKENS=* DELIMS=" %%a IN (`REG QUERY "%~1" /v "%~2" 2^>NUL ^|FINDSTR /I /B /C:" %~2" 2^>NUL`) DO CALL :TRANSLATE "%%a" "%~2" "%~3"
1>NUL 2>&1 REG QUERY "%~1" /v "%~2"||(SET "%~3_TYPE="&SET "%~3=!")
)
IF "%~2"=="" (
FOR /F "USEBACKQ TOKENS=* DELIMS=" %%a IN (`REG QUERY "%~1" /ve 2^>NUL ^|FINDSTR /B /C:" " 2^>NUL`) DO CALL :TRANSLATE "%%a" "" "%~3"
1>NUL 2>&1 REG QUERY "%~1" /ve||(SET "%~3_TYPE="&SET "%~3=!")
)
CALL SET "%~3=%%%~3:~0,-1%%"
GOTO :EOF

:TRANSLATE
SET "TEMP_STR=%~1"
IF NOT "%~2"=="" CALL SET "TEMP_STR=%%TEMP_STR:*%~2=%%"
CALL SET "TEMP_STR=%%TEMP_STR:*REG_=%%"
FOR /F "USEBACKQ TOKENS=1*" %%a IN ('"%TEMP_STR%"') DO (
SET "%~3_TYPE=REG_%%~a"
SET "%~3=%%~b"
)
GOTO :EOF
Автор: hErAx
Дата сообщения: 04.01.2016 11:41
del (исправлено в 12:52)
Автор: ssi
Дата сообщения: 04.01.2016 22:04
Jon_Dow

Цитата:
при таком продолжении результат будет в данной ситуации "%USERPROFILE%\Favorites"
А вот чтобы получить абсолютное значение придется чуток постараться:

да нет, работает все
Автор: Jon_Dow
Дата сообщения: 04.01.2016 23:40
ssi
я не говорил что не работает - естественно что работает(в этой конкретной ситуации) просто переменные окружения не раскрываются в реальное значение.
Также (не в этой ситуации) возможны проблемы при считывании сложносоставных имен, чтения значения по-умолчанию(без имени), конструкция может по разному отрабатывать на разных версиях винды ну и так далее...
Автор: ssi
Дата сообщения: 05.01.2016 23:38
Inoz2000
Jon_Dow
спасибо большое
Автор: Vanfear
Дата сообщения: 07.01.2016 05:35
открыть окно проводника, указав путь. можно через батник?
Автор: Pasha_ZZZ
Дата сообщения: 07.01.2016 07:43
Vanfear
Цитата:
explorer <путь>
Автор: Vanfear
Дата сообщения: 08.01.2016 22:58
а во как, ну я ещё способ через start нашёл.
Автор: grablin
Дата сообщения: 11.01.2016 06:32
Здравствуйте!
Написал бат файл.
Логическая цепочка такова.
1.
Изменения в системном реестре.
2.
Запуск программы
3.
Закрытие программы и снова небольшая корректировка в системном реестре.

Батник работает правильно, но если его конвертировать в .exe то не выполняются команды связанные с внесением изменений в реестре до и после запуска программы указанной в батнике.
Что здесь не так? Что надо попрвить чтобы заставить ехе работать правильно?

Вот содержимое батника


Код: start "" Reg.exe add "HKLM\SOFTWARE\Classes\CLSID\{ECAB6A3D-5624-BF8B-F83D-6F4D7DADDD0D}" /v "CodeInfo" /t REG_SZ /d "{4C8BDC34-A832-A8F3-1249-B0003CF92577}" /f
start /wait "" "C:\Program Files\DeskProto 6.0\Dp.exe" %1
start /wait Reg.exe add "HKLM\SOFTWARE\Classes\CLSID\{ECAB6A3D-5624-BF8B-F83D-6F4D7DADDD0D}" /v "CodeInfo" /t REG_SZ /d "{4C8BDC34-A832-A8F3-1249-B0003CF92577}" /f
Автор: 5peciali5t
Дата сообщения: 11.01.2016 09:07
grablin

Код:
reg add "HKLM\SOFTWARE\Classes\CLSID\{ECAB6A3D-5624-BF8B-F83D-6F4D7DADDD0D}" /v "CodeInfo" /t REG_SZ /d "{4C8BDC34-A832-A8F3-1249-B0003CF92577}" /f
start "" "C:\Program Files\DeskProto 6.0\Dp.exe" %1
:: ping -n 5 -w 300 127.255.255.255>nul
:: taskkill /f /im Dp.exe
reg add "HKLM\SOFTWARE\Classes\CLSID\{ECAB6A3D-5624-BF8B-F83D-6F4D7DADDD0D}" /v "CodeInfo" /t REG_SZ /d "{4C8BDC34-A832-A8F3-1249-B0003CF92577}" /f
Автор: grablin
Дата сообщения: 11.01.2016 09:37
Здравствуйте,5peciali5t.

Программа DeskProto 6.0 всегда будет закрываться вручную.

Ваш батник не выполняет пункт №3
Не добавляет в реестр данные



Добавлено:
А если его сконвертировать в exe то все прекрасно работает!
Но почему так?
Спасибо вам огромное!!!

Добавлено:
Нет. ошибся. И в ехе пункт №3 не работает((
Если убрать :: то программа запускается и самостоятельно выключается.
Автор: 5peciali5t
Дата сообщения: 11.01.2016 11:07
grablin
а пп1 (идентичный пп3) выполняется?
какая разрядность системы?
не меняются ли значения в x64 ключе HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Classes\...
сконвертированный в exe батник выполняется с правами администратора?

ps если Вам нужно чтобы этот ключ всегда оставался с одним и тем же значением, возможно можно изменить права на изменение программами данной ветки реестра
Автор: grablin
Дата сообщения: 12.01.2016 09:45
5peciali5t
Пункты 1 и 3 единтичны.
Запускал от имини администратора.
На W8.1/32 exe в отснове которого лежат ваши команды - работает, но не выполняет пунк 3.
На W8.1/64 exe вообще не выполняет команды.

По разному игрался с ping -n 5 -w 300 127.255.255.255
В итоге зафлудил сеть. Было 1300 процессов смд!! Я никогда такого не видел.
После этог упал интернет. Я думал что оборудование (точка ваймакс на крыше) сгорело. Вызвал сегодня мастера он перенастроил его. Оказалось просто упали настройки .

Сейчас я понял что Пунк 3 совсем не обязательно выполнять после завершеня процесса Dp.exe , оказалось так что программа вносит изменения в реестр сразу же после ее старта.
Можно ли сделать так чтобы пунк 3 выполнялся через 3 секунды после старта Dp.exe?

если в разрешениях запретить изменение в данном ключе реестра то Dp.exe не стартует вообще.
Автор: 5peciali5t
Дата сообщения: 12.01.2016 10:00

Цитата:
Можно ли сделать так чтобы пунк 3 выполнялся через 3 секунды?

ping -w 3000

Код: start "" "C:\Program Files\DeskProto 6.0\Dp.exe" %1
ping -w 3000 127.255.255.255>nul
reg add "HKLM\SOFTWARE\Classes\CLSID\{ECAB6A3D-5624-BF8B-F83D-6F4D7DADDD0D}" /v "CodeInfo" /t REG_SZ /d "{4C8BDC34-A832-A8F3-1249-B0003CF92577}" /f
Автор: grablin
Дата сообщения: 12.01.2016 10:40
Это 32 битная программа. Но она устанавливается в C:\Program Files\DeskProto 6.0\Dp.exe ( и в 32 и в 64 средах)

на 64 битной системе Батник выполняет команды а он же, но сконвертированнный в .exe Нет





Добавлено:
Конвертирую посредством Advanced BAT to EXE Converter PRO v2.83

Добавлено:
На 64 битной системе Ваш батник работает норм. Конвертированный батник в Ехе стартует прогу но не вносит изменения в реестр. Окно СМД висит и самостоятельно не закрывается.


Он же.
На 32 битной W8.1 батник работает норм. Конвертированный батник в Ехе стартует прогу но так же не вносит изменения в реестр. Окно СМД закрывается самостоятельно.

Добавлено:
а если добавить строчку в начале, то сконвртированный в EXE батник не работает. Окно программы висит и ничего не происходит.


reg add "HKLM\SOFTWARE\Classes\CLSID\{ECAB6A3D-5624-BF8B-F83D-6F4D7DADDD0D}" /v "CodeInfo" /t REG_SZ /d "{4C8BDC34-A832-A8F3-1249-B0003CF92577}" /f
start "" "C:\Program Files\DeskProto 6.0\Dp.exe" %1
ping -w 3000 127.255.255.255>nul
reg add "HKLM\SOFTWARE\Classes\CLSID\{ECAB6A3D-5624-BF8B-F83D-6F4D7DADDD0D}" /v "CodeInfo" /t REG_SZ /d "{4C8BDC34-A832-A8F3-1249-B0003CF92577}" /f
Автор: Jon_Dow
Дата сообщения: 12.01.2016 11:00
grablin
Цитата:
Конвертирую посредством Advanced BAT to EXE Converter PRO v2.83
вот с этого и надо было начинать.
Ну первое почему версия не 2.94? (Или альтернативный вопрос почему Windows не XP?)
Ну и логичный второй вопрос - цель конвертации в EXE? (Монолитность, скрытый запуск, наличие иконки и так далее - большинство таких целей достигается без использования конвертации в EXE, которая на современных сыстемах может работать не совсем так как на старых).


Добавлено:
(или не работать вообще - если это касается версий вышедших задолго до релиза ОС)
Автор: bredonosec
Дата сообщения: 12.01.2016 11:20
не понимаю, где накосячил:
Задача - подключиться в папку с именем компа на В диске, удалить все вложенные папки кроме последней созданной.
Создаю переменные

Код: set PD=%1\d$
set BCP=\\%PD%\%1
Автор: grablin
Дата сообщения: 12.01.2016 11:23

Цитата:
Ну и логичный второй вопрос - цель конвертации в EXE? (Монолитность, скрытый запуск, наличие иконки и так далее -


Именно так. Скрытый запуск. Иконка для ассоциации рабочих файлов с новым .exe.
Если не произвести ассоциацию то рабочий файл будет запускаться стандартно (без внесения изменений в реестр) То есть не будет работать.

А если произвести ассоциацию с батником то не будет иконки на значках рабочих файлов.

Попробую найти на просторах интернета v 2.94
Если она не сработет, то есть ли достойная альтернатива для работы полученного exe в 64 битной среде?

Добавлено:
Jon_Dow

установил 2.94
Запуск с правами админстратора.
в CMD написано "ошибка отказано в доступе". Это про рееестр.

Добавлено:
Если запустить полученый ехе в режиме совместимности с ХР то в CMD написано "Операция успешно завершена" Но по факту изменения в реест не вносятся

Добавлено:
написал батник только с командой изменнеия в реест.
Батник работает а после конвертации в exe нет.

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

Написал новый батник где прописал пути к файлу

start "" "C:\Users\Alex\Desktop\exe2bat\NewDP.bat"

Но не сработало. В СМD написано что не найден путь.

Есть ли еше идеи?
Автор: Jon_Dow
Дата сообщения: 12.01.2016 12:41
grablin
запуск с правами Администратора и "Запуск от имени Администратора" это как бы две большие разницы... Это если UAC неотключен.
Точно так же как режим совместимости и само ОС это тоже две большие разницы.
А по сути: ассоциацию делай с батником, а иконку подправишь руками через реестр(в HKCR на нужных расширениях) один раз на нужную.
Автор: grablin
Дата сообщения: 12.01.2016 13:01
Jon_Dow

Сделал ассоциацию с батником.
В реестре такая запись на открытие рабочих файлов

Windows Registry Editor Version 5.00

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

Подскажите пожалуйста как указать иконку соответствубющей програме DeskProto?

Добавлено:
Если создать ярлык батника и назначить ему нужную иконку и ассоциировать то что надо с ярлыком. Тогда у рабочих файлов появится иконка.

Но это в том случае если рабочюю программу запускаю без атрибутов.

С моем же случае запуску программмы присвоен атрибут %1
При таком расскладе иконка на значках файлов не отображается.

%1 это для того чтобы открывался файл со всем содежимым. если убрать %1 то будет открываться пустой документ

start "" "C:\Program Files\DeskProto 6.0\Dp.exe" %1
Автор: YuS_2
Дата сообщения: 12.01.2016 13:47
bredonosec

Цитата:


Код: for /f "skip=1 delims=" %G in ('dir /B /ad-h /o-d %BCP%') DO echo>>%FLOG%

- получаю вывод:  

Код: BCPFLOG was unexpected at this time.
Автор: Jon_Dow
Дата сообщения: 12.01.2016 13:58
grablin
создай подраздел DefaultIcon и в нем в параметре по-умолчанию задай иконку.
Автор: grablin
Дата сообщения: 12.01.2016 14:06
Jon_Dow

[HKEY_CLASSES_ROOT\.dpj]
@="DeskProto.Project.6.1"

[HKEY_CLASSES_ROOT\.dpj\OpenWithProgids]
"DeskProto.Project.6"="none"
"DeskProto.Project.6.1"="none"
"DefaultIcon"="C:\\Users\\Alex\\Desktop\\Dp.ico"


Перезагрузил проводник но иконки не отображаются
Автор: Jon_Dow
Дата сообщения: 12.01.2016 14:10
grablin
я же писал подраздел DefaultIcon а не параметр, а уже в подразделе параметр по-умолчанию
[HKEY_CLASSES_ROOT\.dpj\OpenWithProgids\DefaultIcon]
@="C:\\Users\\Alex\\Desktop\\Dp.ico"

Добавлено:
PS - создается странное впечатление что ты ошибся темой

Страницы: 123456789101112131415161718

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


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