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

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

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

vu1tur (04-09-2010 17:46): http://forum.ru-board.com/topic.cgi?forum=62&topic=21297  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199

   

vu1tur



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

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

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

  • Всего записей: 3690 | Зарегистр. 01-02-2003 | Отправлено: 12:40 25-01-2010 | Исправлено: bomzzz, 13:37 20-08-2010
    mugil_cephalus

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    BagaBaga
    http://forum.ru-board.com/topic.cgi?forum=33&bm=1&topic=5312#1

    Всего записей: 1072 | Зарегистр. 07-09-2009 | Отправлено: 18:33 04-06-2010
    wolf0425



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

    Цитата:
    ооооооо....... без комментариев

    на ту же тему:
    если есть строка с меткой длиной 128+ символов - то goto не видит никаких меток после неё. эта метка должна быть меткой - т.е лишние : или пробелы - незачет.
     
     
     

    Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 19:13 04-06-2010 | Исправлено: wolf0425, 19:14 04-06-2010
    Den13V



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

    Цитата:
    а там "%time%" в может быть " 9:59:59,25" - т.е. с пробелом, если в системных настройках так установлено (причем это по умолчанию в части систем).  
    "%timenew%" соответственно будет " 9.59"  
    а с этой строкой - "09.59"  
    бужешь добавлять %timenew% в середину/конец имени файла - почувствуешь разницу.

     
    1) батник запускается строго через 30мин. ( 9:00:00, 9:30:00, 10:00:00, 10:30:00 и т.д. круглые сутки), поэтому запустится ему в 9:59:59,25, как то ни есть реально.
     
    2) %timenew% записуется в конец имени файла, если ты обратил внимание об этом написано выше в моих сообщениях (rezerv_error_copy_%timenew%.rar), при возврате %time% и правда получаем " 9.36.25,40", но при добавлении %time% в имя (в конец) пробел перед 9 уходит и результ такой "rezerv_error_copy_9.36 .rar" пробел остается только в конце.
     

    Цитата:
    Цитата:пробел остается и так и эток.  
     
     
    гонишь. значит пробел ты добавил в какую-то предыдущую строку, устанавливающую timenew

     
    а ты собственно сам то пробовал, я перед тем как писать опробовал данные варианты.
     
    текст ввода time :
     
    set timenew=%time:~0,-3%  
    set timenew=%timenew::=.%
    rename rezerv_OTData_half-hour.rar "rezerv_error_copy_time-%timenew%.rar"
     
    покажи пожалуйста, где я мог поставить не там пробел.
     
    это предложенный твой вариант, опробуй
     
    set timenew=%time:~0,-3%  
    set "timenew=%timenew::=.%"
    rename rezerv_OTData_half-hour.rar "rezerv_error_copy_time-%timenew%.rar"
     
     
     
     
     
    Добавлено:
    wolf0425
     
    при тексте
     
    1.    set timenew=%time:~0,5%
    2.    set timenew=%timenew: =0%
    3.    set "timenew=%timenew::=.%"  
    4.    rename rezerv_OTData_half-hour.rar "rezerv_error_copy_time-%timenew%.rar"
     
    в результате:
     
    1.    C:\set timenew=19:04
    2.    C:\set timenew=19:040
    3.    C:\set timenew=19.040
    4.    C:\rezerv_error_copy_time-19.040.rar
     
    при тексте
     
    1.    set timenew=%time:~0,-3%
    2.    set timenew=%timenew: =0%
    3.    set "timenew=%timenew::=.%"  
    4.    rename rezerv_OTData_half-hour.rar "rezerv_error_copy_time-%timenew%.rar"
     
    в результате:
     
    1.    C:\set timenew=19:08:00
    2.    C:\set timenew=19:08:000
    3.    C:\set timenew=19.08.000
    4.    C:\rezerv_error_copy_time-19.08.000.rar

    Всего записей: 15 | Зарегистр. 08-07-2009 | Отправлено: 19:57 04-06-2010
    mugil_cephalus

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    wolf0425
    глянь (сейчас стохастически наткнулся; не читал - то , не то ) - http://www.robvanderwoude.com/batchtools.php GetPIDs Find the current batch file's Process ID

    Всего записей: 1072 | Зарегистр. 07-09-2009 | Отправлено: 20:41 04-06-2010
    wolf0425



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

    Цитата:
    1) батник запускается строго через 30мин. ( 9:00:00, 9:30:00, 10:00:00, 10:30:00 и т.д. круглые сутки), поэтому запустится ему в 9:59:59,25, как то ни есть реально.  
    так нет разницы между 9:00* и 9:59* - пробел в %time% содержится в обоих случаях совершенно одинаковый.
     

    Цитата:
    2) %timenew% записуется в конец имени файла, если ты обратил внимание об этом написано выше в моих сообщениях (rezerv_error_copy_%timenew%.rar)
    я конечно обратил внимание, что %timenew% добавляется в середину имени нового файла, перед расширением. и пробел перед временем тебе наверно не нужен, а желателено бы его земенить на 0 или убрать.
     

    Цитата:
    но при добавлении %time% в имя (в конец) пробел перед 9 уходит и результ такой "rezerv_error_copy_9.36 .rar" пробел остается только в конце.

    на само деле результат твоего кода - будет такой: "rezerv_error_copy_ 9.36  .rar"
    пробел перед 9 остался потому что ты его никуда не убирал,а после 36 пробел лепится потому что ты сеты без кавычек пишешь, причем пишешь невнимательно - добавил пробел в конце строки set timenew=%time:~0,-3%  

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

    Цитата:
    при тексте
    в результате:  
    добавь перед тестом строку
    set "time= 9:00:00,00"
    раз уж тебе влом проверять переставляя время на 9 часов. и посмотри на результат ещё раз.
     
    правильно код, который ты хотел написать, пишется примерно так

    Код:
    set "time= 9:00:00,00"
    set "timenew=%time:~0,2%.%time:~3,2%"
    rename rezerv_OTData_half-hour.rar "rezerv_error_copy_time-%timenew: =0%.rar"  

     
    или так

    Код:
    set "time= 9:00:00,00"
    set "timenew=%time:~0,2%.%time:~3,2%.%time:~6,2%"
    rename rezerv_OTData_half-hour.rar "rezerv_error_copy_time-%timenew: =%.rar"  
    понятно что строка set "time= там только для теста утреннего времени
     
    Добавлено:
    mugil_cephalus

    Цитата:
    GetPIDs Find the current batch file's Process ID  
    интересная тулза

    Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 21:27 04-06-2010 | Исправлено: wolf0425, 01:00 05-06-2010
    Altus

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Den13V
    wolf0425
    вот блин. ожидая копипаст, специально засунул в тег "code".
    не помогло =) надо наверно, ещё ентер в конце тыкать.

    Код:
    1
    2
    3
     

    пробел на новой строке ни на что не повлияет, да и эту строку всё равно грохнут.

    Всего записей: 328 | Зарегистр. 06-09-2006 | Отправлено: 23:32 04-06-2010 | Исправлено: Altus, 23:34 04-06-2010
    wolf0425



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Altus у тебя то там пробела нет, по крайней мере сейчас - т.е. это самодеятельность Den13V, причем непонятно откуда взявшаяся - пробел влеплен в первую строку из трех, на глюк копипаста не тянет.
    А вообще чтоб об такие пробелы не спотыкаться - надо и приучать себя ставить кавычки у всех подозрительных сетов, с ними спокойнее и код лучше контролируется чем на концевые пробелы.
     
     

    Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 23:58 04-06-2010 | Исправлено: wolf0425, 00:03 05-06-2010
    Altus

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    wolf0425
    В тексте нет, но после копипаста появляется именно в последней строке. Может ещё от браузера зависит? У меня FF.
    А с кавычками Вы правы. Так было бы надёжнее.

    Всего записей: 328 | Зарегистр. 06-09-2006 | Отправлено: 09:49 05-06-2010 | Исправлено: Altus, 09:50 05-06-2010
    wolf0425



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    да, за пробел в конце последней строки надо благодарить FF - сравнил, после копирования Айроном пробела в клипборде нет.
    А вот откуда у клиента пробел в конце первой строки взялся - это ниразу не объясняет.

    Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 11:12 05-06-2010 | Исправлено: wolf0425, 12:34 05-06-2010
    ComradG



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Ну что, товарищи! Проблема с созданием ярлыка из командной строки решилась (68%). Вероятно вам интересно знать каким обзом? Для начала приведу простой батник:

    Код:
     
    @echo off
    setlocal
    set verify=reg query hkcu\software\far
    2>nul %verify% > nul
    if %errorlevel%==1 (
     echo There are nor Far items.
     goto:eof
    ) else if %errorlevel%==0 (
     echo Right, there are Far items.
     goto:eof
    )
    endlocal
    exit /b
     

    Да, верно! несколько не по сабжу. Но приглядитесь внимательней к третьей строчке. Все мы прекрасно знаем, что в качестве переменной можно создавать не только фиксированное значение, скажем, путь или файл, но и некоторое действие. А теперь перечитайте мой пост, где я описывал создание ярлыка с помощью PowerShell: по сути там создается переменная оснастки WSHShell. Теперь, внимание, черный ящик. Пам-пам-пара-па-па-пам, пара-па-па-па-па-пам!.. Если мы несколько извра... эээээ... скажем, просто попытаемся обратиться к WSHShell, используя синтаксис чем-то схожий с vbs, который, как выянилось, командный интерпретатор перемалывает за милую душу, то получим то, что лежит в черном ящике. (То бишь ярлык).
    Теперь о багах и почему я не привожу "отработанный" батник?
    Батник не стабилен, и в свободное от работы время я все еще занят тем, что пытаюсь пофиксить в нем баги, а не выкладываю потому, что на форуме достаточно таких, кто через копипаст рисует батники и не задумывается об их содержимом (простите, если кого обидел, но мне уже были предъявы на одной из прочих ветвей форума). Отнеситесь с пониманием, свои наработки от вас я укрывать не намерен.
    На последок - имитация тулзы now.exe из набора Windows Server 2003 Resource Kit:

    Код:
     
    @echo off
    setlocal
    set now=%time:~0,2%:%time:~3,2%:%time:~-5,2%
    for /f "tokens=1,2,3 delims=." %%i in ('date /t') do (
      set day=%%i
      set mon=%%j
      set yer=%%k
      )
    if %mon% == 01 (
      set mon=Jan ) else if %mon% == 02 (
      set mon=Feb ) else if %mon% == 03 (
      set mon=Mar ) else if %mon% == 04 (
      set mon=Apr ) else if %mon% == 05 (
      set mon=May ) else if %mon% == 06 (
      set mon=Jun ) else if %mon% == 07 (
      set mon=Jul ) else if %mon% == 08 (
      set mon=Aug ) else if %mon% == 09 (
      set mon=Sep ) else if %mon% == 10 (
      set mon=Oct ) else if %mon% == 11 (
      set mon=Nov ) else if %mon% == 12 (
      set mon=Dec
      )
    echo %mon% %day% %now% %yer%
    endlocal
    exit /b
     

    Думаю, можно использовать в качестве примера обработки данных времени.

    Всего записей: 2041 | Зарегистр. 05-07-2008 | Отправлено: 19:47 05-06-2010
    01MDM



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ComradG
    Ярлык то как создается? С помощью cscript?
    По поводу месяца, то можно обработать так (исходя из твоего примера):

    Код:
     
    set /a "month=1%month%-100"
    for /f "tokens=%month%" %%i in ("Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec") do set "month=%%i"
     


    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 21:01 05-06-2010 | Исправлено: 01MDM, 21:07 05-06-2010
    ComradG



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

    Цитата:
    Ярлык то как создается? С помощью script?

    С помощью обычного батника.

    Цитата:
    for /f "tokens=%month%" %%i in (Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec) do set "month=%%i"

    Можно и так, просто то, как ты советуешь было испробавано давно, в некоторых системах, например 2k8, наблюдались баги.

    Всего записей: 2041 | Зарегистр. 05-07-2008 | Отправлено: 21:06 05-06-2010
    01MDM



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

    Цитата:
    в некоторых системах, например 2k8, наблюдались баги.

    Не должно быть. Я немного исправил, заключил все в кавычки, на XP и 7 все работает.

    Цитата:
    С помощью обычного батника.

    Ну так покажи батник.  
     

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 21:12 05-06-2010
    ComradG



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

    Цитата:
    Я немного исправил, заключил все в кавычки, на XP и 7 все работает.

    Теперь знай, что на 2k8 этот трюк не совсем прокатывает.

    Цитата:
    Ну так покажи батник.

    Ты перечитай мой пост, почему я пока его не могу показать. Когда все отшлифую, покажу, а с багами - не хочу. Пока толко могу указать в сторону синтаксиса vbs'ок и powershell'а.
     
    Добавлено:

    Цитата:
    Пока только могу указать в сторону синтаксиса vbs'ок и powershell'а.

    Имеется ввиду общий концепт синтаксиса.

    Всего записей: 2041 | Зарегистр. 05-07-2008 | Отправлено: 21:17 05-06-2010
    01MDM



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

    Цитата:
    Теперь знай, что на 2k8 этот трюк не совсем прокатывает.

    Что не прокатывает? Там другая cmd?

    Цитата:
    Пока толко могу указать в сторону синтаксиса vbs'ок и powershell'а.

    Зачем тогда батник? Напиши link.ps1 и пользуйся.
     

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 21:25 05-06-2010
    ComradG



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Давай не будем разводить флейм. Еще раз внимательно перечитай мой пост, пожалуйста. Я не про PowerShell говорю, а про батник, в котором используется "перекрестный" синтаксис, который, как оказывается, воспринимается командным интерпретатором, например:

    Код:
     
    VBScript
    Set WSHShell = WScript.CreateObject("WScript.Shell")
     
    Batch File
    set WSHShell = "WScript.Shell"
     

    Это я тебе конечно довольно грубый пример привел, так как делается все там несколько по-другому. Предвижу кривую ухмылку, дескать такое невозможно и т.д. Я тоже так думал пока не развинтил shell32.dll, но стоит попробовать копать в данном направлении, как поражаешься тому, что от нас утаивает винда и мелкософт вцелом.

    Цитата:
    Что не прокатывает? Там другая cmd?

    Командный интерпретатор серверной винды действительно немного устроен иначе.

    Всего записей: 2041 | Зарегистр. 05-07-2008 | Отправлено: 21:46 05-06-2010
    Den13V



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Altus
    wolf0425
     
    Ребят, текст я набирал руками, поетому мог сам по запаре его ручками поставить (сори), в самом тексте у меня пробела нет.
     
    разобрался я с этой строкой, она просто заменяет пробел в конце результа, если ввести вместо " 0 " туже точку, результ таков rezerv_error_copy_time-9.36..rar (gj крайней мере у меня).

    Всего записей: 15 | Зарегистр. 08-07-2009 | Отправлено: 22:07 05-06-2010
    01MDM



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ComradG
    Ну так покажи батник с "перекрестным" синтаксисом.

    Цитата:
    Командный интерпретатор серверной винды действительно немного устроен иначе.

    Proof? Покажи скриншот a-la:


    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 22:15 05-06-2010
    mugil_cephalus

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

    Цитата:
    в котором используется "перекрестный" синтаксис

    заинтриговали, как ноу-хау  
    ComradG
    есть еще почта    

    Всего записей: 1072 | Зарегистр. 07-09-2009 | Отправлено: 23:13 05-06-2010
    wolf0425



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Den13V
    Цитата:
    разобрался я с этой строкой, она просто заменяет пробел в конце результа, если ввести вместо " 0 " туже точку, результ таков rezerv_error_copy_time-9.36..rar (gj крайней мере у меня).
    ну да, строка заменяет все пробелы timenew на 0, это её единственная задача.
    причем пробела в конце timenew быть не должно, соответственно и точке/нулю там браться неоткуда.
    если у тебя там пробел есть - то это из-за пренебрежения кавычками в предыдущих строках.
    а пробел в первом символе timenew - бывает до 10:00, и для борьбы c ним эту строку и писали.
    Куда у тебя девается пробел перед 9 - вопрос интересный, мне пока кажется что ты тестируешь с каким-то другим временем, отличным от %time%
     
    Добавлено:
    ComradG

    Цитата:
    Командный интерпретатор серверной винды действительно немного устроен иначе.
    на самом деле что-ли? А список функциональных отличий где посмотреть можно?
     
    глубокие мысли о том, что и в VBScript и в Batch File используются похожие английские буковки и в обоих есть команды с именем set, пусть и с разной функциональностью - как-то навевают на мысли о мировом заговоре...

    Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 00:58 06-06-2010 | Исправлено: wolf0425, 12:14 06-06-2010
       

    Страницы: 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 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199

    Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах 8
    vu1tur (04-09-2010 17:46): http://forum.ru-board.com/topic.cgi?forum=62&topic=21297


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru