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

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

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

evle (19-03-2008 19:44): Лимит страниц.
Задачи на bat-файлах 5
 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

   

vu1tur



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

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

  • Всего записей: 3690 | Зарегистр. 01-02-2003 | Отправлено: 15:21 11-09-2007 | Исправлено: Elroir, 01:52 26-02-2008
    ddna

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    C:\temp\45 сфайлами
    C:\temp\45\34 c файлами
     
    нужно
     
    перенести в c:\temp  файлы каталога 45
    а также в c:\temp создать папку 34 и перенести туда файлы из c:\temp\45\34 т.е. c:\temp\34

    Всего записей: 5 | Зарегистр. 12-01-2008 | Отправлено: 16:28 12-01-2008 | Исправлено: ddna, 16:28 12-01-2008
    vu1tur



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

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

    ага
     
    если в батнике, то так:
     
    for /F "tokens=6,11 delims= " %%a in ('ls -al --full-time *.txt') do @ren %%b %%~nb_%%a.txt
     
    естественно, нужно иметь ls из UnxUtils
     
    Добавлено:
    а винда какая?

    ----------
    I am free of all prejudice. I hate everyone equally.

    Всего записей: 3690 | Зарегистр. 01-02-2003 | Отправлено: 16:50 12-01-2008 | Исправлено: vu1tur, 16:50 12-01-2008
    01MDM



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ddna  
    Непонятно зачем батник?
     
    move C:\temp\45\34 C:\temp  
    move C:\temp\45\*.* C:\temp

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 16:59 12-01-2008
    cluster

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

    Цитата:
    естественно, нужно иметь ls из UnxUtils  

    Хы) хоть бы предупредил) Спасибо.
     
    Сделал всё на примитивном уровне:

    Код:
    @Echo Off
    For %%a In (SystemState_S1.bkf) Do @Call :Rena %%a %%~ta
    GoTo :EOF
     
    :Rena
    Set f_Name=%1
    Set f_Date=%2
     
    Set d=%f_Date:~0,2%
    Set m=%f_Date:~3,2%
    Set y=%f_Date:~6,4%
     
    if %m% GTR 2 (
    set /a m = %m%+1
    ) else (
    set /a m = %m%+13
    set /a y = %y%-1
    )
     
    set /a n = 36525*%y%/100+306*%m%/10+%d%-621050
    set /a dow = %n%-%n%/7*7+1
     
    Ren %f_Name% SystemState_S1_N%dow%.bkf
    GoTo :EOF

    Для поиска: День недели, День недели цифрой, день недели в имени файла, day of week

    Всего записей: 1720 | Зарегистр. 21-11-2003 | Отправлено: 17:42 12-01-2008
    Elroir



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    cluster
    И это работает? Какое число заносится в dow, если брать файл за сегодняшний день?
    За вчерашний день? За завтрашний?

    ----------
    "В интернете есть все, но не всегда"

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 18:56 12-01-2008
    cluster

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Elroir
    1 - Пн
    2 - Вт
    7 - Вс

    Цитата:
    И это работает?

    Блин, только что наткнулся на баг - не работают 8-ой и 9-ый месяцы. Может кто протестить? С остальными-то месяцами всё прекрасно.
     
    Добавлено:
    Прочитал о своей проблеме в справке SET /?

    Цитата:
    Числовые значения рассматриваются как десятичные, если перед ними не стоит префикс 0x для шестнадцатеричных чисел, и 0 для восьмеричных чисел.  Например, числа 0x12, и 022 обозначают десятичное число 18.  Обратите внимание на запись восьмеричных числе: 08 и 09 не являются допустимыми числами, так как в восьмеричной системе исчисления цифры 8 и 9 не используются.

    А вот что с этим делать, хз

    Всего записей: 1720 | Зарегистр. 21-11-2003 | Отправлено: 21:52 12-01-2008 | Исправлено: cluster, 22:17 12-01-2008
    01MDM



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    cluster
    Все нормально работает, а
    на 08 и 09 можно добавить проверку

    Код:
     
    if %d:~0,1%==0 set d=%d:~1,1%
     

    Так же и с месяцем
     
    Не совсем понятен расчет, от куда 621050?

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 22:27 12-01-2008
    Elroir



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    cluster
    Я тестировал на файлах за вчерашний день (11.01.2008), за сегодняшний (12.01.08) и завтрашний (13.01.08). Получал 6, 7 и 4 соответственно. Поэтому и спрашивал.
    Сейчас проверил - получаю 5, 6 и 7  

    ----------
    "В интернете есть все, но не всегда"

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 22:47 12-01-2008 | Исправлено: Elroir, 23:27 12-01-2008
    cluster

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

    Цитата:
    if %d:~0,1%==0 set d=%d:~1,1%

    Пишет: Непредвиденное появление: set.
     

    Цитата:
    Не совсем понятен расчет, от куда 621050?

    Алгоритм брал отсюда

    Всего записей: 1720 | Зарегистр. 21-11-2003 | Отправлено: 23:43 12-01-2008
    01MDM



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

    Цитата:
    Пишет: Непредвиденное появление: set

    У меня нормально все, правда без цикла в начале. Попробуй после @echo off поставить setlocal. И если копировал со страницы проверь что-бы не было замыкающих пробелов.
     

    Код:
     
    @echo off
    setlocal
    ...
    Set d=%f_Date:~0,2%
    Set m=%f_Date:~3,2%
    Set y=%f_Date:~6,4%
     
    if %d:~0,1%==0 set d=%d:~1,1%
    if %m:~0,1%==0 set m=%m:~1,1%
    ...
     


    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 00:30 13-01-2008
    cluster

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    01MDM
    Не знаю, чего поправил, но всё заработало.

    Всего записей: 1720 | Зарегистр. 21-11-2003 | Отправлено: 00:49 13-01-2008
    vu1tur



    Moderator-Saaber
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    cluster
    вообще, вычислять день недели самому в батнике — это искать себе проблемы
    почему не дать это делать самой ОС или готовым утилитам, которые отлажены?
    Ну да, нужен ls. Big deal. Имхо UntUtils вообще на все машины ставить надо — жизнь облегчают

    ----------
    I am free of all prejudice. I hate everyone equally.

    Всего записей: 3690 | Зарегистр. 01-02-2003 | Отправлено: 01:41 13-01-2008
    Nehemiah

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подскажите пожалуйста с таким вот заданием:
    Разработать командный файл, который умеет просматривать заданный файл, содержащий в себе список пользователей и имя их домашних каталогов, и в интерактивном режиме задает вопрос – копировать текущему пользователю (в его домашний каталог) какой-либо заданный файл (в качестве параметра) или нет. Если ДА, то программа копирует файл.
     
    Какими вариантами можно организовать выполнение данного задания. Помогите, никогда не делал батники, а тут вдруг резко пришлось, и я потерялся. Заранее спасибо.

    Всего записей: 2 | Зарегистр. 14-01-2008 | Отправлено: 09:52 14-01-2008
    Elroir



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

    Цитата:
    который умеет просматривать заданный файл, содержащий в себе список пользователей и имя их домашних каталогов

    Используй конструкцию "for /f ... " (справка - for /?)

    Цитата:
    и в интерактивном режиме задает вопрос – копировать текущему пользователю (в его домашний каталог) какой-либо заданный файл (в качестве параметра) или нет. Если ДА, то программа копирует файл.  


    Код:
     
    set /p "ans=Copy file (y,n)? "
    if "%ans%"=="y" (copy "%~1" [эта часть зависит от предыдущего кода])  
     

     
    Для более подробного решения, приведи пример файла с списком пользователей и их каталогов.


    ----------
    "В интернете есть все, но не всегда"

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 10:34 14-01-2008
    Nehemiah

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Спасибо, был бы очень признателен если бы  выложили более подробное решение.
     
     
    файл может быть таким:
    Андрей     С:\Andrei
    Василий    C:\Vasiliy
    и т.д.
     
    Либо таким:
    Андрей      
    С:\Andrei
    Василий    
     C:\Vasiliy
    и т.д.

    Всего записей: 2 | Зарегистр. 14-01-2008 | Отправлено: 11:52 14-01-2008
    Elroir



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

    Код:
     
    @echo off
    chcp 1251>nul
    setlocal
    for /f "tokens=1*" %%a in (users.txt) do call :process "%%a" "%%b" "%~1"
    goto :EOF
    :process
    echo %~1 %~2
    set "ans="
    set /p "ans=Copy file (y,n)? "
    if /i "%ans%"=="y" (echo copy %3 %2\)
     

     
    Для второго варианта:

    Код:
     
    @echo off
    chcp 1251>nul
    setlocal enabledelayedexpansion
    set "counter=1"
    for /f "tokens=*" %%a in (users.txt) do (
    set /a "step=counter %% 2"
    if "!step!"=="1" set "name=%%a"
    if "!step!"=="0" (
    set "folder=%%a"
    call :process "!name!" "!folder!" "%~1"
    )
    set /a "counter+=1"
    )
    goto :EOF
     
    :process
    echo %~1 %~2
    set "ans="
    set /p "ans=Copy file (y,n)? "
    if /i "%ans%"=="y" (echo copy %3 %2\)
     

     
    При копировании из форума - обязательно убрать пробелы в конце строк кода.

    ----------
    "В интернете есть все, но не всегда"

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 14:26 14-01-2008
    king_stiven

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Nehemiah
     
    только если воскл знаков не может быть
     
    @echo off
    setlocal enabledelayedexpansion
    for /f "tokens=*" %%i in (log.txt) do (
        set "line=!line! %%i"
        echo %%i | FINDSTR ":\" > nul
        if not errorlevel 1 call:line
    )  
    goto:eof
    :line
    for /f "tokens=1* delims= " %%a in ("!line!") do set /p "ans=Copy file %%a in %%b(y,n)?"
    if "%ans%"=="y" copy(копирование в справке смотри)
    set line=

    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 14:39 14-01-2008 | Исправлено: king_stiven, 21:51 14-01-2008
    Mpa3b



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    возможно и не по теме. пытаюсь запустить содержимое CD диска с жесткого.
     
    есть каталог(с содержимым CD диска), путь к нему

    Код:
    Q:\How_make_dv\HOW_MAKE_DV

    1.создаю виртуальный диск

    Код:
    subst z:  Q:\How_make_dv\HOW_MAKE_DV

    2. захожу в виртуальный  диск Z в каталог bin

    Код:
    Z:\bin\VIDEO.exe

    все функционирует нормально, файл VIDEO.exe
    запускается и все пункты из меню вызываются.
    (прим. если с жесткого это делать, ошибка VIDEO.exe "Invalid filename")
     
    реализую все вышесказанное через бат-файл который лежит в Q:\How_make_dv\

    Код:
     
    subst z: /d
    subst z: How_make_dv
    z:/bin/VIDEO.exe
     

    диск создается, VIDEO.exe запускается, но таже ошибка,что в примечани.
    вот, что в cmd окне происходит

    Код:
    Q:\How_make_dv>subst z: /d
    Q:\How_make_dv>subst z: How_make_
    Q:\How_make_dv>z:/bin/VIDEO.exe

    отдельно батфайл запускаю

    Код:
    z:/bin/VIDEO.exe

    аналогичная ошибка.
    если в это же время выполнить пункт 2, то все ОК.

    Всего записей: 1101 | Зарегистр. 23-03-2004 | Отправлено: 04:50 15-01-2008 | Исправлено: Mpa3b, 05:01 15-01-2008
    01MDM



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

    Цитата:
    z:/bin/VIDEO.exe

     
    z:\bin\VIDEO.exe
    Слешь виндовый

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 10:33 15-01-2008
    Mpa3b



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

    Цитата:
    01MDM
    z:\bin\VIDEO.exe  
    Слешь виндовый

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

    Всего записей: 1101 | Зарегистр. 23-03-2004 | Отправлено: 12:40 15-01-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

    Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах 4
    evle (19-03-2008 19:44): Лимит страниц.
    Задачи на bat-файлах 5


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru