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

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

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

vu1tur (26-05-2009 11:39): часть 7 — http://forum.ru-board.com/topic.cgi?forum=62&topic=17154#1  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

   

vu1tur



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

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

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





    http://forum.ru-board.com/topic.cgi?forum=62&topic=17154

  • Всего записей: 3690 | Зарегистр. 01-02-2003 | Отправлено: 23:07 04-11-2008 | Исправлено: vu1tur, 11:38 26-05-2009
    Avilona

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Привет всем!!!!! Блин, кто сможет помогите пожалуйста!
    Задали программку написать по отгадыванию числа от 0 до 10. Причем если называешь число, меньшее тому которое загадал компьютер, он выдает подсказку, что "загадал меньшее число"( и соответственнно так же с наибольшим). Вообщем-то всё написала! Всё проверила по отдельности - работает! НЕ работает (Set /p input=Vvedi chislo:
    Set /a a=%input% ) когда подключаешь это в цикл for. если цикл убрать все нормально! Но без цикла здесь никуда, сами понимаете!!!! может кто подскажет что сделать, чтоб с циклом работало нормально!!!!
     
    @Echo Off  
    title game
     
    set /a chislo= 0
    color 06
    Echo.
    Echo.
    Echo.
    Echo Privet!!!! ya zagadal chislo ot 0 do 10...
    Echo.
    Set /a chislo=!random!%%10  
    Echo                Poprobuy otgadat' zagadannoe chislo:
    Echo %chislo%*****************************************
    Echo.
     
    for %%j in (0,1,10) do (
    Set /p input=Vvedi chislo:
    Set /a a=%input%  
    Echo.
    If %chislo% equ %a% (
    Echo Ty ugadal!!!
    Echo.
    pause
    exit
    )
     
    If %chislo% gtr %a% (
    Echo Ya zagadal chislo bolshe!!!
    Echo.
    )
     
    If %chislo% lss %a% (
    Echo Ya zagadal chislo menshe!!!
    Echo.
    )
    )
    pause
    exit
    Заранее благодарна!!!!!!!!

    Всего записей: 1 | Зарегистр. 29-03-2009 | Отправлено: 00:16 30-03-2009
    Nagual



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

    Всего записей: 528 | Зарегистр. 06-01-2006 | Отправлено: 01:04 30-03-2009
    ForposT_ForeveR



    Full Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    BorlandIMHO
     
    Спасибо огромное, всё отлично.

    Всего записей: 525 | Зарегистр. 11-12-2004 | Отправлено: 01:36 30-03-2009
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Nagual
    у меня не работает... вернее не по правилам указанным Avilona
    попробовал переделать, вроде заработало вот

    Всего записей: 4409 | Зарегистр. 03-05-2006 | Отправлено: 09:02 31-03-2009 | Исправлено: AZJIO, 09:18 31-03-2009
    Nagual



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

    Всего записей: 528 | Зарегистр. 06-01-2006 | Отправлено: 11:02 31-03-2009
    N1oNa

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Всем привет! Написала скрипт, который из определенной директории выдает длину названия файлов с расширением *.xsl (по идее должен так работать, но не работает=()
     
    @echo off
    setlocal enabledelayedexpansion
    for %%i in (*.xls) do (
    set s=%%i  
    echo !s!
    set /a l=0
    :next
    set /a l+=1
    if "!s:~%l%,1!" NEQ "" goto next
    set /a l-=1
    echo String Lenght = !l!
    )
     
    Если я просто оставляю  
    @echo off
    setlocal enabledelayedexpansion
    for %%i in (C:\test\*.xls) do (
    set s=%%i  
    echo !s!
    )
    То цикл работает нормально, но если вставляю условие внутри, то цикл выполняется только 1 раз! Помогите пожалуйста решить эту задачу)
     

    Всего записей: 2 | Зарегистр. 31-03-2009 | Отправлено: 11:25 31-03-2009 | Исправлено: N1oNa, 12:27 31-03-2009
    01MDM



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    N1oNa
     
    Вместе с точкой? На примере ярлыков:

    Код:
     
    @echo off
    setlocal enabledelayedexpansion
    for /f "tokens=*" %%i in ('dir /b *.lnk') do call:1 "%%i"
    goto:eof
     
    :1
    set "nameext=%~1"
    set cnt=0
     
    :count
    set /a cnt-=1
    if not !nameext:~%cnt%!==%nameext% (goto:count) else (echo %cnt:~1% %nameext%)  
     

     
    Другой вариант, намного надежней первого:

    Код:
     
    @echo off
    for /f "tokens=*" %%i in ('dir /b *.lnk') do (
        set /p=%%i<nul 1>temp.len
        for %%j in (temp.len) do echo %%~zj %%i  
    )
    del temp.len
     

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 13:04 31-03-2009
    N1oNa

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    01MDM, Спасибо! До такого бы я не додумалась сама! Слушай, а почему в моем варианте цикл выполнялся только 1 раз? Может потому что нельзя условие внутрь цикла вставлять?

    Всего записей: 2 | Зарегистр. 31-03-2009 | Отправлено: 13:12 31-03-2009
    01MDM



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    N1oNa
    Mне не нравится условие, в котором "setlocal enabledelayedexpansion" не обрабатываeт переменную %l%.
     

    Цитата:
    if "!s:~%l%,1!"


    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 13:33 31-03-2009
    wolf0425



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

    Цитата:
    Mне не нравится условие, в котором "setlocal enabledelayedexpansion" не обрабатываeт переменную %l%.

    там проблема не собственно с условием а с тем что внутри for ... do () переменные вида %var% подставляются один раз, в момент старта for - т.е. хотя (set /a l+=1) там работает но  
    ( set /a l+=1  
    echo %l%
    ) напечатает стартовое значение переменной.
     
    лечится выносом тела в подпрограмму, правильно...
     
     

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 20:03 31-03-2009 | Исправлено: wolf0425, 20:06 31-03-2009
    01MDM



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    wolf0425
    Само собой, за пределами цикла все будет работать. Вопрос и был:

    Цитата:
    То цикл работает нормально, но если вставляю условие внутри, то цикл выполняется только 1 раз!

     

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

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

    Цитата:
    Да, именно так. Сначала создается файл со всеми возможными ссылками (all_range.txt), потом создается файл с тем, что уже есть на диске (local.txt), а потом в файл download.txt записываются все ссылки из первого файла, которые не содержат названий файлов из pre.txt и из local.txt.  
    Большое спасибо за консультацию
    Пока руки не дошли потестить особо. но вроде как работает
     
    Токма у меня еще вопросец в дополнение нарисовался: А нет ли какой нить легкой шустрой програмки (может и для cmd) для закачки по списку?
    Просто например Флешгет как то уж очень напряжно качает, а со списком больше 30000 - просто валится.
    Нужна простейшая файлокачалка, может что бы в несколько потоков качала, но не обязательно. Файлы отчсутствующие на сервере сервер отдает как no_file.jpg, так что прога должна уметь обрабатывать редирект на них, а может и просто не качать соответствующие файлы.
     
    Итак: нужна легкая шустрая прога для закачки по списку. По БОЛЬШОМУ списку
     

    Всего записей: 110 | Зарегистр. 05-12-2002 | Отправлено: 01:22 01-04-2009
    Mr_Hat



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Нужна помощь в решении задачи
     
    Проверка наличия папок 1 и 2 в заданом каталоге
    если любая из проверяемых папок существует запустить 3ю програму,
    если не существует ни одной запустить 4ю програму.

    Всего записей: 984 | Зарегистр. 04-10-2005 | Отправлено: 01:32 01-04-2009
    Nagual



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Mr_Hat
    вариантов решения полно
    если не учитывать вложенные каталоги, то можно попробовать так
    Код:
    if exist dir1 set fl=yes
    if not defined fl if exist dir2 set fl=yes
    if defined fl (echo run1) else echo run2

    Всего записей: 528 | Зарегистр. 06-01-2006 | Отправлено: 02:32 01-04-2009
    01MDM



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

    Цитата:
    А нет ли какой нить легкой шустрой програмки (может и для cmd) для закачки по списку?  

    wget
    http://forum.ru-board.com/topic.cgi?forum=5&topic=10066&glp

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 09:05 01-04-2009
    K_AHTOH



    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Уважаемые подскажите!
     
    %~t1 - разворачивает %1 в дату/время создания файла
     
    Но на самом деле если смотреть свойства файла то это получается изменение, а не создание файла.
    Очень нужно чтоб было как раз создание. Как сделать?

    Всего записей: 155 | Зарегистр. 20-10-2006 | Отправлено: 11:11 01-04-2009
    Accessor



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Народ, помогите надо в команду runas передать как имя пользователя, так и пароль. Кто знает, то штатными средствами это сделать нельзя (речть про пароль).
    Придумал такую команду:
    Код:
     
    echo password|runas /user:domain\username "net use \\comp\ipc$"

    Но что-то не идет. Кто подскажет, в чем ошибка?

    Всего записей: 2863 | Зарегистр. 31-10-2003 | Отправлено: 19:09 01-04-2009
    01MDM



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Accessor
    Этого сделать нельзя. Используй psexec вместо runas

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 22:11 01-04-2009
    NvvLazyTiger



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    K_AHTOH
    Цитата:
    %~t1 - разворачивает %1 в дату/время создания файла  
    [...]
    Очень нужно чтоб было как раз создание. Как сделать?
    Например так:
    Код:
    for /f "tokens=1,2,3,*" %%a in ('dir %1 /TC /-C') do if /i "%%d" == "%1" set fCreDatTim=%%a %%b
    В переменную fCreDatTim заносятся дата/время создания файла %1 (первые два элемента выдачи команды dir).
     
    Добавлено:
    Mr_Hat
    Цитата:
    Проверка наличия папок 1 и 2 в заданом каталоге  
    если любая из проверяемых папок существует запустить 3ю програму,  
    если не существует ни одной запустить 4ю програму
    Можно сделать например так:
    Код:
    if NOT exist "Path\Dir1\" if NOT exist "Path\Dir2\" RunPrg4 & goto :eof
    RunPrg3
    NB#1. Path - общий путь к папкам 1 и 2 (Dir1 & Dir2).
    NB#2. Символ "\" в конце проверяемых элементов (имена папок) исключает ложное срабатывание при наличии в нужном месте файла Dir1 или Dir2.

    Всего записей: 257 | Зарегистр. 14-02-2009 | Отправлено: 06:02 02-04-2009
    Accessor



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    01MDM
    Цитата:
    Этого сделать нельзя. Используй psexec вместо runas  

    Признаться, я не понял, как мне может помочь psexec. Короче, задача изначально следующая. Нужно кратковременно залогиниться одному юзверю к другому, взять данные и отвалиться. Доступ нужен во многие каталоги, поэтому лучше подключаться с админскими правами, чтобы не заморачиваться с правами доступа и расшарками. Ну, вот и получается, что из пакетного файла надо дать команду net use \\comp\ipc$ /user:username и при этом передать пароль. Но сложность в том, что от лица рядового юзверя эту команду давать бестолку, т.к. ругается про "множественное подключение невозможно". Поэтому я придумал дать эту команду от имени администратора. Как это сделать?

    Всего записей: 2863 | Зарегистр. 31-10-2003 | Отправлено: 10:38 02-04-2009 | Исправлено: Accessor, 10:50 02-04-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

    Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах 6
    vu1tur (26-05-2009 11:39): часть 7 — http://forum.ru-board.com/topic.cgi?forum=62&topic=17154#1


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru