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

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

Автор: ComradG
Дата сообщения: 05.07.2010 20:27
Vladins
Знаешь, в винде есть такой трюк:

Код: file_1.mp3, file_2.mp3 ... file_n.mp3
Автор: Vladins
Дата сообщения: 05.07.2010 20:36
ComradG
Имена файлов тут не причем - они какими были такими и остаются (меняется только расширение .wav на .mp3), а низкий приоритет нужен чтобы на одноядерном процессоре можно было и еще что то делать а не ждать сутки окончания конвертации. Я выше написал как я делаю низкий приоритет, но думаю что можно это сделать более удобно.
Автор: wolf0425
Дата сообщения: 05.07.2010 20:37

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



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

Vladins
Цитата:
батник wav to mp3 переименовываю в 1.bat а потом запускаю второй батник в той же папке с таким содержимым:
я в таких случаях обычно себя рекурсивно перестартую, с добавлением ключика. ничего не переименовывая.

Автор: Vladins
Дата сообщения: 05.07.2010 20:44
wolf0425 можно пример...
Автор: ComradG
Дата сообщения: 05.07.2010 20:51
wolf0425
Про устройство ntfs драйвера - это касательно имен, а не процесса перекодировки. А на счет 100% загруженности во время конвертации, дык это lame.

Цитата:
Делать навороченный архиватор из этой vbs смысла нет точно

Дядь, я не собирался делать навороченный архиватор, просто ты как-то заикался на тему, что хотелось тебе когда-то средствами системы пожать файлы, вот я и представил тебе пример, что можно. Просто в купе с батниками, полагаю, можно в отсутсвии архиватора жать файлы.
Автор: wolf0425
Дата сообщения: 05.07.2010 20:54

Цитата:
wolf0425 можно пример...

Код: @echo off
pushd "%~dp0"

if /i .%1 equ .-scan goto :scan
if /i .%1 equ .-back goto :back
if /i .%1 equ ./d goto :delb

if /i ~%~nx1 equ ~indexdate.shtml goto :scan
if /i ~%1 equ ~ start "%time%" /min /low %~s0 -scan & goto :eof
exit
Автор: ComradG
Дата сообщения: 05.07.2010 21:03
wolf0425

Цитата:
перезапускаешь батник с /low - и того, что 7za из батника выжирает те же 100% - почти не чувствуется, если не гамать а просто работать

Вот так бы сразу.
Ладно фиг с этой vbs, главное, что все мы знаем теперь, что жать файлы срествами системы можно.
Подкиньте идей, чего еще не обсуждалось.
Автор: Vladins
Дата сообщения: 05.07.2010 21:07
wolf0425
Пишет "Не удается найти указанную метку пакетного файла - scan"
Автор: ComradG
Дата сообщения: 05.07.2010 21:07
Vladinsp
Дык создай ее.

Добавлено:
Тебе ведь ясно дали понять, что это пример. А goto ведет на метку в пакетном файле.
Автор: Vladins
Дата сообщения: 05.07.2010 21:16
ComradG
я только начал работать в командной строке, не знаю что это за метка, какой должен быть полный текст батника?
Автор: king_stiven
Дата сообщения: 05.07.2010 21:21
Vladins
как вариант
START "" /LOW /B "C:\Program Files\1\clienc\lame.exe" --cbr --strictly-enforce-ISO --noreplaygain -b 160 -q0 "%%~ni.wav" "D:\temp\outputbp\%%~ni.mp3"
то есть в своём батнике замени соответствующую строку на эту

lorents
Без комментариев. Уникальный случай за 4 года.
Автор: ComradG
Дата сообщения: 05.07.2010 21:22
Vladins
В консоли набирал hh ntcmds.chm? Набири, в этом справочнике все, что нужно "юному" батописателю. Ну а если объяснять на пальцах то, если у тебя есть инструкция

Код: goto:scan
Автор: Vladins
Дата сообщения: 05.07.2010 21:38
king_stiven одновременно загружается столько exe шников сколько и файлов, т е обработка идет одновременно, а нужно поочередно.

Цитата:
hh ntcmds.chm

Супер!


Автор: king_stiven
Дата сообщения: 05.07.2010 21:47
Vladins
тогда
START "" /LOW /WAIT /B "C:\Program Files\1\clienc\lame.exe" --cbr --strictly-enforce-ISO --noreplaygain -b 160 -q0 "%%~ni.wav" "D:\temp\outputbp\%%~ni.mp3"
Автор: BVV63
Дата сообщения: 06.07.2010 05:03
О своей вчерашней проблеме.

Цитата:
Почему-то(?) переменная получается:
" C: D: C: D: C: D: C: D: C: D: C: D: C: D: C: D: C: D: C: D: C: D: C: D: C: D: A: C: D: E: C: D: C: D: C: D: C: D: C: D: C: D: C: D: C: D: C: D:". Хотя, я рассчитывал на то, что она будет " C: D:".

Спасибо всем, кто откликнулся. Причина оказалась тривиальна: "Сам дурак!" . "Отлаживая" батник, я раз за разом запускал его из одной и той же копии консоли. Вначале занимался другими его фрагментами, а когда добрался до данной переменной, она уже к тому времени разраслась, а я, балда, и не понял сразу из-за чего.
Ладно, стоит запомнить, дабы как-нибудь на эти грабли не наступить повторно.
Автор: yurkesha
Дата сообщения: 06.07.2010 06:32
BVV63
В начале батника пишешь SETLOCAL, а в конце ENDLOCAL и сфера действия переменных станет ограничена текущей копией запущенного батника...
Автор: 01MDM
Дата сообщения: 06.07.2010 06:34
BVV63
Setlocal ограничивает жизнь переменных жизнью батника:

Код:
@echo off
setlocal
...
Автор: BVV63
Дата сообщения: 06.07.2010 08:56
Такой вопрос. Допустим, имеется переменная Var=1234567890. Ну, брать её по частям и пихать эти части в переменные я уже научился. А напрямую, не используя промежуточные переменные, работать с её составляющими можно? Напр., одну из цифр заменить, сравнить с константой, увеличить на единицу и т. п. В описании команды Set я не нашёл подобной возможности.

Добавлено:
Выводить эхом фрагменты переменной тоже не вопрос. Можно ли изменять эти фрагменты?

Добавлено:
И ещё. Как можно узнать длину переменной?
Автор: res2001
Дата сообщения: 06.07.2010 10:03
BVV63

Цитата:
И ещё. Как можно узнать длину переменной?

записать переменную в новый файл и узнать размер файла с помощью %~z1.

Цитата:
Можно ли изменять эти фрагменты?

можно делать операцию замены, можно брать части, смотри set /?

Добавлено:

Цитата:
Напр., одну из цифр заменить, сравнить с константой, увеличить на единицу и т. п. В описании команды Set я не нашёл подобной возможности.

Непосредственно в переменной этого не сделать, выделяешь в отдельную переменную часть большой переменной, с ней производишь манипуляции, потом склеиваешь.
Автор: BVV63
Дата сообщения: 06.07.2010 10:25
res2001

Цитата:
записать переменную в новый файл и узнать размер файла с помощью %~z1.

По-другому никак? Недолюбливаю иметь дело с временными файлами.
Автор: NIKZZZZ
Дата сообщения: 06.07.2010 10:35
BVV63

Цитата:
По-другому никак?


Код: Set Var=1234567890
Set xx=%Var%
Set Count=0
:_2
If "%xx%"=="" GoTo _1
Set xx=%xx:~0,-1%
Set /a Count+=1
GoTo _2
:_1
Echo Length = %Count%
Автор: mugil_cephalus
Дата сообщения: 06.07.2010 10:49
res2001

Цитата:
можно и vbs

что то не нашел, хотя казалось видел где-то на Программирование "удобняшек" на VBScript , все перерыл, но не нашел...

non-subject:
зато нашел vbs-function dos-string to ansi-string http://forum.ru-board.com/topic.cgi?forum=33&topic=1491&start=140#17
Автор: BVV63
Дата сообщения: 06.07.2010 10:52
NIKZZZZ
Спасибо. А нельзя ли попроще не для общего случая, а для частного. Переменная может содержать либо 1 символ, либо 2, и мне нужно узнать сколько именно.

Добавлено:
Просто подобных проверок должно быть много, и не хотелось бы слишком уж раздувать батник.
Автор: wolf0425
Дата сообщения: 06.07.2010 10:58
BVV63
Цитата:
По-другому никак?
ограничивается только потребностями и фантазией:
Код: set "slength=0" & for %%a in ( 512 256 128 64 32 16 8 4 2 1 ) do set /a test=!slength! + %%a - 1 && call set test=%%str:~!!test!!,1%%&& if not "!!test!!"=="" set /a slength+=%%a
Автор: res2001
Дата сообщения: 06.07.2010 11:01
NIKZZZZ

BVV63

Цитата:
Спасибо. А нельзя ли попроще не для общего случая, а для частного. Переменная может содержать либо 1 символ, либо 2, и мне нужно узнать сколько именно.

Подточив немного способ предложенный NIKZZZZ получим:

Код: if "%xx:~1,1%" equ "" (echo 1 символ) else (echo 2 символа)
Автор: NIKZZZZ
Дата сообщения: 06.07.2010 11:09
BVV63

Цитата:
Переменная может содержать либо 1 символ, либо 2



Код: If "%Var:~2,1%"=="" ... (переменная содержит менее двух символов)
Автор: BVV63
Дата сообщения: 06.07.2010 11:11
res2001
OK, подходит.
Я подумал, что может кто подскажет решение ещё лучше, если я опишу задачу. Приходится работать с двузначными числами и выводить их также в двузначном виде. Допустим:
Set Var=03
Set Var+=1
А ответом будет однозначное число 4.
Ну, если ничего лучшего выжать нельзя, использую Ваш способ.

Добавлено:
NIKZZZZ
О, пока писал, Вы тоже ответили. Пожалуй, самое лучшее.

Добавлено:
Видимо, так:
If "%Var:~2,1%"=="" Set Var=0%Var%
Автор: wolf0425
Дата сообщения: 06.07.2010 11:20

Цитата:
Видимо, так:
If "%Var:~2,1%"=="" Set Var=0%Var%
вообще-то позиции символов в переменной нумеруются начиная с нуля, так что тут вписана проверка наличия третьего символа, а не второго. но подход работающий.

для дополнения ведущими нулями можно ещё и вариант без проверок:
Код: Set "Var=00%Var: =%"
Set "Var=%Var:~-2%"
Автор: res2001
Дата сообщения: 06.07.2010 11:22
wolf0425

Цитата:
set "slength=0" & for %%a in ( 512 256 128 64 32 16 8 4 2 1 ) do set /a test=!slength! + %%a - 1 && call set test=%%str:~!!test!!,1%%&& if not "!!test!!"=="" set /a slength+=%%a

Супер
Двоичная система в действии!
Взял себе в архив полезняшек.
Автор: us0r
Дата сообщения: 06.07.2010 12:18
Да тут вообще пора делать отдельный архив полезняшек/удобняшек отдельным топиком- и новичкам полезно, и икать удобнее и вообще проще и лучше... А там пару комментариев прикрутив можно и учебник неплохой по .BAT в .CHM/.MHT сделать...

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132

Предыдущая тема: XP не видит второй раздел на съемном USB-HDD


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