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

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

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

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

Открыть новую тему     Написать ответ в эту тему

Maz



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

Важно: копируя батник через буфер обмена из форума не забывайте удалять пробелы в конце каждой строки, т.к. в некоторых случаях из-за этого программа будет работать неправильно!!! Чтобы не копировались концевые пробелы из форума, жмите на ссылку "Редактировать" в посте, и уже из редактора копируйте батник без пробелов.
 
Примечание: Большие куски кода заключайте в тэг [ more ].  

Смежные темы:
В помощь системному администратору > Автоматизация администрирования
Microsoft Windows > Сценарии Windows

Полезные ссылки:
· Из 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. Справочник администратора
 
· Выполнение BAT-скриптов без вызова окна консоли
· cmdow - изменение параметров и видимости дос-окна, Статья в КОМПЬЮТЕРРАONLINE
· Набор GNU утилит для win32
· HS_Packet.7z - Пакет утилит для организации интерфейса в bat-файлах
· blat - отправка почты из консоли
· Easy Batch Builder+Rus+Crack - Редактор BAT файлов.Через графический интерфейс программы вы сможете быстро конструировать пакетные файлы практически любой сложности. (В комплекте есть Лоадер созданный с помощью Sign Of Misery некоторые антивирусы обзывают его вирусом. Вам решать: ставить или не ставить) (ЗЕРКАЛО)
· Простой способ получать текущую дату всегда в одном формате (не зависит от языков и настроек) ещё и ещё
· Переход из 32-битной версии cmd.exe в 64-битную (1) (2)(3)
 
· Архив всевозможных версий cmd.exe (от Windows NT 3.10 до Windows 11 +Win95cmd +ReactOS) и command.com (DOS 5.0 и выше). Старые командные процессоры можно запускать на более новых ОС, хотя не всё может работать корректно. Подробная документация по командам cmd.exe и стандартным утилитам ОС для NT 3.51, NT 5.0 (Windows 2000) и NT 5.2 (Windows Server 2003). Сборник представляет исторический интерес, а также незаменим для тех, у кого появилось желание сделать свои скрипты работоспобными не только на своей версии ОС.
 
· Большой сборник одним архивом: Сотни Win32 утилит командной строки, нетривиальные .cmd файлы, .bat miniperl скрипты (не требующие полноценной установки Perl), FAR Manager с плагинами и настройками, разное для DOS/DOSBox (откуда под Win32 интерес представляют три продвинутых "мультисистемных" .bat файла да ещё, может быть, оболочка Necromancer DOS Navigator с поддержкой LFN и доступом к буферу обмена Windows). Краткие описания всего - в файликах files.bbs

Всего записей: 38165 | Зарегистр. 26-02-2002 | Отправлено: 13:35 19-09-2020 | Исправлено: metatrop, 07:55 29-11-2022
MaxDe20

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
https://postimg.cc/qtMq8mqy
 
есть батник чтоб все удалить цифры и точки и пробел?
на скрине нарисовал

Всего записей: 1 | Зарегистр. 19-09-2020 | Отправлено: 19:21 19-09-2020
BorlandIMHO

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
MaxDe20
Если "из имени файла удалить всё до первого пробела" - как два пальца об асфальт.  
Numbering_delete.cmd
Код:
@echo OFF
set "SOURCE_DIR=x:\path to\folder"
pushd "%SOURCE_DIR%" || call :ABORT "Папка "%SOURCE_DIR%" не существует или недоступна"
 
for /f "usebackq tokens=1,* delims= " %%A in (`dir /B /A:-D *`) do (
    ren "%%~A %%~B" "%%~B"
)
goto :EOF
 
:ABORT
echo %~1
echo Аварийное завершение работы
pause
exit


----------
http://www.imho.ws

Всего записей: 1747 | Зарегистр. 12-10-2006 | Отправлено: 20:29 19-09-2020
GCRaistlin



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
BorlandIMHO
А если 2 пробела подряд?

----------
Magically yours
Raistlin

Всего записей: 3640 | Зарегистр. 18-04-2005 | Отправлено: 20:36 19-09-2020
BorlandIMHO

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

Цитата:
А если 2 пробела подряд?

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

----------
http://www.imho.ws

Всего записей: 1747 | Зарегистр. 12-10-2006 | Отправлено: 20:48 19-09-2020
vasyosuol_24

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Помогите реализовать следующую задачку, посредством bat-файла:
В локальной сети имеется, допустим, 2-а компа. Пингуем комп №1 и, если ответ положительный, то копируем на него (на комп №1) файл. Если же ответ отрицательный - выполняем удалённое выключение (shutdown.exe /m \\№2 /s /f /t 0) компа №2.
Локалка домашняя, все права есть. Просто не могу сообразить, КАК

Всего записей: 905 | Зарегистр. 16-01-2013 | Отправлено: 06:46 20-09-2020
Fenrizz



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vasyosuol_24
 
for /f %%i in ('ping №1 ^| find /c "Превышен интервал ожидания для запроса"') do (
if %%i==0  copy C:\folder\file.txt \\№1\folder /Z /Y /V
if %%i gtr 0 shutdown.exe /m \\№2 /s /f /t 0  )
 
Файл должен быть в кодировке DOS!

Всего записей: 587 | Зарегистр. 12-09-2017 | Отправлено: 11:23 21-09-2020 | Исправлено: Fenrizz, 12:43 21-09-2020
vasyosuol_24

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Fenrizz
Это у меня практически уже есть. Мне нужно саму реализацию поведения ответа от команды ping.exe:
есть ответ - копируем файл, нет ответа - гасим №2
Правильно ли я понимаю: если комп №1 включен, то errorlevel будет 0?
Хотелось бы увидеть всю конструкцию полностью - чайниковат я в этом вопросе

Всего записей: 905 | Зарегистр. 16-01-2013 | Отправлено: 11:58 21-09-2020
Fenrizz



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Отредактировал первый пост.
 
Первоначальный вариант работал немного не так, как Вам нужно.
Условие if errorlevel 1 срабатывает если error level = 1 или больше (https://habr.com/ru/post/41028/)
 
Вот коды errorlevel команды copy:
 
Exit code  Description
=========  ===========
    0      Files were copied without error.
    1      No files were found to copy.
    2      The user pressed CTRL+C to terminate xcopy.
    4      Initialization error occurred. There is not
           enough memory or disk space, or you entered
           an invalid drive name or invalid syntax on
           the command line.
    5      Disk write error occurred.

Всего записей: 587 | Зарегистр. 12-09-2017 | Отправлено: 12:45 21-09-2020 | Исправлено: Fenrizz, 12:49 21-09-2020
vasyosuol_24

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Fenrizz
Чёт не работает И не пишет ничего, не могу посмотреть, в чём причина. Вот мой вариант, с xcopy (пробовал и ваш с copy - тоже самое, "тишина"):

Код:
 
for /f %%i in ('ping 192.168.2.33 ^| find /c "Превышен интервал ожидания для запроса"') do (
if %%i==0  xcopy /Y C:\file.txt \\192.168.2.33\D$\1\
rem if %%i gtr 0 shutdown.exe /m \\№2 /s /f /t 0  )  
if %%i gtr 0 notepad.exe

Запускаю простое копирование на \\192.168.2.33\D$\1\

Код:
@echo off
xcopy /Y C:\file.txt \\192.168.2.33\D$\1\

всё работает, пишет: "Скопировано файлов: 1."
Кодировка (пользуюсь Far Manager) - 866(OEM).

Всего записей: 905 | Зарегистр. 16-01-2013 | Отправлено: 13:43 21-09-2020 | Исправлено: vasyosuol_24, 13:44 21-09-2020
Fenrizz



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

Цитата:
for /f %%i in ('ping 192.168.2.33 ^| find /c "Превышен интервал ожидания для запроса"') do (  
echo %%i  
if %%i==0  xcopy /Y C:\file.txt \\192.168.2.33\D$\1\  
rem if %%i gtr 0 shutdown.exe /m \\№2 /s /f /t 0  )  
if %%i gtr 0 notepad.exe )  

Всего записей: 587 | Зарегистр. 12-09-2017 | Отправлено: 14:01 21-09-2020
RetroRocket



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vasyosuol_24
Можно без учёта кодировки сделать так:

Код:
set NODE_A=192.168.2.33
set NODE_B=192.168.2.34
set FILE_COPY=C:\file.txt
 
set COUNT=0
for /f %%A in ('"ping -n 5 -w 5000 %NODE_A%|find /i /c "TTL""') do (set COUNT=%%A)
echo Successful pings - %COUNT% of 5
if "%COUNT%" == "0" (
echo Node %NODE_A% is not available. Node %NODE_B% shutting down ... && shutdown.exe /m \\%NODE_B% /s /f /t 0
) else (
echo Node %NODE_A% is available. && xcopy /Y /H /Z %FILE_COPY% \\%NODE_A%\D$\1\
)

Делаем пять пингов и в ответах ищем слово "TTL".
Если из пяти пингов хотя бы один успешный (содержит слово "TTL" в ответе), то копируем файл.

----------
"... Зовёт, зовёт в дорогу далёкий Млечный Путь ..."

Всего записей: 2682 | Зарегистр. 02-01-2018 | Отправлено: 14:11 21-09-2020
GCRaistlin



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
RetroRocket
А errorlevel не проще проверить? Или вообще сразу копировать файл и по результатам копирования смотреть?

----------
Magically yours
Raistlin

Всего записей: 3640 | Зарегистр. 18-04-2005 | Отправлено: 14:17 21-09-2020
RetroRocket



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
GCRaistlin
Цитата:
А errorlevel не проще проверить? Или вообще сразу копировать файл и по результатам копирования смотреть?
Да я разве против? Вариантов решения задачи можно придумать несколько.
Свой вариант я использовал в ситуации с нестабильным соединением, когда узел пингуется (errorlevel будет 0), но с потерями.
При наличии потерь делал рестарт.

----------
"... Зовёт, зовёт в дорогу далёкий Млечный Путь ..."

Всего записей: 2682 | Зарегистр. 02-01-2018 | Отправлено: 14:27 21-09-2020
GCRaistlin



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

Цитата:
Свой вариант я использовал в ситуации с нестабильным соединением

Не имеет значения. Анализировать вывод команды без необходимости - это индусский подход.

----------
Magically yours
Raistlin

Всего записей: 3640 | Зарегистр. 18-04-2005 | Отправлено: 14:33 21-09-2020
RetroRocket



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
GCRaistlin
Цитата:
Не имеет значения. Анализировать вывод команды без необходимости - это индусский подход.
Почему без необходимости то? Мне нужно было оценить число успешных пингов из общего количества.
Для этого выхлоп команды пинг и проверял. Текущая локаль здесь не важна.
Впрочем, как скажете. Дискуссия с наклеиванием ярлыков неконструктивная.

----------
"... Зовёт, зовёт в дорогу далёкий Млечный Путь ..."

Всего записей: 2682 | Зарегистр. 02-01-2018 | Отправлено: 15:01 21-09-2020
GCRaistlin



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

Цитата:
Мне нужно было оценить число успешных пингов из общего количества.

Тогда возражение снимается. Я-то понял так, что вы схожую задачу решали подобным образом.

----------
Magically yours
Raistlin

Всего записей: 3640 | Зарегистр. 18-04-2005 | Отправлено: 15:27 21-09-2020
RetroRocket



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

 
Кнопка А не запала. Если просто открыть cmd, то всё чисто. WinXP, CHCP говорит 866.
Откуда такой выхлоп аа...аа идёт?

Добавлено:
Эффект ааааа вызывает tasklist, но не всех машинах и причина такого поведения непонятна.
 


----------
"... Зовёт, зовёт в дорогу далёкий Млечный Путь ..."

Всего записей: 2682 | Зарегистр. 02-01-2018 | Отправлено: 15:31 21-09-2020 | Исправлено: RetroRocket, 07:14 22-09-2020
vasyosuol_24

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

Цитата:
Скобку закройте.  

Семён Семёныч! (с)
Спасибо, заработало!
Вопрос, а вот это: "Превышен интервал ожидания для запроса"' - зачем нужно? Мне, в принципе, эту запись видеть без необходимости - если комп (№1) не откликается, фиг бы чей с ним, выключаем №2. Это я просто для проверки пока Блокнот запускал, забыв скобку при этом - думаю, и так всем понятно...
 
RetroRocket
Вариант интересный, записал себе в мемориз. Пока, правда, невостребован - не стоит усложнять без необходимости. У меня и так к концу дня уже "крыша в пути"...

Цитата:
Свой вариант я использовал в ситуации с нестабильным соединением, когда узел пингуется (errorlevel будет 0), но с потерями.  

В данном случае сеть стабильная - стабильнее некуда.

Всего записей: 905 | Зарегистр. 16-01-2013 | Отправлено: 15:35 21-09-2020
nikitos435

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

Код:
@echo off
SetLocal
 
net use M: /delete
 
net use M: "\\base1c\base1c" 45ujsdelwwgthe4gt_hjo3bsfhmHGfgfGFG /user:basec
 
taskkill /F /IM 1cv8s.exe /T
taskkill /F /IM 1cv8.exe /T
taskkill /F /IM 1cv8c.exe /T
 
set datetimef=%date:~-4%_%date:~3,2%_%date:~0,2%_%time:~0,2%_%time:~3,2%_%time:~6,2%
 
"C:\Program Files\1cv8\8.3.15.1830\bin\1cv8.exe" DESIGNER /F "M:\Base1C\Base 1C8 Вега" /DisableStartupMessage /DumpIB "E:\Backup_1C\Vega\Vega_%datetimef%.dt" /OUT "E:\Backup_Log\Vega.log" -NoTruncate
echo %datetimef% >> E:\Backup_Log\Vega.log
"C:\Program Files\1cv8\8.3.15.1830\bin\1cv8.exe" DESIGNER /F "M:\Base1C\Base 1C ГФ" /N "Администратор" /DisableStartupMessage /DumpIB "E:\Backup_1C\GF\GF_%datetimef%.dt" /OUT "E:\Backup_Log\GF.log" -NoTruncate
echo %datetimef% >> E:\Backup_Log\GF.log
"C:\Program Files\1cv8\8.3.15.1830\bin\1cv8.exe" DESIGNER /F "M:\Base1C\проект" /DisableStartupMessage /DumpIB "E:\Backup_1C\Proekt\TezaProekt_%datetimef%.dt" /OUT "E:\Backup_Log\Proekt.log" -NoTruncate
echo %datetimef% >> E:\Backup_Log\Proekt.log
"C:\Program Files\1cv8\8.3.15.1830\bin\1cv8.exe" DESIGNER /F "M:\Base1C\строй" /DisableStartupMessage /DumpIB "E:\Backup_1C\Stroy\Stroy_%datetimef%.dt" /OUT "E:\Backup_Log\Stroy.log" -NoTruncate
echo %datetimef% >> E:\Backup_Log\Stroy.log
"C:\Program Files\1cv8\8.3.15.1830\bin\1cv8.exe" DESIGNER /F "M:\Base1C\03032020" /DisableStartupMessage /DumpIB "E:\Backup_1C\83\83_%datetimef%.dt" /OUT "E:\Backup_Log\83.log" -NoTruncate
echo %datetimef% >> E:\Backup_Log\83.log
"C:\Program Files\1cv8\8.3.15.1830\bin\1cv8.exe" DESIGNER /F "M:\Base1C\свертка" /DisableStartupMessage /DumpIB "E:\Backup_1C\Svertka\Svertka_%datetimef%.dt" /OUT "E:\Backup_Log\Svertka.log" -NoTruncate
echo %datetimef% >> E:\Backup_Log\Svertka.log
 
net use M: /delete
 
pushd "E:\Backup_1C\Vega" && (forfiles /d -60 /m *.dt /c "cmd /c del /f /q @file")
popd
pushd "E:\Backup_1C\GF" && (forfiles /d -60 /m *.dt /c "cmd /c del /f /q @file")
popd
pushd "E:\Backup_1C\Proekt" && (forfiles /d -60 /m *.dt /c "cmd /c del /f /q @file")
popd
pushd "E:\Backup_1C\Stroy" && (forfiles /d -60 /m *.dt /c "cmd /c del /f /q @file")
popd
pushd "E:\Backup_1C\83" && (forfiles /d -60 /m *.dt /c "cmd /c del /f /q @file")
popd
pushd "E:\Backup_1C\Svertka" && (forfiles /d -60 /m *.dt /c "cmd /c del /f /q @file")
popd
 
shutdown /s /t 0
 
endlocal  

 
ПК ночью сам включается. Планировщик скрипт запускает. Но бэкапы баз 1С не делаются. в логах запись  
"Информационная база не обнаружена".
1С ночью никто не пользуется. Конфигуратор запускается. В брандмауэре запрещающих правил нет.
Подскажите по командам создания dt файла, где то я накосячил. Хотя раньше если скрипт руками запускать, то dt файлы делались. Сейчас ни одна база не сделалась, но в логах записи обновились

Всего записей: 204 | Зарегистр. 20-03-2012 | Отправлено: 09:17 22-09-2020 | Исправлено: nikitos435, 09:17 22-09-2020
Открыть новую тему     Написать ответ в эту тему

Страницы: 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

Компьютерный форум Ru.Board » Компьютеры » Программы » Командная строка, батники, сценарии - bat, cmd


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

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

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru

Рейтинг.ru