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

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

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

vu1tur (29-07-2011 12:47): Задачи на bat-файлах 11
 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

   

vu1tur



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

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

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

  • Всего записей: 3690 | Зарегистр. 01-02-2003 | Отправлено: 11:53 09-01-2011 | Исправлено: mazafakermazafaka, 11:22 04-06-2011
    GRiMka



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AZJIO
     
    У тебя он все каждый раз заново копирует, а мне нужно только новые файлы.

    Всего записей: 27 | Зарегистр. 16-06-2005 | Отправлено: 10:02 07-07-2011 | Исправлено: GRiMka, 10:03 07-07-2011
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    GRiMka
    скрести с ключом /D
    Например /D /Y  
    /Y - Подавляет запрос на подтверждение перезаписи существующего конечного файла.
    Вы справку по командам совсем что ли не читаете? Откуда то же взяли /D, там же и про остальные ключи подробно написано.
    Я в предыдущем посте всего лишь привёл пример стандартного копирования, как это делает винда, добавив подавление перезаписи (Y) и продожить при ошибке (C).

    Всего записей: 4409 | Зарегистр. 03-05-2006 | Отправлено: 10:13 07-07-2011 | Исправлено: AZJIO, 10:27 07-07-2011
    GRiMka



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AZJIO
     
    Я как раз читал справку, ключ /Y подавляет запрос и равносилен нажатию на клавишу "Y" а мне нужно копировать только новые файлы а не все подряд!

    Всего записей: 27 | Зарегистр. 16-06-2005 | Отправлено: 10:24 07-07-2011
    AZJIO



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

    Цитата:
    копировать только новые файлы
    Для этого и нужен ключ D
     
    На всякий случай попробуй заменить строку  
    \\fileserver\Scan\*.pdf  
    на  
    \\fileserver\Scan\

    Всего записей: 4409 | Зарегистр. 03-05-2006 | Отправлено: 10:25 07-07-2011 | Исправлено: AZJIO, 10:26 07-07-2011
    GRiMka



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AZJIO
     
    В том то и дело что ключ /D прекрасно работает при копировании на локальной машине (из папки в папку скажем). Но в моем случае нужно из одной шары копировать в другую и в этом случае что с ключем /D что без него, xcopy пытается каждый раз скопировать все что есть.  
     

    Всего записей: 27 | Зарегистр. 16-06-2005 | Отправлено: 10:31 07-07-2011
    wolf0425



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

    Цитата:
    Но в моем случае нужно из одной шары копировать в другую и в этом случае что с ключем /D что без него,
    странно это.
    только что вот проверил -  повторный запуск xcopy /d /y \\server\c$\TMP\* \\ts-000\d$\temp\  ничего не копирует, пишет "Скопировано файлов: 0."
     
    Может у тебя время между компами не синхронно? домен то есть?
     
    ps: запускал на XP, шары на 2003  и ХР, все в домене.

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 11:58 07-07-2011 | Исправлено: wolf0425, 12:00 07-07-2011
    GRiMka



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    wolf0425
     
    Спасибо за ответ! Да, я кажется понял в чем причина, в одной из моих шар (шара приемник), своя файловая система (не FAT и NTFS).

    Всего записей: 27 | Зарегистр. 16-06-2005 | Отправлено: 12:28 07-07-2011
    wasp238



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

    Цитата:
    Помогите, пожалуйста, составить батник.
    Задача:
    Каждый день, в папку d:\Temp\ "ложится" бекап с именем backup.zip, на следующий день он перезаписывается новым.  
    Надо этот файл залить на фтп login:pass@server.com/www/backup/
    притом файл надо переименовать в backup(ГГ-ММ-ЧЧ).zip, а в папке на фтп должно находится не более 25 таких зипов (т.е. батник должен проанализировать дату архивов и удалять самый старый).

    Никто не может помочь?

    Всего записей: 49 | Зарегистр. 27-10-2008 | Отправлено: 12:47 07-07-2011
    wolf0425



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

    Цитата:
    Да, я кажется понял в чем причина, в одной из моих шар (шара приемник), своя файловая система (не FAT и NTFS).
    ну если там время с другой точностью хранится или попросту самба кривая - то вполне может и глючить (на всякий случай проверь существование прошивок поновее, может это какая-то давно известная и поправленная бага)
     
    в самом печальном варианте - придется последовательно сравнивать размер/время файлов в шарах (%%~t %%~z) и если  различаются - копировать файлы по одному.
    %%~t - загрублено до минут, для твоей проверки на новизну должно хватать.

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 13:06 07-07-2011
    sfinx26

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Здравствуйте, можно ли батником сделать следующее
    есть структура папок  
     

    Код:
    корневой  каталог  
               папка 1
               папка 2
               папка 3
                           папка 3.1
                           папка 3.2

    в папках файлы с одинаковыми именами,
    нужно их копировать в корневой каталог заменяя те что там были при этом имея возможность выбрать что нужно копировать(из какой папки т.е. некое подобие меню что ли)
    интересно можно ли такое провернуть не используя абсолютыне пути + чтобы батник лежал в корне и его при копировании не удалило бы.

    Всего записей: 12 | Зарегистр. 10-04-2009 | Отправлено: 16:19 07-07-2011 | Исправлено: sfinx26, 16:19 07-07-2011
    01MDM



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

    Код:
     
    @echo off
    setlocal
     
    set "cnt=100"
    for /f "tokens=*" %%i in (' dir /b /s /ad ') do call:menu "%%i"
    echo .......
    set /p choice="Choose folder to copy: "
    set /a choice+=100
     
    for /f "tokens=2 delims==" %%i in (' set item_%choice% ') do echo copy /y "%%i\*"  
    goto:eof
     
    :menu
    set "item=%~1"
    set /a cnt+=1
     
    setlocal enabledelayedexpansion
    echo [%cnt:~-2%] !item:%cd%\=!
    endlocal
     
    set "item_%cnt%=%~1"
     

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

    ----------
    Вопросы в личке останутся без ответа

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 17:50 07-07-2011
    Jin32



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Друзья, такая проблема, надо на время выполнения некоторых операций откатывать время, примерно так:
     

    Код:
    set mytime=14:30
     
    set temptime=%time:~0,5%
     
    time %mytime%
     
    rem Здесь кое что проиходит
    rem например пусть открывается кальулятор
    calc.exe
     
    time %temptime%
     
    exit

    После закрытия "калькулятора" время возвращается на то что было. Все бы хорошо, но время работы "калькулятора" заранее не известно (от минут 2, до 15-20 не больше). Хотелось бы что бы системное время не сбивалось на эти 2-15-20 минут. В идеальном варианте если бы удалось обойтись без дополнительных утилит, ибо батник планируется запускать с флешки, а к екзешнику могут вирусы прицепиться.

    Всего записей: 50 | Зарегистр. 22-04-2007 | Отправлено: 19:42 07-07-2011
    01MDM



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Jin32
    Т.е. запустить calc.exe и перевести время назад?

    Код:
     
    start "" "calc.exe"
     



    ----------
    Вопросы в личке останутся без ответа

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 20:13 07-07-2011
    Jin32



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    01MDM
    Ну если бы так все бы просто было, я бы этот вопрос даже не задавал
    Конечно же надо что бы все время пока работает "калькулятор" время было другое, мне нужное. А в этом варианте оно только в момент запуска мне нужное. Как вариант подошло бы откатывание текущего системного времени на заранее известный промежуток, а потом его возврат.

    Всего записей: 50 | Зарегистр. 22-04-2007 | Отправлено: 20:55 07-07-2011 | Исправлено: Jin32, 21:12 07-07-2011
    wolf0425



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Jin32 а может полезнее время не откатывать к старому+коррекция, а тупо установить по внешнему источнику?
    по домен-контролеру, по маршрутизатору, по яндексу наконец...
     
    на или перед откатом вычисляешь на сколько секунд время после закрытия программы отличается от %mytime% и корректируешь на эти секунды то время, что сохранял. Задачи иметь работоспособность при переходе через полночь у тебя наверно нет, так что вычисления несложные.

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 21:03 07-07-2011
    Jin32



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    wolf0425
    Само собой ночью я не работаю.
    Контролировать по внешнему источнику не получиться, компы все разные, где то есть сеть и инет, где то полностью локально.
    "Калькулятор" это работа некой программы, которая при своей работе создает файлы отчета, где фиксируется время и день работы, файлы отчета я должен тащить в офис, там их обрабатывают, они закодированы и взломать нет возможности. Цель всей затеи создать видимость графика работы приближенного к плановому.

    Цитата:
    на или перед откатом вычисляешь на сколько секунд время после закрытия программы отличается от %mytime% и корректируешь на эти секунды то время, что сохранял. Задачи иметь работоспособность при переходе через полночь у тебя наверно нет, так что вычисления несложные.

    Так бы тоже подошло, но как это сделать? Хотя бы примерно?

    Всего записей: 50 | Зарегистр. 22-04-2007 | Отправлено: 21:10 07-07-2011 | Исправлено: Jin32, 21:14 07-07-2011
    kronomobil

    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    wolf0425
    Предложенный скрипт прекрасно справился с задачей. Проверено на W2K3. Те, у кого похожая задача, могут смело брать на вооружение

    Всего записей: 46 | Зарегистр. 18-11-2010 | Отправлено: 21:32 07-07-2011
    Elroir



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    sfinx26
    То ли я не так понял, то ли 01MDM, но мой вариант сильно отличается от того, который он предложил:

    Код:
     
    @echo off
    setlocal
    subst z: .
    pushd z:\
    del /q ~list1.~ 2>nul
    for /d %%a in (*) do for /f "tokens=*" %%b in ('2^>nul dir /b /a-d /s "%%a\*.txt"') do echo %%~pnxb>>~list1.~
    :loop
    set "currentFile="
    set /p currentFile=<~list1.~
    if "%currentFile%"=="" goto endLoop
    call :extFileName "%currentFile%"
    if "%currentFile%"=="%~nx1" goto removeProcessed
    echo Processing "%currentFile%":
    type ~list1.~ | find /i "%currentFile%">~sublist.~
    type ~sublist.~ | find /v /n ""
    set /p "nof=Please enter the number of file to copy: "
    set /a "line=nof-1"
    type ~sublist.~ | more +%line%>~sublist1.~
    set /p fileToCopy=<~sublist1.~
    copy "%fileToCopy%" .\
    :removeProcessed
    type ~list1.~ | find /i /v "%currentFile%">~list2.~ & del /q ~list1.~ & ren ~list2.~ ~list1.~
    goto loop
     
    :extFileName
    set "currentFile=%~nx1"
    goto :EOF
     
    :endLoop
    del /q ~list1.~ 2>nul
    del /q ~sublist.~ 2>nul
    del /q ~sublist1.~ 2>nul
    popd
    subst z: /d
     



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

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 21:44 07-07-2011
    JohnRD

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    добрый день
     
    есть вопрос
     
    в Windows есть интересная штука,
    после блокировки дисплея по кнопке Windows+L либо по времени простоя,  
    для последующей разблокировки выставляется язык по умолчанию Юзера вот эта ветка реестра:
    [HKEY_CURRENT_USER\Keyboard Layout\Preload]
    "1"="00000419"       русский
    "2"="00000409"
     
    а вот раскладка переключения та что у системы на момент Логона
    а именно вот эта:
    [HKEY_USERS\.DEFAULT\Keyboard Layout\Toggle]
    "Language Hotkey"="2"
    "Hotkey"="2"                   это Ctrl+Shift
    "Layout Hotkey"="3"
     
    тоесть если у человека язык по умолчанию Русский и раскладка Alt+Shift
    ему нужно переключить язык для ввода пароля, он давит Alt+Shift а раскладка не та поскольку взята у системы
    у всех юзеров разные любимые сочетания.
     
    каким образом можно прочитав ветку реестра пользователя - его сочетание клавиш для переключения воткнуть в вветку системы
    [HKEY_USERS\.DEFAULT\Keyboard Layout\Toggle]
     
    политикой на систему логон скрипт, может читать ветку системы но не может читать пользовательскую поскольку она не загружена
    а логон скрипт юзера не сможет прописать в системную ветку поскольку не хватит прав
     
    можно ли сделать скрипт который читал бы ветку системы ждал загрузки пользователя читал его ветку сверял и правил системную если она другая
     
    спасибо

    Всего записей: 205 | Зарегистр. 29-08-2004 | Отправлено: 09:06 08-07-2011
    BVV63



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    JohnRD
    Скрипт-то не проблема, пара строк. Только вот толку - ноль. Клавиши переключения не изменятся до перезагрузки.
     
    Добавлено:
    Ошибся, изменяются.

    Всего записей: 3542 | Зарегистр. 17-08-2009 | Отправлено: 09:39 08-07-2011
       

    Страницы: 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 » Операционные системы » Microsoft Windows » Задачи на bat-файлах 10
    vu1tur (29-07-2011 12:47): Задачи на bat-файлах 11


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru