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

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

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

vu1tur (25-01-2010 12:41): лимит страниц, продолжение: http://forum.ru-board.com/topic.cgi?forum=62&topic=19668  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

   

vu1tur



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

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

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

  • Всего записей: 3690 | Зарегистр. 01-02-2003 | Отправлено: 11:37 26-05-2009 | Исправлено: TechnicsKuzya, 13:53 27-12-2009
    SANIOK_AV



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Докрого времени суток!
    Ситуация такая:
    есть к примеру каталог C:\1\
    в нём есть несколько подкаталогов...
    нужно из каталога C:\1\ скопировать в каталог C:\2\ подкаталог, который самый свежий по дате создания...
    Подскажите пожалуйста как это мож но реализовать?
    Заранее благодарен!!!

    Всего записей: 485 | Зарегистр. 31-03-2009 | Отправлено: 17:50 03-12-2009
    192168

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    GORA2
     
    %F% отображается как ~-4,6
     
     

    Всего записей: 19 | Зарегистр. 10-11-2006 | Отправлено: 17:59 03-12-2009
    GORA2



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    192168
    Дык в переменной %1 (которая у Вас должна быть передана в командной строке в этот файл) у Вас что то есть? Если нет, то так и должно быть.

    Всего записей: 1271 | Зарегистр. 26-01-2006 | Отправлено: 18:09 03-12-2009
    mugil_cephalus

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

    Код:
    hstart /NOCONSOLE "c:\file.bat arg1 arg2 arg3"

     
    или  
     

    Код:
    hstart /NOCONSOLE "c:\file.bat -arg1 -arg2 -arg3"

     
    ???

    Всего записей: 1072 | Зарегистр. 07-09-2009 | Отправлено: 18:51 03-12-2009
    01MDM



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    mugil_cephalus
     
    Это параметры батника, а не hstart.
    Просто выполни `hstart' без аргументов.

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 18:59 03-12-2009
    mugil_cephalus

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    01MDM
    так мне нужно hstart'om запустить батник с аргументами батника (вот в чем вопрос)
    в синтаксисе: писать дефис или нет?
     
    readme:  

    Цитата:
    Don't forget about quotes when using complex COMMAND LINES:
     
      hstart.exe /NOCONSOLE /D="C:\Dir 1"  ""C:\Dir 2\test.bat" -param"

     
    я этот код
    Цитата:
    Код:hstart /NOCONSOLE "c:\file.bat -arg1 -arg2 -arg3"  
    "вставлю" в *.job

    Всего записей: 1072 | Зарегистр. 07-09-2009 | Отправлено: 19:13 03-12-2009 | Исправлено: mugil_cephalus, 19:15 03-12-2009
    ZidanCo



    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Извините , а не знаете как с моей задачкой на 90 странице справиться?

    Всего записей: 65 | Зарегистр. 02-08-2009 | Отправлено: 19:19 03-12-2009
    mugil_cephalus

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

    Код:
    @echo off
    if "_%1" neq "_" goto:arg1
    for /f "tokens=* delims=" %%i in ('dir /b /o:n "pathtofolder"') do call:_1 "%%i" & goto:restart
     
    :_1
    set "name=%~1"
    goto:eof
     
    :arg1
    set "ext=%~x1"
    del /q pathtofolder\*.%ext%
    goto:eof
     
    :restart
    cmd /c %0 "%name%"

     
     
     

    Всего записей: 1072 | Зарегистр. 07-09-2009 | Отправлено: 20:36 03-12-2009 | Исправлено: mugil_cephalus, 20:49 03-12-2009
    01MDM



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    mugil_cephalus
    Hstart это пускалка. Ему все равно какие аргументы у батника.

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 20:49 03-12-2009
    ZidanCo



    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Хмм , пишет файл не найден... какой файл? Насоздовал различных файлов , он не удалил ниодин , обьясните пожалуйсто как скрипт должен работать

    Всего записей: 65 | Зарегистр. 02-08-2009 | Отправлено: 20:55 03-12-2009
    mugil_cephalus

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    01MDM
    значит, если у меня батник с аргументом daily (например) то мне в синтаксисе дефис не прибавлять.
    выбрать этот вариант -  
    Цитата:
    Код:hstart /NOCONSOLE "c:\file.bat arg1 arg2 arg3"  

    в частном случае так
    Код:
    hstart /NOCONSOLE "c:\file.bat daily"

     
     
    Добавлено:
    ZidanCo

    Цитата:
    del /q pathtofolder\*.%ext%

    нужно точку убрать

    Всего записей: 1072 | Зарегистр. 07-09-2009 | Отправлено: 21:01 03-12-2009
    ZidanCo



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

    Всего записей: 65 | Зарегистр. 02-08-2009 | Отправлено: 21:38 03-12-2009
    mugil_cephalus

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

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

    удали строчку @echo off и запусти батник из консоли и увидишь листинг, как он отрабатывает
     
    Добавлено:
    ZidanCo
    у меня все *.bat-файлы удалил
    вот листинг  
    W:\>remover.bat
     
    W:\>if "_" NEQ "_" goto:arg1
     
    W:\>for /F "tokens=* delims=" %i in ('dir /b /o:n w:\folder') do call:_1 "%i"   & goto:restart
     
    W:\>call:_1 "aaa.bat"   & goto:restart
     
    W:\>set "name=aaa.bat"
     
    W:\>goto:eof
     
    W:\>cmd /c remover.bat "aaa.bat"
     
    W:\>if "_"aaa.bat"" NEQ "_" goto:arg1
     
    W:\>set "ext=.bat"
     
    W:\>del /q w:\folder\*.bat
     
    W:\>goto:eof
     
    W:\>
     
    p.s.
    можно еще в строке
    if "_%1" neq "_" goto:arg1  поменять на if "_%~1" neq "_" goto:arg1  
     
    если есть имена на кириллице - то chcp 1251

    Всего записей: 1072 | Зарегистр. 07-09-2009 | Отправлено: 21:43 03-12-2009
    ZidanCo



    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    На моменте  
    C:\Users\Администратор>for /F "tokens=* delims=" %i in ('dir /b /o:n "pathtofold
    er"') do call:_1 "%i"   & goto:restart
    Файл не найден
     
    Добавлено:
    А не слишком ли сложная реализация , для задания на втором курсе колледжа?  
    Думалось будет по проще , тут для меня мало что понятно к сожалению  
     
    Добавлено:
    Все разобрался , действительно - удаляет все файлы с тем же расширением , что и первый файл в папке
    Большое спасибо
     
     
    Добавлено:
    Хмм , если просто запустить bat файл , то он ничего не сделает , удаляет только если запускаю через cmd с указанием пути к файлу. Не знаете как исправить?

    Всего записей: 65 | Зарегистр. 02-08-2009 | Отправлено: 22:00 03-12-2009
    mugil_cephalus

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

    Цитата:
    Хмм , если просто запустить bat файл , то он ничего не сделает , удаляет только если запускаю через cmd с указанием пути к файлу. Не знаете как исправить?

     
    попробуй "мышиный" вариант

    Код:
    if "_%~1" neq "_" goto:arg1
    for /f "tokens=* delims=" %%i in ('dir /b /o:n w:\folder') do call:_1 "%%i" & goto:restart
     
    :_1
    set "name=%~1"
    goto:eof
     
    :arg1
    set "ext=%~x1"
    del /q w:\folder\*%ext%
    goto:eof
     
    :restart
    cmd /c %~0 "%name%"
     

    Всего записей: 1072 | Зарегистр. 07-09-2009 | Отправлено: 22:37 03-12-2009
    01MDM



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

    Цитата:
    А не слишком ли сложная реализация , для задания на втором курсе колледжа?  

    Да уж накрутили:

    Код:
     
    @echo off
    for /f "tokens=*" %%i in ('dir /b test') do del test\*%%~xi && goto:eof
     

    В папке test лежат файлы с разным расширением. Первый найденный файл служит маской для удаления себе подобных.
     
    ЗЫ. Лучше самому подучить, наверняка пригодится.

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 22:40 03-12-2009
    mugil_cephalus

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

    Цитата:
    Да уж накрутили:

     
     
    забыл про modifiers в переменных итератора  

    Всего записей: 1072 | Зарегистр. 07-09-2009 | Отправлено: 22:51 03-12-2009
    Ortios



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

    Цитата:
    нужно из каталога C:\1\ скопировать в каталог C:\2\ подкаталог, который самый свежий по дате создания...


    Код:
    @echo off
    set count=0
    set "destination=D:\2\"
    set "source=D:\1\"
    pushd %source%
    for /D %%a in (%source%*) do set /a count+=1
    set /a count-=1
    for /f "skip=%count% tokens=*" %%i in ('dir /a:D /o:D /b') do call copy "%%i"
    popd
    goto :eof
     
    copy
    set young=%1
    xcopy %source%%young% %destination%%young%\ /Y
    exit /b
    :eof

    ps. При необходимости можно добавить ключи /s /e /r /h в команде xcopy

    Всего записей: 73 | Зарегистр. 24-12-2007 | Отправлено: 23:10 03-12-2009 | Исправлено: Ortios, 23:41 03-12-2009
    king_stiven

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

    Код:
    @echo off
    for /f "tokens=*" %%i in ('dir C:\1 /a:D /o:-D /T:c /S /b') do (
        xcopy "%%i" C:\2\1 /s /e /r /h /Y /i
        goto :eof
    )

    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 09:39 04-12-2009
    Tase4ka

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Помогите плиз. Я весь мозг уже сломала.
    Задача такова: нужно прочитать все текстовые файлы и сравнить у них дату создания с текущей датой, если они равны то скопировать файл в другую папку. Делаю это по следующему коду на основании прочтенных топиков в форумах, но у меня не работает  
     
    @Echo Off
    setlocal enabledelayedexpansion  
    FOR %%1 IN (D:\test\*.txt) DO (
    set tmpd=%~t1 >>15.log
    set tmpd=!tmpd:~0,13! >>15.log
     
    IF "!tmpd!" == %DATE% (
    set ntmp=%~n1
    copy /Y D:\test\%ntmp% C:\%ntmp% >>15.log
    )
    )
     
     
    Пришлось использовать в условии "==", так как на EQL ругается, что нет такой функции

    Всего записей: 6 | Зарегистр. 04-12-2009 | Отправлено: 10:04 04-12-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 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117

    Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах 7
    vu1tur (25-01-2010 12:41): лимит страниц, продолжение: http://forum.ru-board.com/topic.cgi?forum=62&topic=19668


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru