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

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

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
magazinus
Так навскидку findstr /g:1.txt /l /v 2.txt выведет на экран строки из файла 2.txt, которых нет в файле 1.txt. Строки должны быть короче кажется 130 символов, а то findsr молча не будет сравнивать.

Всего записей: 1705 | Зарегистр. 08-12-2004 | Отправлено: 13:48 07-04-2008
magazinus



Tracker Mod
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
igor_andreev
Строки длиннее 130 симв. 200-300 симв.

Всего записей: 1364 | Зарегистр. 14-01-2007 | Отправлено: 14:15 07-04-2008
Fraerok



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

Цитата:
есть файл uninstall.log и в нем среди прочих есть строки:  
 
Цитата:File: C:\Documents and Settings\All Users.WINDOWS\Главное меню\Программы\Mozilla Sunbird\Mozilla Sunbird.lnk  
File: C:\Documents and Settings\All Users.WINDOWS\Главное меню\Программы\Mozilla Sunbird\Mozilla Sunbird (Безопасный режим).lnk  
File: C:\Documents and Settings\scar\Application Data\Microsoft\Internet Explorer\Quick Launch\Mozilla Sunbird.lnk  
File: C:\Documents and Settings\All Users.WINDOWS\Рабочий стол\Mozilla Sunbird.lnk  
 
как бы мне изменить их на:  
 
Цитата:File: C:\Documents and Settings\All Users.WINDOWS\Главное меню\Программы\Sunbird.lnk  
File: C:\Documents and Settings\All Users.WINDOWS\Рабочий стол\Программы\Sunbird.lnk  
 
Т.е. 2 строки удалить (про безопасный режим и Quicklaunch), а в двух оставшихся изменить немного содержание


Всего записей: 1727 | Зарегистр. 11-05-2006 | Отправлено: 14:18 07-04-2008
igor_andreev

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

Код:

@echo off
chcp 1251
 
for /f "tokens=*" %%a in (uninstall.log) do call :change_path "%%a"
type uninstall.bak | find /v "\Quick Launch\" | find /v "(Безопасный режим).lnk">uninstall.log
goto :eof
 
:change_path
set "line=%~1"
set "line=%line:\Рабочий стол\Mozilla Sunbird.lnk=\Рабочий стол\Программы\Sunbird.lnk%"
set "line=%line:\Программы\Mozilla Sunbird\Mozilla Sunbird.lnk=\Программы\Sunbird.lnk%"
echo %line%>>uninstall.bak
set "line="

Смотреть правда надо на остальные строчки в uninstall.log, чтоб лишнего не удалить.
 
 
Добавлено:
magazinus
Сравнить файлы 1.txt и 2.txt, если различаются, записать совпадающие строки в обеих файлах в new-1.txt и new-2.txt

Код:

@echo off
 
fc /l 1.txt 2.txt
if not errorlevel 1 exit /b
 
for /f "tokens=*" %%a in (2.txt) do (
  find "%%a" 1.txt && echo %%a>>new-2.txt
)
 
for /f "tokens=*" %%a in (1.txt) do (
  find "%%a" 2.txt && echo %%a>>new-1.txt
)

Кажется так

Всего записей: 1705 | Зарегистр. 08-12-2004 | Отправлено: 15:10 07-04-2008
Rush

Уже за тридцать...
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
magazinus
Если тебя не устроит предыдущее решение (может медленно или еще чего), я тут набросал на vbscript:

Код:
if wscript.arguments.count = 2 then
   fname = wscript.arguments.item(0)
   fname2 = wscript.arguments.item(1)
   dim newcounts, txtarr3()
   set fso = createobject("scripting.filesystemobject")
   set one = fso.opentextfile(fname, 1):txt = one.readall:one.close
   set two = fso.opentextfile(fname2, 1):txt2 = two.readall:two.close
   if txt <> txt2 then
      txtarr = split(txt, vbcrlf):txtarr2 = split(txt2, vbcrlf)
      count = ubound(txtarr):count2 = ubound(txtarr2)
      if count > count2 then counts = count2 else counts = count
      redim txtarr3(counts)
      for i=0 to counts
         if txtarr(i) = txtarr2(i) then        
            txtarr3(newcounts) = txtarr(i)
            newcounts = newcounts + 1
         end if
      next
      redim preserve txtarr3(newcounts-1)
      txt = join(txtarr3, vbcrlf)
      set one = fso.opentextfile(fname, 2):one.write txt:one.close    
      set two = fso.opentextfile(fname2, 2):two.write txt:two.close
   end if
end if
wscript.quit

Запускается из комстроки
Код:
wscript.exe "compare.vbs" "file1.txt" "file2.txt" //B

Всего записей: 3551 | Зарегистр. 20-11-2003 | Отправлено: 15:39 07-04-2008
igor_andreev

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

Цитата:
Если тебя не устроит предыдущее решение (может медленно или еще чего),  

или еще чего Эт я как пример привел, для простейших строк сработает. Батник он и есть батник, будет спотыкаться на строчках со спецсимволами <>" ...

Всего записей: 1705 | Зарегистр. 08-12-2004 | Отправлено: 16:08 07-04-2008
magazinus



Tracker Mod
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
igor_andreev
Спасибо, работает отлично, но правда при кол-ве строк > 300 - довольно медленно.
 
Rush
По-моему не совсем верно работает. Ищет первое различие и пишет на выход все совпадения до первого различия, остальное вырезает вообще. Вот, например..

Всего записей: 1364 | Зарегистр. 14-01-2007 | Отправлено: 16:39 07-04-2008
Rush

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

Так ведь я просто сделал сравнение строк один в один, а не рекурсивно. Они ведь у тебя не совпадают дальше 6 строки. Я так и думал, что тебе на полное соответствие надо.
Тебе расположение неважно, лишь бы одинаковые по содержанию были?

Всего записей: 3551 | Зарегистр. 20-11-2003 | Отправлено: 17:10 07-04-2008
magazinus



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

Цитата:
Тебе расположение неважно, лишь бы одинаковые по содержанию были?

Ага. Без различающихся строк...

Всего записей: 1364 | Зарегистр. 14-01-2007 | Отправлено: 17:11 07-04-2008
crackcrack



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Как у bat поменять ярлычок (иконку)?

----------
Ты навсегда в ответе за всех, кого приручил©Лис
Бойтесь равнодушных. Именно с их согласия совершаются все преступления©Ясенский

Всего записей: 3964 | Зарегистр. 20-04-2006 | Отправлено: 17:16 07-04-2008
gryu



дикий гусь
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
crackcrack
как и у всех.  
У ярлыка  через свойства.  
У самого файла - никак. (можно, но это нужно лезть в "ассоциации" ОС и это будет верно только для данной машины)

Всего записей: 13035 | Зарегистр. 15-03-2006 | Отправлено: 17:32 07-04-2008
igor_andreev

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

Цитата:
Ага. Без различающихся строк...

Тогда легче

Код:

copy /b 1.txt+2.txt 3.txt
type 3.txt | sort | uniq -d >4.txt

4.txt будет состоять из строк, которые есть и в 1.txt и в 2.txt  
uniq.exe тут http://sourceforge.net/projects/unxutils
 
 

Всего записей: 1705 | Зарегистр. 08-12-2004 | Отправлено: 18:04 07-04-2008
crackcrack



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

Цитата:
можно, но это нужно лезть в "ассоциации" ОС и это будет верно только для данной машины)

если можно в двух словах или ссылку
 
 
Добавлено:
и я правильно понимаю, что для всех bat файлов будет другая иконка, но одинаковая

----------
Ты навсегда в ответе за всех, кого приручил©Лис
Бойтесь равнодушных. Именно с их согласия совершаются все преступления©Ясенский

Всего записей: 3964 | Зарегистр. 20-04-2006 | Отправлено: 18:15 07-04-2008
Rush

Уже за тридцать...
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ну тогда так:

Код:
if wscript.arguments.count = 2 then
   fname = wscript.arguments.item(0):fname2 = wscript.arguments.item(1)
   dim newcounts, txtarr3()
   set fso = createobject("scripting.filesystemobject")
   set one = fso.opentextfile(fname, 1):txt = one.readall:one.close
   set two = fso.opentextfile(fname2, 1):txt2 = two.readall:two.close  
   if txt <> txt2 then
      txttmp = vbcrlf & txt2 & vbcrlf:txtarr = split(txt, vbcrlf)
      redim txtarr3(ubound(txtarr))
      for i=0 to ubound(txtarr)
         if instr(1, txttmp, vbcrlf & txtarr(i) & vbcrlf, 1) > 0 then  
            txtarr3(newcounts) = txtarr(i):newcounts = newcounts + 1          
         end if
      next
      redim preserve txtarr3(newcounts-1)
      txt = join(txtarr3, vbcrlf)
      set one = fso.opentextfile(fname & "_", 2, true):one.write txt:one.close
      newcounts = 0
      txttmp = vbcrlf & txt & vbcrlf:txtarr = split(txt2, vbcrlf)
      redim txtarr3(ubound(txtarr))
      for i=0 to ubound(txtarr)
         if instr(1, txttmp, vbcrlf & txtarr(i) & vbcrlf, 1) > 0 then  
            txtarr3(newcounts) = txtarr(i):newcounts = newcounts + 1          
         end if
      next
      redim preserve txtarr3(newcounts-1)
      txt = join(txtarr3, vbcrlf)
      set one = fso.opentextfile(fname2 & "_", 2, true):one.write txt:one.close
   end if
end if
wscript.quit

Всего записей: 3551 | Зарегистр. 20-11-2003 | Отправлено: 18:58 07-04-2008
magazinus



Tracker Mod
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
igor_andreev
Rush
Большое спасибо!

Всего записей: 1364 | Зарегистр. 14-01-2007 | Отправлено: 20:06 07-04-2008
Fraerok



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

Цитата:
@echo off  
chcp 1251  
 
for /f "tokens=*" %%a in (uninstall.log) do call :change_path "%%a"  
type uninstall.bak | find /v "\Quick Launch\" | find /v "(Безопасный режим).lnk">uninstall.log  
goto :eof  
 
:change_path  
set "line=%~1"  
set "line=%line:\Рабочий стол\Mozilla Sunbird.lnk=\Рабочий стол\Программы\Sunbird.lnk%"  
set "line=%line:\Программы\Mozilla Sunbird\Mozilla Sunbird.lnk=\Программы\Sunbird.lnk%"  
echo %line%>>uninstall.bak  
set "line="

скрипт работает, но только, если батник в той же папке находится. Как исправить? Дописывал к uninstall.??? приставку "%PROGRAMFILES%\Mozilla Sunbird\uninstall\uninstall.???" - не работает из другой директории =(

Всего записей: 1727 | Зарегистр. 11-05-2006 | Отправлено: 23:07 07-04-2008
01MDM



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

Код:
 
@echo off  
chcp 1251  
pushd "%PROGRAMFILES%\Mozilla Sunbird\uninstall"  
for /f "tokens=*" %%a in (uninstall.log) do call :change_path "%%a"  
type uninstall.bak | find /v "\Quick Launch\" | find /v "(Безопасный режим).lnk">uninstall.log
popd  
goto :eof  
 
:change_path  
set "line=%~1"  
set "line=%line:\Рабочий стол\Mozilla Sunbird.lnk=\Рабочий стол\Программы\Sunbird.lnk%"  
set "line=%line:\Программы\Mozilla Sunbird\Mozilla Sunbird.lnk=\Программы\Sunbird.lnk%"  
echo %line%>>uninstall.bak  
set "line="
 


Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 23:36 07-04-2008
FishError

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
А можно сделать вывод результатов двух команд в одну строку в файле?  
time /t >> log.txt
date /t >> log.txt
Выводит в две строки, а желательно так: 12:15 - 12.12.2008

Всего записей: 1 | Зарегистр. 08-04-2008 | Отправлено: 09:52 08-04-2008
igor_andreev

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
FishError
echo %time:~0,8% %date% >> log.txt
 
 
Добавлено:
тьфу, вернее  %time:~0,5%

Всего записей: 1705 | Зарегистр. 08-12-2004 | Отправлено: 10:14 08-04-2008
Kilich



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

Цитата:
Ребята!  
А никто часом не знает, как в батнике написать нечто - чтобы можно было указать время отключение дисплея или не отключать никогда(как это можно сделать в свойствах заставки-питание)  
Очень нужно...

 
Ребята!!
Знатоки ну откликнитесь!!!
 
Добавлено:

Цитата:
Ребята!  
А никто часом не знает, как в батнике написать нечто - чтобы можно было указать время отключение дисплея или не отключать никогда(как это можно сделать в свойствах заставки-питание)  
Очень нужно...  
 
 
 
Ребята!!  
Знатоки ну откликнитесь!!!

 
разобрался самостоятельно!!!
 
 
@echo off  
powercfg /create BCCR  
powercfg /change BCCR /monitor-timeout-dc 5  
powercfg /change BCCR /monitor-timeout-ac 20  
powercfg /change BCCR /disk-timeout-dc 0  
powercfg /change BCCR /disk-timeout-ac 0  
powercfg /change BCCR /standby-timeout-dc 0  
powercfg /change BCCR /standby-timeout-ac 0  
powercfg /change BCCR /hibernate-timeout-dc 0  
powercfg /change BCCR /hibernate-timeout-ac 0  
powercfg /setactive BCCR  
@echo BCCR Power Settings Configured....  
 
>"\\Server1\Migration\%ComputerName%\powersettings.flg"  

Всего записей: 267 | Зарегистр. 18-09-2006 | Отправлено: 11:05 08-04-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.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru