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

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

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

Widok (10-03-2009 12:39): Лимит страниц. Продолжаем здесь.  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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 102 103 104 105 106 107 108

   

Widok



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

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

Всего записей: 24190 | Зарегистр. 07-04-2002 | Отправлено: 12:08 19-11-2007 | Исправлено: Dmitriy05, 22:49 13-04-2008
01MDM



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
XXXXL
В кавычках? Полный путь с пробелами.  

Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 20:45 22-03-2008
XXXXL



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Извиняюсь. Сделал так:

Код:
"%SYSTEMDRIVE%\Program Files\XnView\xnview.exe" -capture=window,d:\screenshot_$.jpg  
"%SYSTEMDRIVE%\Program Files\XnView\xnview.exe" -capture=desktop,d:\screenshot_###.jpg  

и попёрло СПАСИБО!
Только первая строка сняла весь рабочий стол с окном cmd посередине
А вторая только окно cmd
 
Возможно заставить снимать определённую область или хотя бы опрелелённое приложение?

Всего записей: 286 | Зарегистр. 16-05-2007 | Отправлено: 20:54 22-03-2008
igor_andreev

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

Цитата:
Только первая строка сняла весь рабочий стол с окном cmd посередине  
А вторая только окно cmd

Что естественно, программе сказали - она сделала

Цитата:
Возможно заставить снимать определённую область или хотя бы опрелелённое приложение?

У тебя задача то в чем состоит? От этого и пляши. Если тебе надо по хоткею делать снимок - то запускай не из cmd,  ярлык просто сделай на рабочем столе с этими параметрами и назначь хоткей. И командная строка, батники и сценарии здесь тогда ни при чем, вон их таких прог сколько, и заданную часть экрана могут снимать в т.ч. и сохранять в любой формат
http://www.snapfiles.com/Freeware/gmm/fwscreen.html
 
Если несколько снимков подряд в твое отсутствие - то комстроку запуска в планировщик без всякого cmd.exe

Всего записей: 1667 | Зарегистр. 08-12-2004 | Отправлено: 21:19 22-03-2008
01MDM



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
XXXXL
 
Возможно решение при помощи nircmd.
Отдельную область она снять не может, а с окном или со всем экраном вполне, вот пример для всего экрана:

Код:

nircmdc sendkey 1068 press
nircmdc clipboard saveimage screen.png
 

 

Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 22:47 22-03-2008 | Исправлено: 01MDM, 22:48 22-03-2008
XXXXL



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
01MDM,  
А пример с окном можно посмотреть.  

Всего записей: 286 | Зарегистр. 16-05-2007 | Отправлено: 23:21 22-03-2008
igor_andreev

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

Цитата:
А пример с окном можно посмотреть.  

Alt нажми Это же стандартные виндовые комбинации клавиш, PrintScreen и Alt+PrintScreen

Код:

cmdow @ /hid
nircmdc sendkey alt down
nircmdc sendkey 1068 press
nircmdc sendkey alt up
nircmdc clipboard saveimage screen.png

 

Всего записей: 1667 | Зарегистр. 08-12-2004 | Отправлено: 00:11 23-03-2008
XXXXL



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Спасибо, разобрался ребята.
01MDM,igor_andreev

Всего записей: 286 | Зарегистр. 16-05-2007 | Отправлено: 00:48 23-03-2008
igor_andreev

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

Цитата:
Отдельную область она снять не может,

А у меня получилось Используя косяк nircmdc. Ну может не косяк, не знаю, в предыдущем примере я использовал cmdow @ /hid, потому-что nircmdc скрывает свое окно, а потом при нажатии Alt-PrScr оказывается в буфере только часть экрана на месте спрятанной консоли. Cmdow.exe более глобально окно прячет.
Вот например так заснять кусок 500x500 в правом верхнем углу экрана

Код:

title +++
nircmdc win hide title "+++"
nircmdc win setsize title "+++" 0 0 500 500
nircmdc sendkey alt down
nircmdc sendkey 1068 press
nircmdc sendkey alt up
nircmdc clipboard saveimage screen.png
exit


Всего записей: 1667 | Зарегистр. 08-12-2004 | Отправлено: 00:49 23-03-2008
01MDM



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
igor_andreev
 
Пример интересный, т.к все делается "на лету". Наверное если nircmd сама прячет окно то она о нем помнит или его видит. Я думаю это скорее фича, чем косяк.
 
Так же можно воспользоваться nconvert, которую недавно обсуждали

Код:

nconvert -crop x y w h pic.jpg
:: x, y - координаты
:: w, h - длина и высота области
 


Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 09:14 23-03-2008
igor_andreev

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

Цитата:
Наверное если nircmd сама прячет окно то она о нем помнит или его видит. Я думаю это скорее фича, чем косяк.

Фича, похожая на баг Окно прячет, но оно остается активным(фокус не передается окну под ним) и Windows при нажатии Alt-PrScr снимает именно его, хоть и нет уже этого окна на экране.

Цитата:
Так же можно воспользоваться nconvert

Угу, всегда можно несколькими способами батник написать.
Цитата:
Вот например так заснять кусок 500x500 в правом верхнем углу экрана
Поправлюсь сам - в левом верхнем.
 

Всего записей: 1667 | Зарегистр. 08-12-2004 | Отправлено: 14:21 23-03-2008 | Исправлено: igor_andreev, 14:23 23-03-2008
XXXXL



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здравствуйте.
Есть такая строка:

Код:
call nircmdc.exe clipboard addfile "cl.txt"

 
содержимое буфера записывается в текст.
Проблема в том, что старая запись стирается и записывается новая. Нужно чтобы всё записи оставались и записывались с новой строки.
Зарание благодарен.

Всего записей: 286 | Зарегистр. 16-05-2007 | Отправлено: 13:55 24-03-2008
01MDM



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
XXXXL
 
У меня точно такая строка отработала правильно несколько раз подряд. И при одно- и  при много-строчном буфере.  

Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 14:30 24-03-2008 | Исправлено: 01MDM, 14:32 24-03-2008
XXXXL



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
01MDM, и в самом деле работает как нодо. Даже не знаю почему в первый раз txt документ перезаписывался.
Извиняюсь за беспокойствие.

Всего записей: 286 | Зарегистр. 16-05-2007 | Отправлено: 14:51 24-03-2008
gamebit73

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здравствуйте.  
1) Необходимо прочитать текстовый файл и сообщить, есть ли в нем знак "!". Знак "!" может встретиться в любой части файла.
2) Узнать размер папки и, если она превышает заданный размер, сообщить об этом. По этому вопросу нашел программу diruse, но она не очень удобная. Как раз она то и выводит превышение размера знаком "!".

Всего записей: 6 | Зарегистр. 08-02-2008 | Отправлено: 08:13 25-03-2008 | Исправлено: gamebit73, 08:16 25-03-2008
01MDM



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

Код:
 
@echo off
findstr "!" 1.txt 1>nul && echo "!" exist || echo "!" NOT exist
 

 
2. Отвечу позже

Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 08:44 25-03-2008
01MDM



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
gamebit73
diruse у меня нет, пользуюсь du.exe
 

Код:
 
@echo off
chcp 1251 >nul
setlocal
 
set folder="C:\Path"
 
:: Размер в байтах
set max=3333333333
 
set m=0000000000000000%max%
set size-%m:~-16%=1
 
for /f "tokens=2*" %%i in ('du -q %folder% ^| findstr "Size:"') do set cur=%%i %%j
 
:: Вместо пробела нулевой символ, зависит от  
:: HKEY_CURRENT_USER\Control Panel\International\\sThousand
:: Можно получить с помощью du folder >1.temp (скопировать из 1.temp)  
 
    set cur=%cur: =%
 
::
 
set s=%cur: =%  
set s=%s: =%
set s=%s:bytes=%
set s=0000000000000000%s%
set size-%s:~-16%=1
 
for /f "tokens=2 delims=-=" %%i in ('set size ^| sort') do (
    set check=%%i
    goto:result
)
 
:result
echo.
if %check% equ %s:~-16% echo %folder% is not greater %max% bytes
if %check% equ %m:~-16% echo !! %folder% is GREATER %max% bytes !!
chcp 866 >nul
 


Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 15:43 25-03-2008 | Исправлено: 01MDM, 15:45 25-03-2008
igor_andreev

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

Цитата:
2) Узнать размер папки и, если она превышает заданный размер, сообщить об этом. По этому вопросу нашел программу diruse, но она не очень удобная. Как раз она то и выводит превышение размера знаком "!".

А ты прочитай хэлп то к ней повнимательней, который diruse выводит на экран, будучи запущенной без параметров

Код:

/D      Displays only directories that exceed specified sizes.

и искать восклицательные знаки не надо. Или может у тебя diruse.exe совсем древняя, там нет такого? У меня вер. 1.20 1999 года

Всего записей: 1667 | Зарегистр. 08-12-2004 | Отправлено: 16:25 25-03-2008 | Исправлено: igor_andreev, 16:26 25-03-2008
Maza Faka



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
gamebit73
Либо воспользоваться vb-скриптом:

Код:

Dir = "C:\Temp" 'Путь к папке
Size = 1000000  'Размер в байтах
 
Set FSO = CreateObject("Scripting.FileSystemObject")
Set Folder = FSO.GetFolder(Dir)
If Folder.Size > Size Then MsgBox "Warning folder " & Dir & " size is critical!"


Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 17:29 25-03-2008
ffirefox

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Такая странная проблема:
есть cmd-файл:
 
chcp 1251 >nul
.... тут что-то делаем ...
 
Этот файл надо регулярно выполнять в планировщике (по schtasks).  
Но файл не выполняется, а останавливается на chcp и висит в назначенных заданиях в состоянии Running (запущен). Если в списке процессов прибить chcp, то коммандный файл продолжит выполняться дальше (причем кодовая страница будет переключена правильно).
При ручном запуске командного файла все работает нормально.  
 
Это только у меня на машине (Win2003)? И как проблему можно решить?

Всего записей: 46 | Зарегистр. 07-11-2006 | Отправлено: 02:43 27-03-2008
JekaRus

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
01MDM
Спасибо тебе огромное за твой труд!
Недавно ты писал батник для lid111 для удаления временных файлов.
http://forum.ru-board.com/topic.cgi?forum=5&topic=25393&start=340#5
Я его немного переделал чтоб он удалял файлы с системными и др атрибутами

Код:

elete
attrib -r -s -h *.* 1>nul 2>&1
del /q /a /f *.* 1>nul 2>&1
for /f "tokens=*" %%i in ('dir /b /ad') do rd /s /q "%%i" 1>nul 2>&1

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

Код:

elete
XCACLS *.* /T /C /G administrators:O /Y
attrib -r -s -h *.* 1>nul 2>&1
del /q /a /f *.* 1>nul 2>&1
for /f "tokens=*" %%i in ('dir /b /ad') do rd /s /q "%%i" 1>nul 2>&1

Так почему то владелец не заменяется. Я уже столько софтин перепробовал для замены владельца и subinacl и setacl ничего не помогает. Как добавить сброс владельца?
 
И еще хотелось чтобы в системной папке удалялись файлы от установленных заплаток типа $NtUninstallKB835732$, где после КВ может быть любой номер. Как это циклом организовать?

Всего записей: 1023 | Зарегистр. 10-08-2005 | Отправлено: 04:56 27-03-2008 | Исправлено: JekaRus, 04:58 27-03-2008
   

Страницы: 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 102 103 104 105 106 107 108

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


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

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.Board
© Ru.Board 2000-2020

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru