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

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

Автор: Alexey87
Дата сообщения: 05.06.2011 16:36
Подскажите пожалуйста, можно ли написать сценарий который бы при открытии pdf-файлов определял открывать эти файлы программой по умолчанию в Windows или, если умолчание не заданно, программой, находящейся на компакт-диске (например, портативный FoxitPDFreader_4.1.1.exe).
Автор: yurkesha
Дата сообщения: 05.06.2011 16:45
Alexey87
Проверяй (через reg query) наличие HKCR\.pdf - если есть значит в систме зарегистрирована прога для его открытия...
Автор: AlexanderNON
Дата сообщения: 05.06.2011 17:00
res2001

Цитата:
Проще всего определить день недели с помощью VBS/JS скрипта или задать дату пятницы в параметре.
Тебе как?


Нужно сделать это средствами cmd. Просто примерно год назад я видел здесь такой код, сейчас его найти никак не могу.

wolf0425

Цитата:
а это нужно однократно что-то рассортировать или настроить для каждой пятницы?
просто если для каждой - то настраиваешь шедулер на запуск батника вечером пятницы, в батнике удаляешь всё с датой "не сегодня"...

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

Если подробнее, то из этих 400 файлов примерно 80 были созданы в пятницу (файлы создавались с июня 2009 года до декабря 2010). И нужно оставить именно эти примерно 80 файлов.
Автор: Alexey87
Дата сообщения: 05.06.2011 17:05
yurkesha, а как будет выглядеть код батника, который будет проверять ассоциацию с pdf-файлом и запускать этот файл по ассоциации или если же ассоциации нет, то открывать FoxitPDFreader_4.1.1.exe, который находится на компакт-диске.
Автор: 01MDM
Дата сообщения: 05.06.2011 17:28
Alexey87
Ассоциацию можно проверить с помощью команд assoc и ftype:

Код:
@echo off
setlocal

set "file=%1"
2>nul 1>&2 assoc .pdf || goto:foxit

for /f "tokens=2 delims==" %%i in (' assoc .pdf ') do (

for /f "tokens=2 delims==" %%j in (' ftype %%i ') do call:echo %%j

)
goto:eof

:foxit
start "" "e:\pdf\foxitreader.exe" %file%

goto:eof

:echo
start "" %1 %file%
Автор: Alexey87
Дата сообщения: 05.06.2011 17:40
01MDM, а если ассоциация в Windows не задана как, используя ваш код, открывать pdf-файлы в портативном FoxitPDFreader_4.1.1.exe, который находится на компакт-диске.
Автор: 01MDM
Дата сообщения: 05.06.2011 17:46
Alexey87
Поправил. Пути сам отредактируешь, батник запускать с файлом pdf в качестве параметра.
Автор: Free_Soft
Дата сообщения: 05.06.2011 17:59
запрос
Код: wmic path OfficeSoftwareProtectionProduct where (PartialProductKey!=null) get Name /value
Автор: Alexey87
Дата сообщения: 05.06.2011 18:06
01MDM, а можно ли как-нибудь запускать FoxitPDFreader_4.1.1.exe через переменное окружение, т.е. без указания буквы компакт-диска

Цитата:
start "" e:\pdf\foxitreader.exe" %file%


Автор: 01MDM
Дата сообщения: 05.06.2011 18:16
Alexey87
А сам батник где находится? Если на самом компакт-диске, то это проще:

Код:
start "" "%~d0pdf\FoxitPDFreader_4.1.1.exe"
Автор: wolf0425
Дата сообщения: 05.06.2011 19:06

Цитата:
Где %~d0 -- корень диска с батником ( например E:\ )

%~d0 - это не корень диска, а буква диска, например E:
\ после него лучше не терять, т.е.
start "" "%~d0\pdf\FoxitPDFreader_4.1.1.exe"
в таком виде батник может работать из любого каталога того сd.
Автор: res2001
Дата сообщения: 05.06.2011 19:09
AlexanderNON

Цитата:
Нужно сделать это средствами cmd. Просто примерно год назад я видел здесь такой код, сейчас его найти никак не могу.
В папке лежат архивы, которые делались чуть больше года каждый день кроме выходных. нужно оставить только созданные в пятницу

Как-то так получается:

Код: @set @x=0 /*
@echo off
set "workdir=G:\Bat\1\"

for /f "tokens=*" %%a in ('dir /a:-d /b /s %workdir%*') do (
    for /f "tokens=*" %%b in ('cscript.exe //nologo /e:javascript "%~0" %%~ta') do (
        if %%b neq 5 echo del /f /q %%a
))

goto:eof */

var args = WScript.Arguments;
var dd = new Date(args(0).substr(6,4),parseInt(args(0).substr(3,2))-1,args(0).substr(0,2));
WScript.echo(dd.getDay());
WScript.quit();
Автор: 01MDM
Дата сообщения: 05.06.2011 19:42
wolf0425

Цитата:
%~d0 - это не корень диска, а буква диска, например E:

Да, но работает и без слеша.

Автор: wolf0425
Дата сообщения: 05.06.2011 22:24

Цитата:
Да, но работает и без слеша.
без слеша работает только если текущий каталог на диске - корневой.
А со слешом - независимо от текущего каталога.
Автор: 01MDM
Дата сообщения: 06.06.2011 05:34
wolf0425

Цитата:
без слеша работает только если текущий каталог на диске - корневой.

Батник в %userprofile%\desktop:

Код:
@echo off
cd /d "d:\music"
start "" "%~d0Program Files\7-zip\7zfm.exe"
Автор: wolf0425
Дата сообщения: 06.06.2011 07:31

Цитата:
Все работает.
start "" убери и проверяй ещё раз.
или сравни
dir /b "%~d0Program Files\7-zip\7zfm.exe"
и
dir /b "%~d0\Program Files\7-zip\7zfm.exe"

с чего start семерки отсчитывает относительный путь от корня а не от текущего каталога и насколько это одинаково в разных версиях виндов - вопрос конечно интересный.
Автор: AlexanderNON
Дата сообщения: 06.06.2011 14:33
res2001

Цитата:
На одном cmd это геморно, по моему. Реализовал через смесь cmd/js, сохраняешь весь код в бат файл и выполняешь.

Для его выполнения нужны какие-то сторонние утилиты? Или на стандартной Windows XP/Server будет работать без дополнительных программ?
Автор: res2001
Дата сообщения: 06.06.2011 14:50
AlexanderNON
Будет работать в голой винде.
Автор: 01MDM
Дата сообщения: 06.06.2011 16:43
wolf0425

Цитата:
вопрос конечно интересный.

А как в ХП? Я окончательно пересел на 7-ку. В общем лучше конечно со слешем, не помешает, отработает даже если вдруг, в какой-либо ситуации, он окажется двойным.
Но если честно, то эта подстановка уже достала. Из for /?:

Цитата:

%~fI - переменная %I расширяется до полного имени файла
%~dI - из переменной %I выделяется только имя диска
%~pI - из переменной %I выделяется только путь к файлу

Из справки логично предположить, что все эти расширения вернут РЕАЛЬНЫЙ путь к файлу %I, а не ТЕКУЩИЙ.
Автор: res2001
Дата сообщения: 06.06.2011 16:57
01MDM

Цитата:
А как в ХП?

В XP отрабатывает только второй вариант, со слэшем.
Автор: ashum
Дата сообщения: 06.06.2011 17:41
Есть файл xml, нужно чтобы батник вытаскивал из него некоторые значения в текстовый файл. Какую команду использовать?
Автор: Alexey87
Дата сообщения: 06.06.2011 20:50
wolf0425

Цитата:
в таком виде батник может работать из любого каталога того сd

работать то он может и будет.
а как сделать так, чтобы все pdf-файлы (их около 50 в разных каталогах) проверялись данным батником?
Автор: wolf0425
Дата сообщения: 06.06.2011 21:25

Цитата:
Из справки логично предположить, что все эти расширения вернут РЕАЛЬНЫЙ путь к файлу %I, а не ТЕКУЩИЙ.
так они то реальный и вернут, было бы в примере не %~d0pdf\ a %~dp0pdf\ - вопросов бы не возникло.
А так - к имени диска приписали относительный путь и радуемся глюкавости start который проигнорировав ошибку запускает программу.

проблема же не в том, что эти функции возвращают не то что обещано в хэлпе, а в том что c:\1\1.txt - однозначно определяет путь к файлу (от корня), а c:1\1.txt - вообще-то определяет путь к файлу от текущего каталога диска c:, а не от его корня.

Добавлено:

Цитата:
а как сделать так, чтобы все pdf-файлы (их около 50 в разных каталогах) проверялись данным батником?
как сделать чтоб при подключении диска автоматом из автостарта прописывалась ассоциация в систему - правилось чем открывать pdf - это очень мелкая проблема по сравнению с тем, как автоматом убирать такую ассоциацию при отключении диска с FoxitPDFreader :)

Автор: 01MDM
Дата сообщения: 06.06.2011 22:24
wolf0425

Цитата:
проблема же не в том, что эти функции возвращают не то что обещано в хэлпе

Я как раз имел ввиду вопрос в целом. Если for не получил в виде строки путь к файлу, то он выдает текущий, что и вводит в заблуждение. А это может послужить серьезной ошибкой с последствиями.
Автор: Alexey87
Дата сообщения: 06.06.2011 22:43
wolf0425, не понял Вашего ответа.
Прошу подробнее объснить решается ли моя задача или нет.
Автор: AlexanderNON
Дата сообщения: 07.06.2011 00:00
res2001
Огромное спасибо! Сейчас пойду попробую ...
Автор: 01MDM
Дата сообщения: 07.06.2011 05:34
Alexey87

Цитата:
а как сделать так, чтобы все pdf-файлы (их около 50 в разных каталогах) проверялись данным батником?

В чем заключается проверка?
Автор: res2001
Дата сообщения: 07.06.2011 07:39
ashum
xml всеж правильнее разбирать не средствами батника, а xml парсером. Его можно заюзать из vbs/js скрипта.
Батники со структурой xml работать не умеют.
Обработать xml можно батником, но только как простой текстовый файл. Если, например, упакуешь xml (исключишь все лишние пробелы и переводы строк), то такая обработка уже не пройдет, надо будет переделывать. Но если заранее известно, что xml будет именно в таком виде и никогда изменяться не будет, то можно и батником.
Но отдельной команды нет, надо смотреть твой xml, смотреть что искать и исходя из этих данных делать батник, так что пример xmlа в студию и чего искать.
Автор: ashum
Дата сообщения: 07.06.2011 08:41
res2001
Пример xml:

Код: <?xml version="1.0" encoding="WINDOWS-1251" ?><ELEM_LIST><ELEM PLAYER_NAME="Плейер А-B" STATUS="playing"><START_TIME>20:24:08</START_TIME><BLK_TYPE>М</BLK_TYPE><TYPE>М</TYPE><NAME>Canson Del Mariachi</NAME><ARTIST>Los Lobos &amp; Antonio Banderas</ARTIST><AUTHOR></AUTHOR><ALBUM></ALBUM><DBID>2505</DBID><DURATION>00:02:01</DURATION></ELEM><ELEM PLAYER_NAME="Плейер А-B" STATUS="preloaded"><START_TIME></START_TIME><BLK_TYPE>М</BLK_TYPE><TYPE>Д</TYPE><NAME>Золотые Хиты (80-90, СИ) НГ middle</NAME><ARTIST></ARTIST><AUTHOR></AUTHOR><ALBUM></ALBUM><DBID></DBID><DURATION>00:00:07</DURATION></ELEM></ELEM_LIST>
Автор: NskRonin
Дата сообщения: 07.06.2011 08:52
Люди, подскажите как в бат файлах реализовать такое:

Что бы проходил пинг по списку компьютеров из текстового файла и писал об этом отчет?

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071

Предыдущая тема: зависает установка Windows XP: 39 минут


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