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

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

Автор: nopy4uk
Дата сообщения: 19.01.2007 13:14
Уважаемые программисты, подскажите пожалуйста, как мне декодировать тучу файлов (музыка в беспотерьном формате tta), лежащих в разных папках в корне диска, формат папки типа "имя исполнителя - имя альбома" (). Нужно получить файлы с расширением *.wav. Сейчас тупо копирую программу-декодер ttaenc.exe в корень каждой папки и запускаю из под Far-a с ключами "ttaenc.exe -d -u" (d - декодирование из tta в wav, u - удаление исходного файла *.tta) Наверное как то можно автоматизировать сей процесс, а то папок более 500 и занятие это доолгое...
Автор: yurkesha
Дата сообщения: 19.01.2007 13:25
Как я понял полная команда для декодирования: ttaenc.exe -d -u имя_файла.tta? Тогда:
Код: FOR /r %%i IN (*.tta) DO ttaenc.exe -d -u %%i
Автор: Elroir
Дата сообщения: 19.01.2007 13:35
nopy4uk

Код:
@echo off
setlocal
set root=c:\
for /r %root% %%a in (*.tta) do (
ttaenc.exe -d -u "%%a" "%%~dpa%"
)
Автор: Wise_Kaa
Дата сообщения: 19.01.2007 16:03
Доброго времени суток. Может подскажет кто:
1) как запустить задачу из-под другого пользователя с помощью runas без ввода пароля? Т.е. ситуация такая: есть юзер с именем user1, у него пароль userpassword, надо запустить, к примеру, командную строку из под-учетной записи этого пользователя. Основное требование: никакие пароли вручную вводиться не должны.
такая команда
runas /user:user1 cmd.exe <pass.txt
не работает (предполагалось, что пароль будет браться из файла pass.txt).
2) Есть такая программка reg.exe, позволяющая работать с реестром из командной строки. После того, как она отработала, пишется сообщение о ошибке или о успешном завершении операции. Я эти сообщения перенаправляю в текстовый файл. Только они почему-то перенаправляются в кодировке не ДОСа, а windows. В результате в текстовом файле получается символы с разными кодировками, что, согласитесь, не очень удобно. Как обойти такую проблему?
Заранее спасибо.
Автор: nopy4uk
Дата сообщения: 19.01.2007 17:12
СПАСИБО ребята!!!
Щас проверил на одной папке - все работает!!!
Класс!

Цитата:
@echo off
setlocal
set root=c:\
for /r %root% %%a in (*.tta) do (
ttaenc.exe -d -u "%%a" "%%~dpa%"
)



Добавлено:
Только почему то файлы *.wav все перемещаются в папку C:\WINDOWS\system32 ??

Цитата:
Щас проверил на одной папке - все работает!!!

Автор: Elroir
Дата сообщения: 19.01.2007 20:07
nopy4uk
Очень капризная программа в отношении пути вывода.
Немного переделал код:

Код:
@echo off
setlocal enabledelayedexpansion
set root=c:\
for /r %root% %%a in (*.tta) do (
set outp=%%~dpa
set outp=!outp:~0,-1!
ttaenc.exe -d -u "%%a" "!outp!"\
)
Автор: Elroir
Дата сообщения: 19.01.2007 22:14
Wise_Kaa

Цитата:
1) как запустить задачу из-под другого пользователя с помощью runas без ввода пароля?

http://forum.ru-board.com/topic.cgi?forum=62&topic=6156&start=1780#13
Автор: Wise_Kaa
Дата сообщения: 19.01.2007 23:38
1)
Цитата:
http://forum.ru-board.com/topic.cgi?forum=62&topic=6156&start=1780#13

мне не подходит такой вариант, так как пароль-то все равно надо вводить, хоть и один раз. Надо сделать таким образом, что бы пароль вообще не нужно было вводить. Он может храниться в открытом виде, главное, что бы его не требовалось вводить, когда батник отрабатывает. Т.е. бат-файл должен отработать полностью без участия пользователя.
2) а что по второму вопросу? никто не подскажет?
Автор: Elroir
Дата сообщения: 20.01.2007 00:08
Wise_Kaa

Цитата:
Надо сделать таким образом, что бы пароль вообще не нужно было вводить

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


Цитата:
2) а что по второму вопросу? никто не подскажет?

Насколько я знаю, если программа выводут текст в какой-то определенной кодировке - ее невозможно изменить. А что кроме вывода reg.exe записывается в файл?

Автор: Wise_Kaa
Дата сообщения: 20.01.2007 00:22

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

Спасибо за разъяснения, хоть не буду искать несуществующее.


Цитата:
А что кроме вывода reg.exe записывается в файл?

Да много чего пишется, просто создается лог-файл, с комментариями, с сообщениями от других программ. И всю эту идилию нарушает другая кодировка reg.exe
Автор: Higher
Дата сообщения: 20.01.2007 06:51
Elroir

Примного благодарен!
Автор: igor_andreev
Дата сообщения: 20.01.2007 07:03
Wise_Kaa
У меня как-то давно всплыла похожая задача(разные кодировки), что-то там ни на что не реагировало и портило картину лога. Я тогда в конце батника вставил:
xcode log.txt log.txt
Xcode тут. А года два назад на английскую винду совсем перешел, тут все красиво, по-английски
Автор: royt
Дата сообщения: 20.01.2007 14:35
Можно ли (и как) из командной строки изменить MAC-адрес сетевой карты? Точнее, имеются ли в винде штатные (!) команды или программы, с помощью которых можно изменить MAC?
Для XP SP2, 2003.

Вопрос мною уже был детально изучен - где хранятся настройки в реестре и как их менять. Но процедура поиска нужного ключа в реестре и изменения значения уж слишком хитра, чтобы реализовывать ее батником. Для изменения MAC-а предлагается воспользоваться сторонними программками (например, macshift и SMAC). Но хотелось бы найти штатные средства.

У netsh есть недокументированные параметры командной строки. Может для нее существуют команда для изменения MAC-а?
Автор: Wise_Kaa
Дата сообщения: 20.01.2007 20:05
igor_andreev
Спасибо, но к сожалению мне такой вариант не очень подходит, хотелось бы обойтись стандартными средствами, которые есть в Win XP
Автор: igor_andreev
Дата сообщения: 20.01.2007 23:08
royt
Wise_Kaa
А с чем связано ваше нежелание использовать сторонние утилиты, можно поинтересоваться? Если возможностей винды не хватает, то что такого, чтобы добавить пару-тройку консольных утилит? Все равно ведь устанавливаете программы, которых нет в Windows, а-ля файл-менеджер, архиватор и т.п.

У меня есть папка на несистемном диске, D:\BIN - в ней 600 с гаком консольных утилит, которых нет в стандартной поставке Windows. При перестановке винды просто добавляю ее в PATH и вуаля, комфортная работа мне обеспечена.
Автор: Wise_Kaa
Дата сообщения: 21.01.2007 11:44

Цитата:
У меня есть папка на несистемном диске

Вот именно, у Вас. На своем собственном компьютере я тоже пользуюсь не интернет эксплорером, и не медиа-плеером. Но мне батник этот прийдется запускать неизвестно где, и, возможно, буду запускать его даже не я, по этому чем меньше в нем будет использоваться утилит от сторонних производителей, тем лучше (по почте отошлешь: там фаервол чего зарубит, там антивир, потом удаленно сложновато разбираться чего именно уже не хватает)
Автор: yurkesha
Дата сообщения: 21.01.2007 11:56
Тогда как вариант можно использовать следующую схему:
созданный скрипт вместе с нужными утилитами помещается в SFX-архив с silent-распаковкой во временную папку и запуском скрипта после распаковки - главное учитывать при создании скрипта, что надо работать только с относительными путями и стандартными переменными окружения...
Автор: AZJIO
Дата сообщения: 21.01.2007 21:31
Вот что мне выдаёт этот скрипт.

Цитата:
C:\windows>FOR /F "usebackq tokens=1 eol= skip=1 delims= " %a IN (`help|findstr
/B /V /C:" "`) DO help %a 1>>%a.txt
Попытка записи в несуществующий канал.
Синтаксическая ошибка в имени файла, имени папки или метке тома.
Процесс не может получить доступ к файлу, так как этот файл занят другим процесс
ом.

А как я понимаю должен появится файл с описанием всех команд.
Я на другом форуме нашёл скрипт создания бэкапа, в котором раз в неделю копируется нужный файл, ну типа этого, но здесь я переделал для временных скачанных архивов.

Цитата:
del /q temporarily7.rar
ren temporarily6.rar temporarily7.rar
ren temporarily5.rar temporarily6.rar
ren temporarily4.rar temporarily5.rar
ren temporarily3.rar temporarily4.rar
ren temporarily2.rar temporarily3.rar
ren temporarily1.rar temporarily2.rar
ren temporarily.rar temporarily1.rar
ren .rar[1] temporarily.rar
start temporarily.rar

Можно ли сделать так, чтоб файлы не удалялись после 7 архива, а вместо имени была дата создания архива, то есть ".rar[1]" переименовывался в файл, например 0.26.13.22.01.2007.rar (часы.минуты.секунды.день.месяц.год)
Автор: yurkesha
Дата сообщения: 21.01.2007 21:38
AZJIO для выполнения данного скрипта надо создать пакетный (cmd либо bat) файл и в него записать данную команду. К тому же лучше не запускать его внутри папки виндов особенно с правами ограниченного пользователя...
К тому же скрип такой:
Код: FOR /F "usebackq tokens=1 eol= skip=1 delims= " %%a IN (`help^|findstr /B /V /C:" "`) DO help %%a >>%%a.txt
Автор: SGG
Дата сообщения: 22.01.2007 01:26
Есть такая штука: после распознавания програмой GOCR картинки, состоящей из 4-ех символов на выходе получается тесктовый файл с символами, изображенными на картинке.
Но иногда, в следствие распознавания картинки несоответствующего качества, текстовый файл может содержать символ подчеркивания вместо нераспознанных символов или между четырьмя распознанными вместо мнимого (предполагаемого пробела), или в конце (пятым символом).
Еще бывают варинты, когда результат располагается в две строки - начало на второй, а окончание на первой строке (именно в таком порядке), причём количество символов в строках может "плавать", т.е. может быть 1-3, 2-2, 3-1 сиволов соответственно на первой и второй строке.

Нужно, чтобы после обработки
Цитата:
B3_
A1
получался на выходе файл с таким содержимым (размер фала должен быть шесть байт - четыре символа + 0x0D + 0x0A):


Цитата:
A1B3


Но у меня получилось сделать только так - четыре символа + пробел + 0x0D + 0x0A
И то, если символы расположены на одной строке.
То есть, после обработки такого
Цитата:
A1_B3_
получается
Цитата:
A1B3
с пробелом в конце строки, а надо без пробела...

Наваял вот такое:

Цитата:
for /F "tokens=1,2,3,4 delims=_" %%i in (text.txt) do @echo %%i%%j%%k%%l > out.txt



Можно ли каким-то образом убрать пробел в конце строки? Или может лучше изменить скрипт? и если менять, то где?

Помогите, пожалуйста.
Автор: Kirillhome
Дата сообщения: 22.01.2007 02:54
SGG
IMHO, должно помочь простое убирание пробела перед >, т.е.

Код: for /F "tokens=1,2,3,4 delims=_" %%i in (text.txt) do @echo %%i%%j%%k%%l> out.txt
Автор: Elroir
Дата сообщения: 22.01.2007 02:57
SGG
Я не проверял все варианты расположения символов, так что попробуй погонять тесты.

Код:
@echo off
setlocal enabledelayedexpansion
set count=1
for /f "tokens=1-4 delims=_ " %%a in (text.txt) do (
if !count!==2 (set fpart=%%a%%b%%c%%d) else (set code=%%a%%b%%c%%d)
set /a count=!count!+1
)
if not defined fpart (echo %code%>out.txt) else (echo %fpart%%code%>out.txt)
Автор: SGG
Дата сообщения: 22.01.2007 03:57
Kirillhome

Цитата:
должно помочь простое убирание пробела перед >

таки да - ты прав! спасибо, учту такой момент

Elroir

Цитата:
попробуй погонять тесты
погонял - ещё как работает! супер!

Цитата:
Спасибо за "добавки" к USDownloader

Пожалуйста.
[offtop]А вот с этой доработкой распознавалка будет работать еще лучше!!! Большое спасибо!
Так что скоро, думаю, не за горами, новый сборничек будет. Там и база побольше. /offtop]
Автор: Maza Faka
Дата сообщения: 22.01.2007 06:17
Нужно вписать в текстовый файл слово "System", пропустив две строки...
Вот так не получается : For /F "skip=2" %%i in (test.txt) do echo "System" >> %%i
Что я делаю не так?
Автор: Elroir
Дата сообщения: 22.01.2007 06:23
Maza Faka
В пустой файл вписать две пустые строки, а на третьей написать "System"?
Автор: royt
Дата сообщения: 22.01.2007 07:03
igor_andreev
Цитата:
А с чем связано ваше нежелание использовать сторонние утилиты, можно поинтересоваться?

yurkesha
Цитата:
созданный скрипт вместе с нужными утилитами помещается в SFX-архив...

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

Например, некоторые консольные проги не будут запускаться без предварительной инсталляции (даже если ее довольно легко "выполнить" самому, импортировав данные в реестр - все равно это уже дополнительный геморрой). Порой им еще нужны всякие дополнительные .NET (или просто .dll-ки типа msvcp60 - которые не являются обязательными компонентами системы и имеются почти на каждой машине, но не всегда).
Кроме того, флэшка, которая всегда с собой - тоже не резиновая.
Автор: Maza Faka
Дата сообщения: 22.01.2007 07:40
Elroir

Цитата:
В пустой файл вписать две пустые строки, а на третьей написать "System"?


Нет, файл не пустой, в нём уже есть две строки, надо пропустить их и вписать "System"


Добавлено:
Как запретить пользователю закрывать окно командной строки, пока выполняется длинный сценарий (около 10 сек), скрывать его нельзя, так как пользователь будет запускать батник снова и снова...Короче нужно оформить консольное окно так, что бы пользователь понял, что нужно подождать и не мог закрыть его...
Автор: Tipulatoid
Дата сообщения: 22.01.2007 07:57
Maza Faka
Я на 27-ой странице задавал похожий вопрос. Elroir привел пример кода. Его надо чуток под свою задачу адаптировать.
Автор: Elroir
Дата сообщения: 22.01.2007 08:04
Maza Faka

Код:
@echo off
setlocal enabledelayedexpansion
set count=1
for /f "tokens=*" %%a in (test.txt) do (
if !count!==3 echo "System">>out.txt
echo %%a>>out.txt
set /a count=!count!+1
)
Автор: Tipulatoid
Дата сообщения: 22.01.2007 08:10
Впрочем, сам попробую. Так должно работать:


Цитата:
@echo off
setlocal enabledelayedexpansion

set thirdline=System
set line=3

del /q tmp_file 2>nul
set counter=1
for /f "tokens=*" %%a in (test.txt) do (
if !counter!==!line! (echo %thirdline%>>tmp_file) else (
echo %%a>>tmp_file)
set /a counter=!counter!+1
)
del /q test.txt 2>nul
ren tmp_file test.txt

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

Предыдущая тема: Сбой активации XP sp2


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