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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
    ViSiToR



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

    Цитата:
    надо выделить xn

    Что значит выделить? удалить из переменной?

    ----------
    ViSiToR a.k.a CreatoR
    CreatoR это не ник, CreatoR это стиль жизни!

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 10:05 20-06-2007
    KapralBel



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

    Цитата:
    Кабельное  

    Странно у меня тоже такое - но RASDial работает
    Обычно в этом случае срабатывает
    RASDial Имя Пользователь Пароль
    Сегодня вечером проверю стукни в около 21 по Москве в 4450500
     

    Всего записей: 11354 | Зарегистр. 16-02-2005 | Отправлено: 10:25 20-06-2007
    wolf0425



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

    Цитата:
    %string%=\\computer\share\x1\..\xn\ [UNC имя или локальный путь], надо выделить xn

     
    set "string=\\computer\share\x1\..\xn\"
    for %%a in ("%string:~0,-1%") do  echo %%~nxa
     
    вот только если такие компьютер+шара недоступны - это будет медленно. но тоже сработает.

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 10:29 20-06-2007 | Исправлено: wolf0425, 10:32 20-06-2007
    uadeep

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

    Цитата:
    Что значит выделить? удалить из переменной?

     
    надо получить %string2%=xn (имя последней папки в пути)
     
    UPD
     

    Цитата:
    set string=\\computer\share\x1\..\xn\
    for %%a in ("%string:~0,-1%") do  echo %%~nxa  
     
    вот только если такие компьютер+шара недоступны - это будет медленно. но тоже сработает.

     
    доступность машины/шары проверяется раньше, ..а здесь же работа с текстом, огромное спасибо , то что надо

    Всего записей: 6 | Зарегистр. 20-06-2007 | Отправлено: 10:34 20-06-2007 | Исправлено: uadeep, 10:43 20-06-2007
    Maza Faka



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

    Код:
     
    @echo off
    set string=\\computer\share\x1\..\xn\
    set string=%string:\= %
    for %%a in (%string%) do set string2=%%a
    echo %string2%
     

     
    Работает чуть быстрее

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 11:58 20-06-2007
    newhome

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    igor_andreev
     
    УРА!
    Огромное спасибо! Всё работает без правки и  с длинными именами и с кириллицей!!!  
     

    Всего записей: 11 | Зарегистр. 14-06-2007 | Отправлено: 12:05 20-06-2007
    Maza Faka



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

    Код:
     
    @echo off
    set "string=\\computer\share\x1\..\xn\"
    :loop
    for /f "tokens=1* delims=\" %%a in ("%string%") do (
    set string=%%b
    set string2=%%a
    if defined string goto loop)
    echo %string2%
     

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 12:10 20-06-2007
    uadeep

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

    Цитата:
    Работает чуть быстрее  


    Цитата:
    И ещё вариант  

     
    uadeep уполз в нору курить Maza Fakaины скрипты

    Всего записей: 6 | Зарегистр. 20-06-2007 | Отправлено: 12:37 20-06-2007
    Maza Faka



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

    Цитата:
    Лучше чтобы все было как у исходного файла (и дата создания, и дата модификации), если это возможно

    Возможно , по дате создания файла:  

    Код:
     
    @echo off
    set cur_date=%date%
    setlocal enabledelayedexpansion
    for /f %%a in ('dir /t:c c:\old\*.png ^| findstr [0-9] ^| find "."') do (
    set old_date=%%a
    date !old_date!
    for %%b in ("d:\new\%%~nxa") do (
    pushd %%~dpb
    copy "%%~nxb"+,,
    )
    )
    date %cur_date%
     

     
    Добавлено:
    uadeep

    Цитата:
    uadeep уполз в нору курить Maza Fakaины скрипты


    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 13:15 20-06-2007
    Elroir



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

    Цитата:
    Ещё один вариант:
    Код:  
    @echo off  
    set string=\\computer\share\x1\..\xn\  
    set string=%string:\= %  
    for %%a in (%string%) do set string2=%%a  
    echo %string2%  

    Все хорошо до той поры, пока в названии последней директории нет пробелов.
     

    Цитата:
    Возможно , по дате создания файла: ...

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


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

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 13:25 20-06-2007
    GORA2



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Maza Faka
    Как приятно, что обо мне (и моей задаче) еще помнят здесь . Правда я уже решил ее без батника (картинки были частью справки, я ее скомпилировал, сменил дату на нужную "старую" и снова декомпилировал. Получил картинки со старыми датами ), но ваш вариант конечно поробую тоже. Спасибо

    Всего записей: 1271 | Зарегистр. 26-01-2006 | Отправлено: 13:26 20-06-2007
    Maza Faka



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

    Цитата:
    Опять же - ты устанавливаешь только дату модификации, причем она становится такой, как дата создания проверяемого файла.

    Так ведь нам и нужна дата создания, что не так?

    Цитата:
    Все хорошо до той поры, пока в названии последней директории нет пробелов.

    Поэтому я выложил 2 варианта решения
     
    GORA2

    Цитата:
    вариант конечно попробую тоже

    Немного исправленный вариант:

    Код:
     
    @echo off
    set cur_date=%date%
    setlocal enabledelayedexpansion
    for /f %%a in ('dir /t:c c:\old\*.png ^| find ".png"') do (
    set old_date=%%a
    date !old_date!
    for %%b in ("d:\new\%%~nxa") do (
    pushd %%~dpb
    copy "%%~nxb"+,,
    )
    )
    date %cur_date%
     

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 14:40 20-06-2007 | Исправлено: Maza Faka, 14:45 20-06-2007
    mcTNT2

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Всем доброго времени суток.
     
    Прошу извинить, если повторяюсь, но беглый просмотр не внес ясности.
    Как можно подставить в переменную имя последнего созданного файла в дирректории, т.е. того, который первый в списке при запуске команды  
     
    dir /b /o-d

    Всего записей: 47 | Зарегистр. 23-11-2005 | Отправлено: 15:50 20-06-2007
    Elroir



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

    Код:
     
    @echo off
    for /f "tokens=*" %%a in ('dir /b /a-d /od') do set "last=%%a"
    echo %last%
     


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

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



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    mcTNT2
    А если файлов очень много, то так будет чуть быстрее:

    Код:
     
    @echo off
    for /f "tokens=*" %%a in ('dir /b /a-d /o:-d') do set "last=%%a" & goto file
    :file
    echo %last%
     

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 17:15 20-06-2007
    mcTNT2

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Elroir, Maza Faka
     
    Спасибо.

    Всего записей: 47 | Зарегистр. 23-11-2005 | Отправлено: 18:13 20-06-2007
    wolf0425



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Есть какие-нибудь идеи - как батником переключить раскладку клавиатуры в текущей консоли?
    И, заодно, определить - какая сейчас раскладка? (английская/другая )
     
    Переключалка - родная ХРшная.

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 18:46 20-06-2007
    Elroir



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

    Цитата:
    Так ведь нам и нужна дата создания, что не так?

    Насколько я понял задачу, там нужно взять дату создания и дату модификации файла из директории old, и установить их такому же файлу из директории new. У тебя в коде берется дата создания файла из old и устанавливается в качестве даты модификации файла из new.
    Честно говоря я не знаю, как поменять дату создания файла без сторонних утилит.
    А из сторонних подходит dirdate - если бы она была еще и freeware...

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

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

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

    Цитата:
    Честно говоря я не знаю, как поменять дату создания файла без сторонних утилит.  
    А из сторонних подходит dirdate - если бы она была еще и freeware...

    Да их и фриварных много
    setfile http://peter.verhas.com/progs/c/nt/setfile/
    touch http://www.stevemiller.net/apps/
    майкрософтовский touch ftp://ftp.microsoft.com/Services/TechNet/samples/PS/Win98/Reskit/FILE/
    Кажется в unixutils был touch.exe, у автора regshot был sft.exe(куда-то делась домашняя страница) и т.д.
     
     
    Добавлено:
    А, еще nircmdc.exe умеет, в шапке сидит ...

    Всего записей: 1705 | Зарегистр. 08-12-2004 | Отправлено: 19:28 20-06-2007 | Исправлено: igor_andreev, 19:33 20-06-2007
    Maza Faka



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

    Цитата:
     в коде берется дата создания файла из old и устанавливается в качестве даты модификации файла из new

    При просмотре конечного "модифицированного" файла при помощи команды "Dir" с ключами /t:a /t:c /t:w, везде выдаётся одинаковая дата, получается, что файл "создаётся".

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 19:56 20-06-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