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

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

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

vu1tur (11-09-2007 15:22): продолжаем в теме Задачи на bat-файлах 4  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

   

vu1tur



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

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

  • Всего записей: 3690 | Зарегистр. 01-02-2003 | Отправлено: 11:54 27-04-2007 | Исправлено: Elroir, 03:59 10-09-2007
    0Vovan0



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

    Цитата:
    for /f "delims=" %%a in ('dir /b /s /a-d') do anyprogram "%%a"

    спасибо, блин забыл что в смд надо %a указывать а в батнике %%a
    а насчет относительных путей к файлам - нельзя ли?
     

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

    либо первое, тогда я уже сам смогу повторить н раз это действо, либо ну пусть для всего списка, в общем тут главное можно ли в батнике выбрать случайный элемент из списка?

    Всего записей: 2370 | Зарегистр. 15-07-2005 | Отправлено: 17:25 02-05-2007 | Исправлено: 0Vovan0, 17:48 02-05-2007
    Maza Faka



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    0Vovan0
    На предыдущей странице тебе давали примеры, посмотри внимательно

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 17:46 02-05-2007
    0Vovan0



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Maza Faka
    хм.. это?

    Код:
    @echo off  
    enabledelayedexpansion  
     
    del tmplist.txt  
    for /f "delims=" %%a in ('dir /b /s /a-d *.mp3') do echo !random! %%a >>tmplist.txt  
    del tmplist2.txt  
    for /f "tokens=1*" %%a in ('sort tmplist.txt') do echo %%b >>tmplist2.txt

    такой батник только создал два текстовых файла, в которых все было по порядку, в одном просто вывод dir, в другом тоже, только в начале каждой строчки просто текст !random!  :-\

    Всего записей: 2370 | Зарегистр. 15-07-2005 | Отправлено: 17:54 02-05-2007 | Исправлено: 0Vovan0, 17:54 02-05-2007
    Maza Faka



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

    Цитата:
    %переменная% заменяется на значение в первый же момент обработки строки. всей строки, а не куска до &

    Значит здесь:

    Код:
     
    Set parC=1
    set /a parC-=1 & IF %parC% GTR 0 (Echo ERROR) Else (Echo OK)
     

    в выделенной строке до символа "&", вычисления не происходит?

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 18:09 02-05-2007
    Elroir



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

    Код:
     
    wscript.echo day(date) & " " & month(date) & " " & year(date) & " " & hour(time)& " " & minute(time) & " " & second(time)
     

    Этот код выдаст тебе "число месяц год час минута секунда" (пробел в качестве разделителя). Делай с ними то, что тебе надо.

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 18:13 02-05-2007
    Maza Faka



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    0Vovan0
    На 4-ой странице я приводил пример:

    Код:
     
    @Echo off  
    Setlocal enabledelayedexpansion  
    Set /p "Select=Введите номер файла, который нужно скопировать "  
    Set Var=0  
    For /F "Tokens=*" %%a in ('Dir /b /s /a:-d') do (  
    Set /a Var+=1  
    If "!Var!"=="%Select%" copy "%%a" D:\Test)
     

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 18:14 02-05-2007
    Elroir



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

    Цитата:
    в выделенной строке до символа "&", вычисления не происходит?

    Происходит, но результат "проявится" только в следующей строке.

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 18:16 02-05-2007
    Vick_Tor



    Newbie
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Вечер добрый продвинутым пиплам.
    Такой вопрос: батничком можно архивировать?
    ну или прописать в него что-то.
    Изи папки юзера надо выдернуть все файлы (*.DOC , *.RTF)
    со структурой расположения и упаковать в определенном месте.
    Есть такое:
     
    xcopy "%HOMEPATH%"\*.doc D:\New\%USERDOMAIN%\%USERNAME% /d /s /i
    xcopy "%HOMEPATH%"\*.rtf D:\New\%USERDOMAIN%\%USERNAME% /d /s /i
     
    Ни как не догоню.

    Всего записей: 2 | Зарегистр. 06-03-2007 | Отправлено: 18:16 02-05-2007
    Elroir



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

    Код:
     
    rar u -r путь_к_архиву\имя_архива "%HOMEPATH%"\*.doc "%HOMEPATH%"\*.rtf
     


    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 18:28 02-05-2007 | Исправлено: Elroir, 18:36 02-05-2007
    Maza Faka



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

    Цитата:
    такой батник только создал два текстовых файла, в которых все было по порядку, в одном просто вывод dir, в другом тоже, только в начале каждой строчки просто текст !random!  :-\

    Батник wolf0425-a  рабочий, только добавь "Setlocal" перед "enabledelayedexpansion" wolf0425 почему-то забыл написать...
     
    Добавлено:
    Elroir

    Цитата:
    Происходит, но результат "проявится" только в следующей строке.

    Ввёл в командной строке этот код
    Код:
    Set parC=1
    set /a parC-=1 & Echo %parC%

    результат "01", сначала не понял, потом вспомнил, что если команда "Set /a" вызывается из командной строки, она выводит окончательное значение переменной. Значит, как я понял здесь "set /a parC-=1" происходит вычисление, а дальше в строке & Echo %parC%показывается предыдущее значение переменной %parC% 1, и если с новой строки напсать "Echo %parC%" то выведется новое значение переменной "0", я правильно понял?

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 18:32 02-05-2007
    Elroir



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

    Цитата:
    я правильно понял?

    Да.

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 19:02 02-05-2007
    wolf0425



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

    Цитата:
    wolf0425 почему-то забыл написать...
    вот и я туплю рожу об монитор - не понимаю куда оно делось и кто виноват
     
    Elroir, Maza Faka

    Цитата:
    Цитата:
    в выделенной строке до символа "&", вычисления не происходит?
    Происходит, но результат "проявится" только в следующей строке.

    результат и в этой строке проявится, если суметь до него добраться - он только для %parC% в текущей строке недоступен - т.к. %parC% заменяется на значение ДО в самом начале обработки строки - раньше всего остального, в т.ч. и до set /a
     
    Добавлено:
    0Vovan0

    Цитата:
    а насчет относительных путей к файлам - нельзя ли?  

    только через задницу.

    Код:
    @echo off
    setlocal enabledelayedexpansion
     
    del tmplist.txt
    for /f "delims=" %%a in ('dir /b /s /a-d *.*') do set "xx=%%a" && echo !random! !xx:%cd%\=! >>tmplist.txt
     
    del tmplist2.txt
    for /f "tokens=1*" %%a in ('sort tmplist.txt') do echo %%b >>tmplist2.txt
     

     

    Цитата:
    можно ли в батнике выбрать случайный элемент из списка?  

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

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 19:02 02-05-2007 | Исправлено: wolf0425, 19:39 02-05-2007
    0Vovan0



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

    Цитата:
    @echo off  
    setlocal enabledelayedexpansion  
     
    del tmplist.txt  
    for /f "delims=" %%a in ('dir /b /s /a-d *.*') do set "xx=%%a" && echo !random! !xx:%cd%\=! >>tmplist.txt>>tmplist.txt  
     
    del tmplist2.txt  
    for /f "tokens=1*" %%a in ('sort tmplist.txt') do echo %%b >>tmplist2.txt

    спасибо, работает

    Цитата:
    выбрать один случайный конечно тоже можно - если сначала длину списка подсчитать...

    ну если можно всетаки пример)
    просто выполнить команду одним из параметров которой будет случайный элемент из списка
     
    Еще небольшой вопрос, если альтернатива start /low команда только чтобы последующие команды выполнялись после того как выполнится оная команда?

    Всего записей: 2370 | Зарегистр. 15-07-2005 | Отправлено: 19:53 02-05-2007
    Elroir



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

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

    Это понятно. Ты уже написал о setlocal enabledelayedexpansion и !parC!. Я не стал повторяться.

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 19:53 02-05-2007
    Maza Faka



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

    Цитата:
    Еще небольшой вопрос, если альтернатива start /low команда только чтобы последующие команды выполнялись после того как выполнится оная команда?


    Код:
     
    Start /wait /low
     

    Кстати параметр "/low" служит для запуска приложения с низким приоритетом

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 07:58 03-05-2007
    wolf0425



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

    Цитата:
    выбрать один случайный конечно тоже можно - если сначала длину списка подсчитать...
    ну если можно всетаки пример)  

    ну держи

    Код:
    @echo off
    setlocal enabledelayedexpansion
     
    dir /b /s /a-d *.* >list.txt
    for /f %%a in ('type list.txt ^|find /c /v ":::"') do set /a yy=%random% %% %%a
    set nn=0
    for /f "delims=" %%a in (list.txt) do set /a nn+=1 && if !nn! GTR %yy% set randomname=%%a && goto :exitfor
    :exitfor
    set "randomname=!randomname:%cd%\=!"
    set randomname

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

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 10:40 03-05-2007 | Исправлено: wolf0425, 10:51 03-05-2007
    GORA2



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Здравствуйте всем. Я опять за помощью. Следующая задача:
    Имеются две переменные %COMMANDER_PATH% в которой может быть, например, D:totalcmd и %CustomPath% в которой должно быть, например, D:totalcmd\Utilites, но может быть и совершенно другое, например, c:\Program Files\Total Commander\Prog
    1 Как проверить является ли содержимое %COMMANDER_PATH% началом содержимого %CustomPath% ?
    2 Если п1 выполнен, то как выделить остаток пути (разницу %CustomPath%-%COMMANDER_PATH%)  в переменную %LessPart% ?
    Если это возможно с помощью бат файла. Заранее спасибо.

    Всего записей: 1271 | Зарегистр. 26-01-2006 | Отправлено: 15:11 03-05-2007
    0Vovan0



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

    Цитата:
    Кстати параметр "/low" служит для запуска приложения с низким приоритетом

    Это мне собственно и надо, перефразирую вопрос - как-то еще модно запустить в банике приложение с низким приоритетом? Start /wait /low подходит, но постоянно всплывающие окна несколько мешают
    Весьма удивило что в start /? про ключ /wait ничего не написано
     
    wolf0425
    спасибо, думал конечно оно проще будет - ну работает , чего еще надо

    Всего записей: 2370 | Зарегистр. 15-07-2005 | Отправлено: 15:32 03-05-2007
    Maza Faka



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

    Код:
     
    @Echo off
    Set COMMANDER_PATH=D:\totalcmd
    Set CustomPath=D:\totalcmd\Utilites
     
    If /i %COMMANDER_PATH%==%CustomPath:~0,11% Set LessPart=%CustomPath:~12%
    If defined LessPart Echo %LessPart%
     

    Две строки, после "@Echo off", для примера, не копируй их...
     
    Добавлено:
    0Vovan0

    Цитата:
    Start /wait /low подходит, но постоянно всплывающие окна несколько мешают

    Какие окна, у меня ничего не всплывает Может ты имеешь в виду, что нужно запустить приложение в свёрнутом виде, тогда так Start /wait /low /min

    Цитата:
    Весьма удивило что в start /? про ключ /wait ничего не написано

    Как не написано, запусти командную строку и выполни start /?, у меня этот ключ описывается(OS WinXp SP2)

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 15:37 03-05-2007 | Исправлено: Maza Faka, 15:50 03-05-2007
    wolf0425



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    GORA2, @#$%&@#$%@#$ @#$#@#%!!!!
    как вычитать текстовые переменные - я тебе вчера, в примере с вычислением относительного пути, написал, на п.2 это линейно переносится.
    set LessPart=!CustomPath:%COMMANDER_PATH%;=!
     
    а п.1 - проще делать после п2. : сравниваешь полученную %LessPart% с %CustomPath% и если не различаются (не удалось заменить подстроку) - то значит COMMANDER_PATH не является частью CustomPath ...
    хотя при большом желании можно написать ручной пересчет количества символов в COMMANDER_PATH и сравнить его с начальным куском CustomPath

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 15:50 03-05-2007
       

    Страницы: 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

    Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах 3
    vu1tur (11-09-2007 15:22): продолжаем в теме Задачи на bat-файлах 4


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru