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

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

Модерирует : gyra, Maz

articlebot (21-06-2016 11:40): Следующая часть - Командная строка, батники, сценарии (bat, cmd)  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452

   

Widok



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

 
Важно: копируя батник через буфер обмена из форума не забывайте удалять пробелы в конце каждой строки, т.к. в некоторых случаях из-за этого программа будет работать неправильно!!! Чтобы не копировались концевые пробелы из форума, жмите на ссылку "Редактировать" в посте, и уже из редактора копируйте батник без пробелов.
 
Примечание: Большие куски кода заключайте в тэг [more]  
 
Смежные темы:
В помощь системному администратору » Автоматизация администрирования
Microsoft Windows » Задачи на bat-файлах 12
 
Полезные ссылки
· Из Windows XP Professional Product Documentation:
» Описание Cmd.exe » Command shell overview
» Using batch files » Using batch parameters » Using filters » Using command redirection operators
 
· Уроки bat-аники (для начинающих): первый и второй
· Курс из 19 лекций "Командная строка и сценарии Windows"
· Попов А. Командная строка и сценарии Windows (PDF). Курс лекций для начинающих
· Бокалий В. Командная строка (pdf-брошюрка в 20 страниц)
· Александров А., Дибров А. Урок bat-аники (pdf)
· Уильям Р. Станек - Командная строка Windows. Справочник администратора
 
· Скрываем консольные окна
· cmdow — изменение параметров и видимости дос-окна, Статья в КОМПЬЮТЕРРАONLINE
· Набор GNU утилит для win32
· HS_Packet.zip - Пакет утилит для организации интерфейса в bat-файлах
· Использование ansi.sys
· blat — отправка почты из консоли
· Команды RunDll32
· Quick Batch File Compiler - Позволяет превратить ваш батник в независимое приложение
· Easy Batch Builder+Rus+Crack - Редактор BAT файлов.Через графический интерфейс программы вы сможете быстро конструировать пакетные файлы практически любой сложности. (В комплекте есть Лоадер созданный с помощью Sign Of Misery некоторые антивирусы обзывают его вирусом. Вам решать: ставить или не ставить) (ЗЕРКАЛО)
 
· Простой способ получать текущую дату всегда в одном формате (не зависит от языков и настроек) ещё и ещё
· Переход из 32-битной версии cmd.exe в 64-битную (1) (2)

Всего записей: 24190 | Зарегистр. 07-04-2002 | Отправлено: 16:29 03-03-2010 | Исправлено: regist123, 13:32 02-11-2015
res2001



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

Цитата:
после толстого намека поленился.

да, ересь нашел про <0 ты прав, так и работает как ты написал.
 

Цитата:
и что же это за причина тебе померещилась?  

причина стандартная - переменные в теле цикла подставляются только один раз при входе в цикл. С errorlevel та же история.
Вот я цикл для теста соорудил:

Код:
@echo off
setlocal enabledelayedexpansion
for %%a in (0 1 2) do (
    if %%a equ 0 (
        >nul dir
        if !errorlevel! equ 0 echo %%a Ok
    ) else if %%a equ 1 (
        2>nul dir \\\
        if !errorlevel! neq 0 echo %%a error
    ) else if %%a equ 2 (
        >nul dir
        if !errorlevel! equ 0 echo %%a Ok
    )
)
 

 
 
Добавлено:
причем со скобками в твоем примере с подстановкой все путем, а вот в цикле - облом.

Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 17:25 17-07-2010
wolf0425



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

Цитата:
причем со скобками в твоем примере с подстановкой все путем, а вот в цикле - облом.
да в общем-то и с циклом замечательно работает
с теми скобками дурит в цикле call почему-то, а не if errorlevel
держи цикл
Код:
@echo off
for %%a in ( . : \ ) do (
    0>nul set /p="testing cd %%a "
    2>nul cd %%a
    if Errorlevel 1 0>nul set /p="Error!"
    echo.
)

почему из call в цикл не вертается errorlevel - хз.
 

Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 19:27 17-07-2010 | Исправлено: wolf0425, 19:55 17-07-2010
ComradG



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

Цитата:
почему из call в цикл не вертается errorlevel

он не умеет возвращать данные, загружаемые в память, а errorlevel удерживается в памяти

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



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

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

Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 22:06 17-07-2010
ComradG



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

Всего записей: 2041 | Зарегистр. 05-07-2008 | Отправлено: 22:10 17-07-2010 | Исправлено: ComradG, 22:12 17-07-2010
wolf0425



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

Цитата:
переменные в памяти находятся до определенного момента,  
и  кто определяет момент?
 
нарисовал ещё тест - errorlevel успешно возвращается:

Код:
@echo off
for %%a in ( 0 1 -1 3) do (
    call :_err %%a
    if errorlevel 1 echo error at code %%a
)
goto :eof
 
:_err
exit /b %1
 

барабашки, пробую вспомнить как выглядел нерабочий вариант

Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 22:17 17-07-2010
ComradG



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
wolf0425
а на что тебе вторая часть? я же тебе написал, что если указано условие, при котором четко определено время жизни переменной, она будет висеть в памяти до оговоренного условием времени; если нет - она выгружается. теперь понятно?

Всего записей: 2041 | Зарегистр. 05-07-2008 | Отправлено: 22:27 17-07-2010
res2001



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
wolf0425
Блин, вчера топтался по одним и тем же граблям все время
Вспомнил не рабочий вариант?
 
ComradG

Цитата:
переменные в памяти находятся до определенного момента, и если нет дополнительных условий - автоматом удаляются.


Цитата:
что если указано условие, при котором четко определено время жизни переменной

внутри батника определить время жизни переменной можно либо используя setlocal\endlocal либо руками удалив переменную "set vars=".
В примерах же не было ни того ни другого, так что переменные все время находились в памяти.
 

Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 08:43 18-07-2010
wolf0425



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

Цитата:
Вспомнил не рабочий вариант?  
неа, но я не особо старался -думал может ты напомнишь
будет время ещё раз попробую

Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 10:33 18-07-2010
mugil_cephalus

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

Цитата:
переменные в памяти находятся до определенного момента, и если нет дополнительных условий - автоматом удаляются.

переменые хранятся до закрытия консоли, батниках, вызванных через call из этой консоли , за исключением вариантов res2001

Цитата:
внутри батника определить время жизни переменной можно либо используя setlocal\endlocal либо руками удалив переменную "set vars=".  
В примерах же не было ни того ни другого, так что переменные все время находились в памяти.  
 

какой countdown отсчитывает времы их жизни ? почитай хелп
 
Добавлено:
wolf0425

Цитата:
почему из call в цикл не вертается errorlevel - хз.  
 

а какой errlvl : errorlevel в call не возвращается ( он "принадлежит" if`u ) , а %errorlevel% - возвращ.  

Код:
exit /b %errorlevel%

Всего записей: 1072 | Зарегистр. 07-09-2009 | Отправлено: 11:19 18-07-2010 | Исправлено: mugil_cephalus, 12:54 18-07-2010
wolf0425



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

Цитата:
а какой errlvl : errorlevel в call не возвращается  
да вчера по жаре, когда Рес сказал что мой код код со скобками работает  а он же с фором - нет, я по быстрому прикрутил какой-то фор к тем скобкам и что-то увидел. неправильное. в смысле - отсутствие внутри скобок реакции на возвращаемую ошибку. мысленно кивнул ресу, подивился затейливости глюка, после чего нарисовал пример цикла без call - он сразу заработал как ожидалось, запостил его сюда.
так вот что я там за глючащий фор наваял - история не сохранила, сегодня вроде всё что придумываю - работает, наверно придется на перегрев списывать - или компа или меня. жара достала ппц.

Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 13:20 18-07-2010 | Исправлено: wolf0425, 13:28 18-07-2010
mugil_cephalus

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
wolf0425
вот еще "мираж"/мираж ( запускать в консоли )
файл %.cmd

Код:
@echo off
mode con lines=6000
echo Hello, we are in
rem Рекурсивный вызов, %~0 раскроется два раза
call %%~0
 

пытаюсь объяснить ComradG , что переменные ( что не в реестре, хранятся в каком то стеке ) ; ищу примеры...

Всего записей: 1072 | Зарегистр. 07-09-2009 | Отправлено: 13:32 18-07-2010 | Исправлено: mugil_cephalus, 13:42 18-07-2010
ComradG



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

Цитата:
что не в реестре, хранятся в каком то стеке

а я про что говорил? или я не совсем ясно выразил мысль?

Цитата:
переменые хранятся до закрытия консоли

это факт. а setlocal и endlocal - это свего рода "сборщики мусора".

Всего записей: 2041 | Зарегистр. 05-07-2008 | Отправлено: 14:41 18-07-2010 | Исправлено: ComradG, 14:42 18-07-2010
superman md



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Совсем не разбираюсь в bat, cmd нужно следующее, добавить файл bat или cmd не знаю, в winrar exe архив, чтобы после распаковки он добавил задание в планировщик на запуск в определённое время этого архива. Возможно ли вообще такое?  
Результат должен быть таким - запускается допустим Архив.ехе он распаковывается в какуюто папку, это я сделал, теперь нужен файл bat который добавит задание в планировщик запустить его скажем через месяц. Жду вашей помощи. ОС - Win XP

Всего записей: 1205 | Зарегистр. 27-06-2010 | Отправлено: 14:52 18-07-2010
wolf0425



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
mugil_cephalus
Цитата:
rem Рекурсивный вызов, %~0 раскроется два раза  
почему два то? у меня нормально "бесконечно" циклится, ждать когда чего-то там закончится  -влом только...
 
 
 
 

Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 16:56 18-07-2010 | Исправлено: wolf0425, 16:57 18-07-2010
res2001



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
superman md
смотри schtasks /? и schtasks /create /?

Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 22:15 18-07-2010
mugil_cephalus

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

Цитата:
Цитата:rem Рекурсивный вызов, %~0 раскроется два раза  
почему два то? у меня нормально "бесконечно" циклится, ждать когда чего-то там закончится  -влом только...  
 

http://www.rsdn.ru/article/winshell/NTCommandProcessor.xml#EFPAE ( 2-ой урок bat-аники ) Пример 9.3. Скрипт “%9_3%.bat”
 
Добавлено:
ComradG

Цитата:
а setlocal и endlocal - это свего рода "сборщики мусора".

да, это локализация области видимости переменных, если транслировать восточнославянскую метафору на batch семантику  
язык то не забываешь ?

Всего записей: 1072 | Зарегистр. 07-09-2009 | Отправлено: 10:18 19-07-2010 | Исправлено: mugil_cephalus, 10:22 19-07-2010
ComradG



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
mugil_cephalus
Языки программирования не забываю, а к чему собственно вопрос? И потом, относительно переменных.

Код:
@echo off
set a=7
 setlocal
  set a=1
  echo %a%
 endlocal
echo %a%
set a=
exit /b

Полагаю, тут ясно что к чему: глобальная переменная остается неизменной до тех пор, пока она не будет изменена в основном блоке батника.

Код:
@echo off
set a=7
 setlocal
  set a=1
  echo %a%
 endlocal
set /a a=7+2
echo %a%
set a=
exit /b

С этим разобрались (да и потом, ты знаешь все это сам). Теперь о жизненном цикле переменных. Здесь все немногим сложнее. Переменные, определяемые в паре лексем setlocal и endlocal помещаются в некоторую ячейку памати, в которой они существуют до достижения команды endlocal: достигнув оной они удаляются из памяти раз и навсегда. Так называемые глобальные переменные существуют в памяти до тех пор, пока они не будут выгружены из памяти вручную или не будет закрыто окно самой консоли. Если с последним все ясно, то относительного первого многие начинают спорить, дескать, память не может быть очищена ручную и т.д. Да, некотрые данные из памяти действительно невозможно удалить вручную, это касается впервую очередь мусора, который оставляет после себя обработчик for, но не set, - тут разве что и можно указать в сторону встроенного справочника относительно консоли.
А вот с call все обстоит несколько сложнее...

Всего записей: 2041 | Зарегистр. 05-07-2008 | Отправлено: 11:21 19-07-2010 | Исправлено: ComradG, 12:44 19-07-2010
mat86



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

Всего записей: 438 | Зарегистр. 19-03-2009 | Отправлено: 20:48 19-07-2010
01MDM



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

Код:
 
@echo off
 
pushd d:\1111
for /f "tokens=*" %%i in ('dir /b /a-d ^| findstr /v start.exe') do attrib +h "%%i"
popd
 


Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 21:47 19-07-2010 | Исправлено: 01MDM, 07:32 21-07-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 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452

Компьютерный форум Ru.Board » Компьютеры » Программы » Командная строка, батники, сценарии (bat, cmd)
articlebot (21-06-2016 11:40): Следующая часть - Командная строка, батники, сценарии (bat, cmd)


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

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

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru