Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Программы » Командная строка, батники, сценарии (bat, cmd)

Модерирует : gyra, Maz

Widok (03-03-2010 16:29): Лимит страниц. Продолжаем здесь.  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101

   

Widok



Moderator-Следопыт
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Командная строка, батники\сценарии (bat, cmd)
(часть 1) (часть 2)
Вопросы, задачи и их решения по работе с командной строкой, файлами, а также сопутствующие ссылки.

 
Важно: копируя батник через буфер обмена из форума не забывайте удалять пробелы в конце каждой строки, т.к. в некоторых случаях из-за этого программа будет работать неправильно!!!
 
Примечание: Большие куски кода заключайте в тэг [more]  
 
Смежные темы:
В помощь системному администратору » Автоматизация администрирования
Microsoft Windows » Задачи на bat-файлах 5
 
Полезные ссылки:
· Cmd. Описание от разработчиков
· Урок bat-аники (для начинающих)
· Курс лекций для начинающих. Полезно и просто описано
· Набор GNU утилит для win32
· Пакет утилит для организации интерфейса в bat-файлах
· Использование ansi.sys
· cmdow — изменение параметров и видимости дос-окна
· blat — отправка почты из консоли
· Справка по командам в виде Html
· Команды RunDll32
· Quick Batch File Compiler - Позволяет превратить ваш батник в независимое приложение
· Пример - получение и обработка списка пользователей
· Уильям Станек - Командная строка Microsoft Windows (вплоть до w2k3)
· Простой способ получать текущую дату всегда в одном формате (не зависит от языков и настроек)
· Переход из 32-битной версии cmd.exe в 64-битную

Всего записей: 24190 | Зарегистр. 07-04-2002 | Отправлено: 12:38 10-03-2009 | Исправлено: TechnicsKuzya, 13:54 27-12-2009
mozers



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Если уж речь зашла о консольных перекодировщиках, осмелюсь предложить скриптовый вариант: recode.js : Подробнее...
В батнике можно задействовать, например, так:
Код:
type dos866.txt|cscript recode.js cp866 windows-1251 > out.txt

Всего записей: 2187 | Зарегистр. 03-01-2002 | Отправлено: 21:48 17-09-2009 | Исправлено: mozers, 21:51 17-09-2009
bomzzz



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
В СМЫСЛЕ ОН ПОТОК УМЕЕТ СРАЗУ ПЕРЕКОДИРОВАТЬ?

Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 21:55 17-09-2009
mozers



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ну да. А че тут странного?

Всего записей: 2187 | Зарегистр. 03-01-2002 | Отправлено: 22:02 17-09-2009
bomzzz



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
не знаю - не пробовал еще.
 
никто не подскажет

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

Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 22:10 17-09-2009 | Исправлено: bomzzz, 22:13 17-09-2009
leshiy_odessa



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здравствуйте нужна помощь.
 
Есть перловый скрипт, которому можно подсунуть параметры (названия файлов)
 
ex.ua-loader.pl *.avi - залить все файлы с расширением *.avi
ex.ua-loader.pl film.avi - залить файл film.avi
 
Соответственно когда надо залить не все файлы по маске *.avi приходиться писать .bat файл:
 
ex.ua-loader.pl film1.avi
ex.ua-loader.pl film2.avi
ex.ua-loader.pl film3.avi
 
В общем чтобы не напрягаться с командной строкой было решено добавить это в меню по правой кнопки мышки  
 
http://img22.imageshack.us/img22/4364/225119.jpg
 

Код:
 
Windows Registry Editor Version 5.00
 
[HKEY_CLASSES_ROOT\*\shell\ЗАЛИТЬ НА EX.UA]
 
[HKEY_CLASSES_ROOT\*\shell\ЗАЛИТЬ НА EX.UA\command]
@="cmd /c D:\\ex.ua-loader.pl LOGIN PASSWORD 11111 \"%1\" && msg * \"ФАЙЛ ЗАЛИТ\""
 

 
Все работает неплохо, но вот незадача. Один файл или два терпимо, но если их десять, то откроется десять окон терминала.
 
ВОПРОС!!!
 
Как сделать, чтобы выполнялось в одном окне, т.е. не одновременно, а как в .bat файле по порядку:
 
ex.ua-loader.pl film1.avi
ex.ua-loader.pl film2.avi
ex.ua-loader.pl film3.avi
 
Я понимаю что нужно что то делать с переменной %1, но дальше мозга не хватает.

Всего записей: 546 | Зарегистр. 23-09-2001 | Отправлено: 00:39 18-09-2009 | Исправлено: leshiy_odessa, 00:45 18-09-2009
bomzzz



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
консольное окно из за cmd скрипт без cmd наеврно надо запускать

Цитата:
 
CmdЗапуск нового экземпляра программы командного процессора Cmd.exe.
Заметки
Использование нескольких команд  
В параметре строка можно указать несколько команд, используя разделитель команд &&. Однако в этом случае необходимо заключить все эти команды в кавычки (например "команда&&команда&&команда").
 

START  ex.ua-loader.pl film1.avi

Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 08:55 18-09-2009 | Исправлено: bomzzz, 09:29 18-09-2009
dimpase

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
01MDM

Цитата:
dimpase
Если не ошибаюсь, то этого сделать нельзя в реальном времени. Весь вывод в консоль идет только после того, как команда отработает. Т.е пакетом данных сразу.
пример:
 
Код:
 
C:\> for /f "tokens=*" %i in ('ping ya.ru') do @echo %time% %%i  

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

Всего записей: 130 | Зарегистр. 29-09-2008 | Отправлено: 17:11 18-09-2009
leshiy_odessa



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
консольное окно из за cmd скрипт без cmd наеврно надо запускать
 
Цитата:
 
CmdЗапуск нового экземпляра программы командного процессора Cmd.exe.
Заметки
Использование нескольких команд  
В параметре строка можно указать несколько команд, используя разделитель команд &&. Однако в этом случае необходимо заключить все эти команды в кавычки (например "команда&&команда&&команда").
 
 
START  ex.ua-loader.pl film1.avi  

 
Вы меня не совсем поняли. Есть скрипт который выполняеться по правой кнопке мышки:
 
cmd /c c:\temp\ex.ua-loader.pl login password ID "%1"  && msg * "ФАЙЛ ОТПРАВЛЕН"
 
Соответственно выделяем несколько файлов мышкой и жмем залить (см. рисунок)
 
http://img22.imageshack.us/img22/4364/225119.jpg
 
Что происходит под "%1" подставляются имена выделенных файлов и начинаеться выполнение нескольких скриптов, по числу выделенных файлов
 
cmd /c c:\temp\ex.ua-loader.pl login password ID 1.avi  && msg * "ФАЙЛ ОТПРАВЛЕН"
 
cmd /c c:\temp\ex.ua-loader.pl login password ID 2.avi  && msg * "ФАЙЛ ОТПРАВЛЕН"
 
cmd /c c:\temp\ex.ua-loader.pl login password ID 3.avi  && msg * "ФАЙЛ ОТПРАВЛЕН"
 
и т.д.
 
Соответственно открывается столько же окон.
 
Мне бы хотелось чтобы в результате скрипта был сформирована команда при которой файлы загружались один за другим.  
 
К примеру если сделать обычный .bat  
 
cmd /c c:\temp\ex.ua-loader.pl login password ID 1.avi  && msg * "ФАЙЛ ОТПРАВЛЕН"
cmd /c c:\temp\ex.ua-loader.pl login password ID 2.avi  && msg * "ФАЙЛ ОТПРАВЛЕН"
cmd /c c:\temp\ex.ua-loader.pl login password ID 3.avi  && msg * "ФАЙЛ ОТПРАВЛЕН"
 
 
и запустить его, то команды выполняются не одновременно, одна за другой.
 
Этого же я и хочу добиться, но по правой кнопки мышки.
 
В теории скрипт должен подставить имена файлов, а потом подсовывать их как то.
Или возможно создавать временный .bat файл и запускать его. Правда это не идеальный вариант.

Всего записей: 546 | Зарегистр. 23-09-2001 | Отправлено: 19:57 18-09-2009
mozers



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
leshiy_odessa
Цитата:
Соответственно выделяем несколько файлов мышкой и жмем залить
...
подставляются имена выделенных файлов и начинаеться выполнение нескольких скриптов, по числу выделенных файлов  
Так и задумано. Чтобы вместо нескольких окон обработка происходила в единственном окне надо сильно мудрить... (В Total Commander это организовать несложно, а вот в Проводнике...)
А можно поступить проще - перенести этот пункт из основного контекстного меню в подпункт "Отправить" (т.е. разместить батник в каталоге c:\Documents and Settings\username\SendTo\) и все заработает как надо. Вот такой батник, к примеру, выведет список выделенных файлов:
Код:
@echo off
:loop
if "%1"=="" pause & exit
echo
%1
shift
goto
:loop


Всего записей: 2187 | Зарегистр. 03-01-2002 | Отправлено: 22:32 18-09-2009
raystlin

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
01MDM
Огромное спасибо...;)

Всего записей: 50 | Зарегистр. 07-11-2003 | Отправлено: 00:00 19-09-2009
bomzzz



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
mozers  
 
 
мне тут стало интересно как добавлять в контекстное меню експлорера, я взял крайне полезную для локалки утилиту http://www.rejetto.com/hfs/, которая туда прописывается, чтоб посматреть где в реестре это делается - она тоже прописывается через shell но консольного окна вообще не возникает.

Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 00:09 19-09-2009 | Исправлено: bomzzz, 01:28 19-09-2009
leshiy_odessa



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
mozers
 
Огромное спасибо.
 
Это практически то что нужно, но теперь хотелось бы чтобы между именами файлов вставлялось - cmd /c c:\temp\ex.ua-loader.pl login password ID <ИМЯ ФАЙЛА>  && msg * "ФАЙЛ ОТПРАВЛЕН".
 
Если в имени файла пробел, то само собой, что не срабатывает.
 
Я понимаю что наглею, но мне надо пару дней винтиками вертеть, чтобы понять и сделать.
 
UPDATE
 
Вариант с SendTo не срабатывает на нескольких файлах. Он отправляет только один и открывает только одно окно.

Всего записей: 546 | Зарегистр. 23-09-2001 | Отправлено: 02:50 20-09-2009 | Исправлено: leshiy_odessa, 03:10 20-09-2009
bomzzz



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
в кавычки всю строку возьми, с "файл отправлен" не могу точно сказать что делать - пока напиши слитно, может екранировать надо кавычки, а может через & надо делать
 
@echo off
:loop
if "%1"=="" pause & exit
echo %1
echo "cmd /c c:\temp\ex.ua-loader.pl login password ID %1  && msg * "ФАЙЛОТПРАВЛЕН"">myfile.txt
shift
goto :loop
 
вот так выпечатывает но в кавычках
 
еле нашел где у меня send to отключено. выдает все выделенные файлы но вот так
@echo off
:loop
if %1=="" pause & exit
echo %1 >> MyFile.txt
shift
goto :loop
 
в send to поместил ярлык на батник, а файлик с рапечатанными выделенными файлами рядом с батником появлялся. но это не принципиально - просто если батник лежит в send to то рабочей папкой считается папка юзера, чтоб не искать этот файл туда сюда.
еще одна заморочка получится - выводит в кавычках имена файлов с путями
 
понял в чем твоя проблема. отредактировал реестр - просто в контекстное меню добавил, без send to, да возникает множество cmd окон. и даже предупреждение, что до фига. ну не так надо делать. без cmd как то
 
например просто батник в папке запускаешь - он все файлы директории отправляется по очереди.
 
вот когда в TheBat файлы отправляю - никаких окон не возникает.

Цитата:
 
Иногда перед разработчиком возникает вопрос: как сделать так, чтобы в любой момент у пользователя могло работать не более одного экземпляра приложения. Кроме того, нужно, чтобы при попытке запустить еще один экземпляр этого приложения текущий экземпляр уведомлялся об этом.
Рассмотрим, как можно обеспечить поддержку приложений, запускаемых только в одном экземпляре. Это можно реализовать разными способами. Принцип решения задачи основан на использовании некоего общего ресурса, создаваемого и блокируемого приложением. Если второй экземпляр приложения не может этого сделать, ему известно, что один экземпляр уже существует и работу следует завершить.
Чаще всего общим ресурсом, используемым при создании управляемых приложений, запускаемых только в одном экземпляре, служит мьютекс. Мьютекс - это синхронизирующий примитив, поддерживаемый операционными системами, которые допускают взаимодействие между потоками или процессами. Обычно мьютексы применяют для защиты общих ресурсов, чтобы обеспечить монопольный доступ к ним.
 

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

Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 02:59 20-09-2009 | Исправлено: bomzzz, 07:06 20-09-2009
mozers



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
leshiy_odessa
1. Чтобы наш пакетник корректно обрабатывал файлы с пробелами в имени/пути надо в операции сравнения заменить кавычки на какие нить другие ограничители.
2. cmd /c или start тут использовать нельзя. Иначе мы нарвемся на то, от чего так упорно убегаем (т.е. при работе пакетника возникнет куча окон по кол-ву выделенных файлов).
 Тут надо писать полностью ком.строку для запуска перлового скрипта.
3. Что такое msg * "ФАЙЛ ОТПРАВЛЕН" - я без понятия (утилита какая то?). Думаю вполне достаточно обычного echo.
 Сообщение возникнет, только если перловый скрипт вернет 0 (т.е. успешное выполнение).
 Если тупой скрипт ничего не возвращает - убери проверку на errorlevel.
 
В общем, получается так:
Код:
@echo off
:loop
if [%1]==[] pause & exit
perl
-w c:\script\ex.ua-loader.pl login password ID "%1"
if not errorlevel 1 echo ФАЙЛ ОТПРАВЛЕН
echo.
shift
goto
:loop
Как правильно заметил bomzzz в SendTo можно поместить не сам пакетник, а ссылку на него.
 
bomzzz
TotalCommander автоматически создает список выделенных файлов (см. параметры %L, %l, %F, %f, %D, %d), поэтому проще всего скрипту передавать именно его.
В Explorer такой функционал отсутствует, поэтому разработчики вынуждены писать свои расширения и регистрировать их в ContextMenuHandlers. (Для примера можно глянуть, допустим, регистрацию WinRAR).
Так же можно в контекстное меню добавить какой нить системный обработчик...

Всего записей: 2187 | Зарегистр. 03-01-2002 | Отправлено: 15:27 20-09-2009
korosya

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите, возможно ли из командной строки изменить версию файла?

Всего записей: 1005 | Зарегистр. 19-07-2003 | Отправлено: 22:18 20-09-2009
Dr29BArt



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Помогите написать скриптик. Ззапускается батник с параметром-расширение, нужно подсчитать количество фалов с таким расширением на всех дисках.

Всего записей: 7 | Зарегистр. 20-09-2009 | Отправлено: 23:45 20-09-2009 | Исправлено: Dr29BArt, 23:45 20-09-2009
bomzzz



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
 
ECHO OFF
COLOR 9F
CLS
FOR /R C:\ %%I in (*.txt) DO SET /a COUNT=COUNT+1
ECHO %COUNT%
PAUSE
 

не знаю как маску делать чтоб на всех дисках искало, ета ищуца все текстовые фалы на диске с
for /r c:\ %%I in (%1) do set /a count=count+1
параметр запуска *.txt
for /r c:\ %%I in (*.%1) do set /a count=count+1
параметр запуска  txt
 
поверхностное прогугливание предлагает перебирать все буквы для дисков

Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 00:03 21-09-2009 | Исправлено: bomzzz, 03:23 21-09-2009
Artem_Butenko



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
01MDM
 

Цитата:
Artem_Butenko
1:

Код:
 
@echo off
for %%i in (*.txt) do call:move "%%i"
goto:eof
 
:move
set /a folder+=1
md folder
move %1 folder
 

 

 
Пример прекрасный, только вот хотелось бы, что-бы каждый файл с расширением *.txt (а их в корневом каталоге может быть множество) перемещался в отдельную папку, тут же в корневом каталоге (где и находятся файлы). Каждой папке присваивается имя от 1 и до бесконечности (в зависимости от количества файлов). М.б., есть возможность присваивать папке имя перемещаемого в нее файла? Пожалуйста, помогите разобраться в этом, пока еще сложном для меня вопросе.
 
Kiev78
 

Цитата:
1. Не понятно, что за маска? Каков конкретно порядок перемещения?
2.  
FOR /r C:\test_folder\ %%a IN (*.*) DO (
md %%~na
move %%a %%~dpa%%~na\%%~nxa
)

 
Прошу меня извинить, но Ваш пример не работает, или я что-то делаю не так? В корневом каталоге создаются папки, а файлы в них не перемещаются. Притом, верно создаются папки по файлам, в именах которых нет пробелов. Пожалуйста, объясните, что я делаю не так?

Всего записей: 711 | Зарегистр. 19-02-2008 | Отправлено: 10:44 21-09-2009 | Исправлено: Artem_Butenko, 10:47 21-09-2009
01MDM



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Artem_Butenko

Код:
 
@echo off
for %%i in (C:\*.txt) do (
    md "C:\%%~ni"
    move "%%i" "C:\%%~ni"
)
 


Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 12:29 21-09-2009
Vijkayb

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Не могу найти в инете, подскажите, возможно ли при помощи батника, перелогинеться в XP,  то есть сначала выполнить выход первым пользователем, а потом  вход вторым, и как это осуществить?

Всего записей: 3 | Зарегистр. 21-09-2009 | Отправлено: 14:27 21-09-2009
   

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101

Компьютерный форум Ru.Board » Компьютеры » Программы » Командная строка, батники, сценарии (bat, cmd)
Widok (03-03-2010 16:29): Лимит страниц. Продолжаем здесь.


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru