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

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

Модерирует : KLASS, IFkO

vu1tur (04-09-2010 17:46): http://forum.ru-board.com/topic.cgi?forum=62&topic=21297  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199

   

vu1tur



Moderator-Saaber
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Задачи на bat-файлах 8
(часть 1, часть 2, часть 3, часть 4, часть 5, часть 6, часть 7)
Вопросы, задачи и их решения по работе с командными файлами, а также сопутствующие ссылки.

 
Важно: копируя батник через буфер обмена из форума не забывайте удалять пробелы в конце каждой строки, т.к. в некоторых случаях из-за этого программа будет работать неправильно!!!
 
Также для удаления концевых пробелов пользуйтесь скриптом от Nagual, или VBS-Скрипт-Модулем от ViSiToR.
 
Для перекодирования кирилицы 866<<>>1251 пользуйтесь онлайн сервисом Перекодировщик кириллицы

 
Дополняем шапку: добавляем готовые решения, полезные ссылки.
 
Примечание: Большие куски кода заключайте в тэг [more]  
 
Смежные темы:
В помощь системному администратору » Автоматизация администрирования
Программы » Командная строка, батники\сценарии
 
Полезные ссылки
 
Полезные утилиты
 
Готовые решения и частые вопросы:
  • Встроенный справочник по командам
  • Создание помощи по всем командам консоли 2000 и XP
  • Делаем паузу в командном файле стандартными средствами Windows
  • Альтернативные решения »
  • Работа с текстом, датой, и файлами »
  • Администрирование, автоматизация и сеть »
  • Работа с переменными и параметрами ком. строки »
     
    Описания работы команд и символов участниками темы:
    · setlocal enabledelayedexpansion и переменные окружения
    · символы & и && в командной строке
    · Переменная %0

  • Всего записей: 3690 | Зарегистр. 01-02-2003 | Отправлено: 12:40 25-01-2010 | Исправлено: bomzzz, 13:37 20-08-2010
    Joo1z



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

    Код:
    sed -e "N;N;N;N;s/\n/ /g"

    То что надо! Спасибо.

    Всего записей: 123 | Зарегистр. 17-02-2009 | Отправлено: 09:35 12-05-2010
    PVS17

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Скромный вопрос: из общей папки нужно переместить группу файлов с нужными именами, остальные файлы в папке остаются.
    Не знаю, как сделать. Пробовал с командой Move - она принимает группу файлов только по маске, перечислять конкретные имена не выходит у меня. Могу пока перемещать каждый файл по отдельности, записывая для каждого отдельную строку с Move, но файлов довольно много, выходит весьма громоздко.
    Если не трудно - подскажите, как проще сделать.
    Спасибо.

    Всего записей: 2 | Зарегистр. 12-05-2010 | Отправлено: 14:00 12-05-2010
    BagaBaga

    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Как сделать вывод файлов в текущей директории, размером 0 байт (т.е. пустых файлов)

    Всего записей: 463 | Зарегистр. 14-11-2005 | Отправлено: 16:20 12-05-2010
    Rush

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

    Код:
    @echo off
    for /f "tokens=*" %%A in ('dir /a-d /b') do if %%~zA==0 echo %%A
    pause

    Всего записей: 3551 | Зарегистр. 20-11-2003 | Отправлено: 17:40 12-05-2010
    wolf0425



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

    Цитата:
    Как сделать вывод файлов
    в смысле их имена напечатать?

    Код:
    for %%a in (*) do if %%~za equ 0 echo.%%~a
     
     
     
    Добавлено:
    PVS17
    Цитата:
    Не знаю, как сделать. Пробовал с командой Move - она принимает группу файлов только по маске, перечислять конкретные имена не выходит у меня.

    ну список файлов то тебе всё равно где-то писать, а вот на командах можешь поэкономить.
     

    Код:
    for %%a in (file1 file2 file3 skolko.nado) do move /y %%a c:\dest

    Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 17:57 12-05-2010
    PVS17

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    wolf0425
     
    Спасибо! Через For оказывается.

    Всего записей: 2 | Зарегистр. 12-05-2010 | Отправлено: 19:47 12-05-2010
    Unitaz



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    в модифицированной Xp использую свой собственный shell.exe можно ли его заменить из батника , пусть даже с перезагрузкой ?

    Всего записей: 2300 | Зарегистр. 28-06-2002 | Отправлено: 10:57 13-05-2010
    Mark_Titov



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ...Извиняюсь за офтоп, но у меня вопрос - кто сдесь в скриптах разбирается?
    Очень нужно, я запостил в топике по скриптам, но все молчат, может кто разбирается и поможет?
    http://forum.ru-board.com/topic.cgi?forum=33&topic=1491&start=1600#2
    Плиззз...
    Спасибо...
     
     
    Ps.
     
    Не понимаю почему этот код нормально не работает -
     

    Код:
    @echo off
    @echo -----------------------------------------------------------
    @echo Date %date:~0,2%-%date:~3,2%-%date:~6,4% Time %time%
    @echo -----------------------------------------------------------
    title Kill process
    tasklist | find "opera" && goto :kill
     
    :kill
    :w
    echo.
    echo.
    echo.
    set /p u=Input kill name process:  
    tasklist /fi "imagename eq %u%*"  
    taskkill /fi "imagename eq %u%*"  
    echo.  
    goto w

     
    ...запущенно 2 оперы и через раз а то и на 3-тий запуск находит одну, а не 2 оперы. Почему?
    И как сделать что бы все найденные по фильтру процессы нумеровались, и прибивались не по названию, а по присвоенному процессу номеру?

    Всего записей: 387 | Зарегистр. 12-04-2010 | Отправлено: 16:02 13-05-2010 | Исправлено: Mark_Titov, 21:51 13-05-2010
    us0r



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Mark_Titov
    Есть такая вещь- findstr
     
    Добавлено:
    artem1982

    Код:
    @echo off
    cls
    setlocal
    set mybfbc2ini="disk:\path2game\myinisettings"
    set bfbc2ini="disk:\path2game\path2ini"
    cd /D%mybfbc2ini%
    copy /y *.* %bfbc2ini%
    endlocal

    Всего записей: 407 | Зарегистр. 06-12-2007 | Отправлено: 23:04 13-05-2010 | Исправлено: us0r, 00:29 14-05-2010
    wolf0425



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Mark_Titov
    Цитата:
    ...запущенно 2 оперы и через раз а то и на 3-тий запуск находит одну, а не 2 оперы. Почему?  
    если находит одну оперу - значит одна и запущенна, а что ты видишь более одного окна оперы - так количество окон с количеством запущенных процессов не связано, с одного процесса можно и десяток окон иметь.

    Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 01:11 14-05-2010 | Исправлено: wolf0425, 01:12 14-05-2010
    Mark_Titov



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

    Всего записей: 387 | Зарегистр. 12-04-2010 | Отправлено: 08:07 14-05-2010
    Joo1z



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Mark_Titov
    У любого процесса есть PID, по нему и грохай. Taskkill /PID 1234 Можешь до кучи прибивать все дочерние процессы Taskkill /PID 1234 /T
     
    А на чет скриптов - забей. Есть куча прог для инвентаризации. Сам в свое время писал скрипты, а затем понял, что велосипед изобрели задолго до меня. В PoSH, правда я свой периодически юзаю ввиду его краткости и наглядности для меня.
    Из простых решений было:
    Код:
     for /f %a in('net view ^| findstr \\') do psexec %a \\PC\SHARE\astra32.exe /RJP \\PC\SHRE\REPORTS\$HOSTNAME$.TXT

    Потом тупо SED'ом выцеплял нужные данные.

    Всего записей: 123 | Зарегистр. 17-02-2009 | Отправлено: 11:05 14-05-2010
    stydent62

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    надо скопировать файл cons*.usr из папки 1 в папку 2 и добавить в имя файла текущую дату.
    в папке 1 лежит вот такой файл cons#1_313427.usr
    дата сегодняшняя 14.05.2010г.
    использую вот такой код
    set CURDATE=%DATE%
    copy d:\1\cons*.usr g:\2\%CURDATE:~8,2%%CURDATE:~3,2%%CURDATE:~0,2%_*
    в результате  получается файл в папке 2  именем 100514_313427.USR
    а надо чтобы имя файла было вот таким: 100514_cons#1_313427.usr или еще лучше cons#1_313427_051410.usr
    помогите пожалуйста реализовать

    Всего записей: 25 | Зарегистр. 02-05-2007 | Отправлено: 15:28 14-05-2010
    wolf0425



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

    Код:
    for %%a in ( d:\1\cons*.usr ) do 1>nul copy "%%~fa" "g:\2\%DATE:~8,2%%DATE:~3,2%%DATE:~0,2%_%%~nxa"

     
    Добавлено:
    Mark_Titov, btw, в коде  

    Код:
    tasklist | find "opera" && goto :kill
     
    :kill  
    наблюдается нарушение четности количества goto  - или одного не хватает или один лишний

    Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 15:57 14-05-2010 | Исправлено: wolf0425, 15:57 14-05-2010
    stydent62

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    если путь к файлу cons#.usr длиннее чем d:\1\, скажем d:\consultant\receive\cons*.usr то батник не работает
    как в вот в этой чати кода вообще не писать путь начиная с диска   (d:\1\cons*.usr)  можно просто \receive\cons*.usr   а сам батник запускается из папки d:\consultant

    Всего записей: 25 | Зарегистр. 02-05-2007 | Отправлено: 16:41 14-05-2010
    us0r



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Mark_Titov
    Получай список tasklist- ом, фильтруй пару процесс/PID и передавай параметром в taskkill)

    Всего записей: 407 | Зарегистр. 06-12-2007 | Отправлено: 16:47 14-05-2010
    Mark_Titov



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

    Цитата:
    Mark_Titov  
    У любого процесса есть PID, по нему и грохай. Taskkill /PID 1234 Можешь до кучи прибивать все дочерние процессы Taskkill /PID 1234 /T

    ...Нет, цель именно присваивать номер каждому найденному процессу и введя этот номер процесс убивается...
     
    Спасибо за ответ Joo1z...

    Всего записей: 387 | Зарегистр. 12-04-2010 | Отправлено: 16:57 14-05-2010
    Free_Soft



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

    Код:
    set par1=%~1
    set par2=%~2
    if "%par1%" == "" goto:1
    set par1=%par1:/=%
    set par1=%par1:-=%
    set par2=%par2:/=%
    set par2=%par2:-=%
    if /i "%par2%" == "s" goto:2
    :input
    if /i "%par1%" == "act" goto:0
    if /i "%par1%" == "qt" goto:3
    if /i "%par1%" == "tt" goto:4
    if /i "%par1%" == "us" goto:5
    if /i "%par1%" == "is" goto:6
    if /i "%par1%" == "srv" goto:7
    if /i "%par1%" == "?" help.txt

     
    Как определить неправильно введенную команду? Выражение
     

    Код:
    if not defined par1 goto:err

    почему-то не срабатывает

    Всего записей: 1536 | Зарегистр. 19-04-2010 | Отправлено: 22:58 14-05-2010 | Исправлено: Free_Soft, 22:59 14-05-2010
    METAJIJI

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

    Цитата:
    Вот незадача... Как добавить к файлу "лишние" строки понятно... А вот как их удалить?
     
     
    Код:
     
    [_start_]
    jkg=455
    qwe=asd
     
    [_vars_]
    var=123
    zxc=567
     
    как обработать этот файл таким образом, чтобы получилось так:
     
    Код:
     
    [_start_]
    jkg=455
    qwe=asd
     

     
    Отвечу сам:

    Код:
    CALL :DELLINE "file.ini" "[_vars_]"
    CALL :DELLINE "file.ini" "var=123"
    CALL :DELLINE "file.ini" "zxc=567"
     
    :DELLINE
    IF NOT EXIST "%~1" EXIT /B 1
    IF EXIST "%~dpn1.tmp" DEL /F/Q "%~dpn1.tmp"
     
    SET $N=0 & FOR /F "Delims=:" %%i IN ('FINDSTR /INRC:"^%~2$" "%~1"') DO SET $N=%%i
    IF %$N% NEQ 0 FOR /F "Tokens=1* Delims=:" %%i IN ('FINDSTR /ENRC:"$" "%~1"') DO IF "%%i" NEQ "%$N%" (
    1>>"%~dpn1.tmp" ECHO.%%j)

    Важно одно, формат строки должен быть Windows(\r\n), в противном случае скрипт не сработает :(
     
    Free_Soft

    Цитата:
    Код:
    if not defined par1 goto:err
     
    почему-то не срабатывает

     
    Попробуйте так

    Код:
    IF NOT EXIST "par1" goto:err

    Всего записей: 27 | Зарегистр. 11-03-2010 | Отправлено: 00:39 15-05-2010 | Исправлено: METAJIJI, 00:42 15-05-2010
    Joo1z



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

    Цитата:
    цель именно присваивать номер каждому найденному процессу и введя этот номер процесс убивается


    Код:
    @echo off
    set /a cnt=0
    for /f "tokens=1,3 delims=: " %%a in ('tasklist ^| findstr opera.exe ^| findstr /n opera.exe') do echo %%a    %%b
    echo Enter number of prosess:
    set /p kill=
    for /f "tokens=1,3 delims=: " %%e in ('tasklist ^| findstr opera.exe ^| findstr /n opera.exe') do if %%e==%kill% echo taskkill /PID %%f

    Есть тут небольшой минус. Если за время между первым tasklist и вводом номера процесса произошло изменение их количества, то прибиться может не тот экземпляр процесса.
     
    Можно попробовать такой вариант. Кривовато как-то, без изящества, но вроде работает.

    Код:
    @echo off
    setlocal enabledelayedexpansion
    set /a cnt=-1
    ser pr=
    for /f "tokens=1,3 delims=: " %%a in ('tasklist ^| findstr opera.exe ^| findstr /n opera.exe') do echo %%a    %%b & set pr=!pr!,%%b
    set pr=!pr:~1!
    echo Enter number of prosess:
    set /p kill=
    for /d %%t in (!pr!) do set /a cnt+=1 & if !cnt!==%kill% echo taskkill /pid %%t

    Всего записей: 123 | Зарегистр. 17-02-2009 | Отправлено: 00:56 15-05-2010 | Исправлено: Joo1z, 01:36 15-05-2010
       

    Страницы: 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 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199

    Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах 8
    vu1tur (04-09-2010 17:46): http://forum.ru-board.com/topic.cgi?forum=62&topic=21297


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru