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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
raystlin

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ребята спасайте....
 
уже 5 часов утра - 4-е сутки бьюсь.
 
суть:
 
в папке есть файлы различного размера,
 
например:
 
C:\Catalog\bigfile.wav
C:\Cataog\smallfile.mp3
 
как написать bat-ник, который будет делать это:
 
- создаст в указанном месте текстовый файл с полными путями и именами из этой папки
- в текстовом файле имена должны быть отсортированы по _размеру_, т.е. сначала большой, потом поменьше и т.д. Хотя, хватит если первым будет самый большой.
- можно было бы вызывать как процедуру, т.е. call getdir.bat D:\my music\
 
пока кроме как dir /o-s /b > dirlist.txt меня больше ни на что не хватило. =((((
 
Спасибо заранее...

Всего записей: 50 | Зарегистр. 07-11-2003 | Отправлено: 04:47 17-09-2009 | Исправлено: raystlin, 04:52 17-09-2009
bomzzz



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
что ж так скромно.  
я еще бы так попробовал поколдавать  
FOR /F "DELIMS=* SKIP=7" %%I IN ('DIR') DO ECHO %%I>>MYLIST.TXT
поймать бы того барана который справку к винде написал  
DIR /a:-d /o:-s > MyDir.txt вот и все
FOR /F "DELIMS=* SKIP=5" %%I IN ('DIR /a:-d /o:-s') DO ECHO %%I>>MYLIST.TXT вот так покруче
тебе же с путем надо не могу понять как с путей сделать
FOR /F "DELIMS=* SKIP=5" %%I IN ('DIR /a:-d /o:-s') DO ECHO %%~fI>>MYLIST.TXT  
FOR /F "eol=  DELIMS=* SKIP=5" %%I IN ('DIR /a:-d /o:-s') DO ECHO %%I>>MYLIST.TXT  так сильнее
FOR /F "eol=  tokens=3,4 SKIP=5" %%I IN ('DIR /a:-d /o:-s') DO ECHO %%I %%J>>MYLIST.TXT
FOR /F "eol=  tokens=3,4 SKIP=5" %%I IN ('DIR /a:-d /o:-s') DO ECHO %%I %%~fJ>>MYLIST.TXT
пришлось пожертвовать нижними двумя строчками. ну их можно отрезать при желании. не вижу простого решения. можно переписать два раза файл выкинув по нижней строчке
вот зараза - чеж он так не хочет нижние строчки выкидывать
тебе же еще надо чтоб в батник путь параметром передавался - вот так тогда
CD /D %~DP1
FOR /F "eol=  tokens=3,4 SKIP=5" %%I IN ('DIR %1 /a:-d /o:-s') DO ECHO %%I %%~fJ>>C:\MYPATH\MYLIST.TXT
ну раз он нижние не выкидывает строчки то так
CD /D %~DP1
FOR /F "tokens=3,4 SKIP=5" %%I IN ('DIR %1 /a:-d /o:-s') DO ECHO %%I %%~fJ>>C:\MYPATH\MYLIST.TXT
вот так выкинул но тут думать надо может файлы есть с названием байт

Цитата:
 
ECHO OFF
COLOR 9F
CLS
CD /D %~DP1
FOR /F "tokens=3,4 SKIP=5" %%I IN ('DIR %1 /a:-d /o:-s') DO (
IF %%J NEQ Ў ©в ECHO %%I %%~fJ>>c:\MyPath\MyList.txt)
 

кстати из за кодировки этот текст отсюда не скопировать. надо сделать список с двумя нижними строчками и скопировать из этого списка эти четыре символа Ў ©в (слово байт в досовской кодировке) и вставить в батник. если прямо с формуа скопировать не будет работать.
 
Dos-Win Converter Alone Wolf
D-W.Conv.zip
вот у меня еще в бейсике такая штука валялась
CYRILL.EXE
@echo off
cyrill
list.bat
если таким батником запустить сначала файл а потом батник, то список получится в нормальной кодировке но имена будут не виндовские а досовские. еще читал как винду патчат, сам не делал.
 
кстати если тебе сами размеры не нужны тогда вот так
CD /D %~DP1
FOR /F "tokens=4 SKIP=5" %%I IN ('DIR %1 /a:-d /o:-s') DO (
IF %%I NEQ Ў ©в ECHO %%~fI >>c:\MyPath\MyList.txt)

Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 05:25 17-09-2009 | Исправлено: bomzzz, 08:54 17-09-2009
01MDM



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

Код:
 
@echo off
setlocal
pushd C:\Catalog
for /f "tokens=*" %%i in ('dir /b /a-d /o:s') do call:set "%%i"
popd
 
for /f "tokens=2 delims==" %%i in ('set file_ ^| sort /r') do echo %%i 1>>1.txt
goto:eof
 
:set
set "size=000000000000000%~z1"
set "size=%size:~-16%"
set "file_%size%_%~s1=%~f1"
 


Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 08:55 17-09-2009
bomzzz



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
гыгы. точно нижние строчки можно /b выкинуть было и верхние
echo off
CD /D %~DP1  
DIR %1 /b /a:-d /o:-s >c:\MyList.txt  
и всё

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



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
bomzzz
Действительно "гыгы". Совсем забыл об обратной сортировке в dir'е. Но для того что бы получить полный путь все равно надо поместить в "for"

Код:
 
@echo off
cd /d "%~dp1"  
for /f "tokens=*" %%i in ('dir /b /a:-d /o:-s') do echo %%~fi 1>>c:\list.txt  
 


Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 17:39 17-09-2009 | Исправлено: 01MDM, 17:40 17-09-2009
bomzzz



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
 
точна опять про путь забыл - мне все хотелось с етим фором разобраться и я прогу юзаю FileList, хотелось улучшить
 
кстати в верхнем посте все строки рабочие и они помогут может быть кому то разобраться как работает FOR

Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 18:05 17-09-2009 | Исправлено: bomzzz, 19:37 17-09-2009
raystlin

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
01MDM
Спасибо всем огромное. Скрипт работает замечательно.
 
Насчет кодировки - есть замечательная утилита fdoswin.exe, ей и сковертирую.
 
Только вот незадача - подкаталоги вместе с файлами в файл filelist.txt не попадают. =(
 
Получается не так уж скромно...;)

Всего записей: 50 | Зарегистр. 07-11-2003 | Отправлено: 20:23 17-09-2009
01MDM



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

Цитата:
Только вот незадача - подкаталоги вместе с файлами в файл filelist.txt не попадают. =(  


Цитата:
Насчет кодировки - есть замечательная утилита fdoswin.exe, ей и сковертирую.  

Резюме:

Код:
 
@echo off
chcp 1251 1>nul
 
cd /d "%~dp1"  
for /f "tokens=*" %%i in ('dir /b /a:-d /o:-s /s') do echo %%~fi 1>>c:\list.txt  
 

 

Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 20:37 17-09-2009
bomzzz



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
спасибо - больше часа утром искал что нибудь консольное. кстати алгоритм перекодировки совсем простой.  
блин почему все конвертеры µ в ч переводят

Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 20:45 17-09-2009 | Исправлено: bomzzz, 20:55 17-09-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, но дальше мозга не хватает.

Всего записей: 530 | Зарегистр. 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 файл и запускать его. Правда это не идеальный вариант.

Всего записей: 530 | Зарегистр. 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
   

Страницы: 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.Board
© Ru.Board 2000-2020

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru