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

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

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

Maz



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

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

Всего записей: 39068 | Зарегистр. 26-02-2002 | Отправлено: 22:41 20-06-2024 | Исправлено: Maz, 21:52 28-09-2024
GCRaistlin



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
komputeryuzer
У вас в примере нет FOR.
Чтобы понять, почему не работает, нужно проверить, чему на самом деле равна строка, которую вы сравниваете.
 
Но вообще, внимательно читайте справку. Пробуйте понять синтаксис на простых примерах (собственных). Наугад вы ничего не добьетесь.

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

Всего записей: 4113 | Зарегистр. 18-04-2005 | Отправлено: 17:57 22-06-2024
www_world

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
komputeryuzer
Цитата:
где, что проверить..  
Напр. вставьте в месте появления переменной что-то типа
Код:
echo  %cd:~-4%
pause
или
Код:
echo  %cd:~-4% >var1.txt
и т.п
 
ziken
Цитата:
писать/написать - это обычные глаголы из русского языка, а не команды.
Ну, теперь понятно, почему у вас проблемы с "простенькими меню"/"менеджерами закачек" в виде батников.  Подробнее...
Однако, пишу по другой причине: вам предложили два варианта батников. Как вам ни удивительно, но второй - тоже полноценный вариант, который не так прост, как кажется, и его написание, априори, под силу не любому, если раньше он с таковыми не встречался.
Но вместо, например, формальной благодарности или, на худой конец, пояснений, насколько предложенные вам варианты коррелируют с вашими хотелками, вы пытаетесь уличать помощников, да еще и безграмотным способом. А теперь задайте себе самому вопрос - вы стали бы кому-либо помогать, если подобное отношение проявил проситель к вам? Очень сомневаюсь.

Всего записей: 488 | Зарегистр. 04-11-2018 | Отправлено: 18:48 22-06-2024 | Исправлено: www_world, 18:50 22-06-2024
komputeryuzer

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
GCRaistlin
Цитата:
У вас в примере нет FOR.
ectь, вот он
for %I% in (%cd%) do cd ..  
а во втором примере не фор , а гото - и там-то как-раз все работает
 

Цитата:
чему на самом деле равна строка, которую вы сравниваете.  

как раз-то незнаю, что я сравниваю, с чем я сравниваю, где я сравниваю..
 
 

Цитата:
 внимательно читайте справку. Пробуйте понять синтаксис

 
Читал уже, вот хелп
FOR %переменная IN (набор) DO команда  
 
непонятно что за переменная, откуда взялась,  
непонятно что за набор, где взять
непонятно, почему % только с одной стороны..
там ещё есть с непонятной точкой в конце переменной
внятных примеров нет, можно было бы пощупать
 

Цитата:
.........................
 %переменная Однобуквенный подставляемый параметр.
  (набор)      Определяет набор, состоящий из одного или нескольких
                    файлов.  Допускается использование подстановочных
                    знаков.
  команда      Команда, которую следует выполнить для каждого файла.
  параметры    Параметры и ключи для указанной команды.
 
В пакетных файлах для команды FOR используется запись
 %%переменная вместо %переменная. Имена переменных
 учитывают регистр букв (%i отличается от %I).
 
Если включена расширенная обработка команд, поддерживаются
следующие дополнительные формы команды FOR:
 
FOR /D %переменная IN (набор) DO команда [параметры]
 
    Если набор содержит подстановочные знаки, команда выполняется
    для всех подходящих имен каталогов, а не имен файлов..............................
 

 
 
www_world
Цитата:
Напр. вставьте в месте появления переменной что-то типа
Код:
echo  %cd:~-4%
pause  
Делал уже многократно, когда батник писал, который заработал заработал
 
пробую:
>for Windows not in (%cd:~-4%) do cd ..
Непредвиденное появление: Windows.  
мне надо фор в командной строке, а не в батнике (в батнике уже сделал, но батник в конце все сводит на нет
 
Ладно, понятно, извините.

Всего записей: 806 | Зарегистр. 21-04-2010 | Отправлено: 21:06 22-06-2024
BorlandIMHO

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
komputeryuzer
Если хотите чтобы вам помогли - дайте нормальное ТЗ: что есть и что хотим поиметь в результате.
Гадать по кускам {нерабочего, по вашим же словам} кода - можно долго и {с вероятностью около 100%}  безрезультатно...

Цитата:
for Windows not in (%cd:~-4%) do cd ..

"Венда, сцуко, ну ты уже сделай, чё я думаю"

Всего записей: 2584 | Зарегистр. 12-10-2006 | Отправлено: 21:41 22-06-2024
www_world

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

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


for /f  %i in ('dir /a-d /b d:\TMP\PDF_Test\mupdf-1.23.0-windows\*') do echo %i
 
то же самое словами
 
для  каждого элемента (%i) из голого построчного списка файлов с аттрибутом архивный, исключая подпапки (dir /a-d /b), находящихся в папке d:\TMP\PDF_Test\mupdf-1.23.0-windows\ вывести на экран сообщение с каждым этим элементом (echo %i), то есть в данном случае именем файла из списка.

Всего записей: 488 | Зарегистр. 04-11-2018 | Отправлено: 22:23 22-06-2024
Death_INN

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

Код:
>>%outFile% findstr /S /I /N /O /C:"!val!" *.*

В файл не должна добавляться строка, длиною более 450 символов. Как это осуществить?

Всего записей: 3529 | Зарегистр. 24-10-2002 | Отправлено: 00:49 23-06-2024
komputeryuzer

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

 
вот такой бат фаил заработал в вин11+фар:
:уп
сд ..
if %cd:~-4%==Logs (goto eof) else goto up
 
(легко поднимается с любого уровня вложенности до папки "логс")
надо вытащить в командную строку виндовс.
Почему надо?  
Потому что внутри батника усёгут, но после выхода из батника опять проваливаюсь обратно в пропасть
(тоже самое, оказывается, происходит с ехе программой)
 
нашёл вот такую команду
FOR %переменная IN (набор) DO команда
пытаюсь соорудить нечто такое
>for Logs not in (%cd:~-4%) do cd ..  
Непредвиденное появление: Logs.  
 
В чатжпт не обращался, интересно самому разобраться.
Нет нигде внятного синтаксиса фор, где и как переменная, что за переменная, что и как набор, где и как они сличаются..
И примеров нет, можно было бы разобраться интуитивно, методом научного тыка
 
Потом эту конструкцию собираюсь вставить в один записанный макрос фара.
 
Добавлено:
Оппа.. По вашему примеру вот это показывает что то вменяемое..
for %i in (%cd:~-4%) do echo %i
 
Теперь как вставить сравнение:
если &и "не равно" "чему-то"
тогда всё, задача (возможно) решится

Всего записей: 806 | Зарегистр. 21-04-2010 | Отправлено: 00:52 23-06-2024
www_world

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
komputeryuzer
Цитата:
Теперь как вставить сравнение:
если &и "не равно" "чему-то"
тогда всё, задача (возможно) решится

if /?
 
Death_INN
Цитата:

Код:
>>%outFile% findstr /S /I /N /O /C:"!val!" *.*
В файл не должна добавляться строка, длиною более 450 символов. Как это осуществить?
Грубый, но простой метод:
сделайте %outFile% промежуточным файлом %tmpFile% и добавьте пару операций над ним
Код:
SET "len=..........."
findstr /v /r /c:"%len%" %tmpFile% >> %outFile%
del %tmpFile%
"..........." - число точек должно быть равно длине строки; будут выведены все строки короче этой длины

Всего записей: 488 | Зарегистр. 04-11-2018 | Отправлено: 02:33 23-06-2024 | Исправлено: www_world, 04:25 23-06-2024
Death_INN

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
www_world, промежуточный файл думаю понадобится и удалять не буду. В него выведу все строки, а в конечный файл уже строки с длиной не более 450 символов. Попробую еще через for с условием if "!str:~450,1!" == ""

Всего записей: 3529 | Зарегистр. 24-10-2002 | Отправлено: 12:30 23-06-2024
ziken



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

Цитата:
Ну, теперь понятно, почему у вас проблемы с "простенькими меню"/"менеджерами закачек" в виде батников.  Подробнее...
Однако, пишу по другой причине: вам предложили два варианта батников. Как вам ни удивительно, но второй - тоже полноценный вариант, который не так прост, как кажется, и его написание, априори, под силу не любому, если раньше он с таковыми не встречался.
Но вместо, например, формальной благодарности или, на худой конец, пояснений, насколько предложенные вам варианты коррелируют с вашими хотелками, вы пытаетесь уличать помощников, да еще и безграмотным способом. А теперь задайте себе самому вопрос - вы стали бы кому-либо помогать, если подобное отношение проявил проситель к вам? Очень сомневаюсь.

У меня тут проблемы только с душнилами и занудами, которым приходится по несколько раз объяснять одно и то же и которые отнимают моё время тем, что я даже не просил/не спрашивал. При этом ещё и требуют благодарности за что-то.

Всего записей: 617 | Зарегистр. 04-02-2017 | Отправлено: 13:37 23-06-2024
xrun1



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

Цитата:
вот такой бат фаил заработал в вин11+фар:

Вы хотите после выхода из батника поменять директорию в Far, из которой батник запускали? Тогда Вам в тему по Far, в батнике из командной строки папка меняется.
Ссылка
Или попробуйте задать в батнике перед выходом команду CD ~. Но лучше, опять же, спрашивать в профильной теме по Far.

Всего записей: 821 | Зарегистр. 26-12-2009 | Отправлено: 14:43 23-06-2024 | Исправлено: xrun1, 15:02 23-06-2024
Pasha_ZZZ



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

Всего записей: 12749 | Зарегистр. 11-03-2002 | Отправлено: 14:45 23-06-2024
komputeryuzer

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

for %i in (%cd:~-4%) do if not %i==Logs cd ..  
вот так срабатывает только один раз..
сделать искусственный набор чтоли? 1-100
тогда как прервать? сделать i=100? такое возможно?

Всего записей: 806 | Зарегистр. 21-04-2010 | Отправлено: 15:13 23-06-2024
ziken



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

Цитата:
Тут проблема только с одним аутистом, который из батника хотел менеджер закачек сделать... Совсем бестолковый кретин попался  

А как ещё объяснить суть батника, который качает один файл за другим по разным ссылкам?  
Жду ответа. Посмотрим, какой ты не аутист и не бестолковый кретин.  
 

Цитата:
Менеджер загрузок (англ. download manager) — компьютерная программа, предназначенная для загрузки файлов из Интернета или локальной сети.  

Специально для тебя определение из гугла дам, чтобы ты не обкакался с ответом.

Всего записей: 617 | Зарегистр. 04-02-2017 | Отправлено: 16:07 23-06-2024 | Исправлено: ziken, 16:08 23-06-2024
Death_INN

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

Код:
for /f "usebackq delims=" %%a in (`findstr /S /I /N /O /C:"!val!" *.*`) do (
  set str=%%a
  for /f "tokens=1-3* delims=:" %%b in ("%%a") do (
    >>%outFile% echo !str:%%d:= !
  )
)

 
К чему весь этот сыр бор? Выбивает глаз выводимые смещения,которые мне не требуются. Замена "967:" на " "
было:  dva\pritopa\tri\prihlopa.txt:55:967::test:yes(kuku) konez,
стало: dva\pritopa\tri\prihlopa.txt:55: :test:yes(kuku) konez,

Всего записей: 3529 | Зарегистр. 24-10-2002 | Отправлено: 17:47 23-06-2024 | Исправлено: Death_INN, 18:05 23-06-2024
www_world

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

Цитата:
for %i in (%cd:~-4%) do if not %i==Logs cd ..  
вот так срабатывает только один раз..
сделать искусственный набор чтоли? 1-100
тогда как прервать? сделать i=100? такое возможно?  

Вы бы словами описали, что вы хотите, типа  
у меня есть то-то (не батник, а например, такие-то папки с файлами и я хочу найти/заменить/прочитать и проч. то-то и там-то, чтобы в конце иметь то-то и то-то.
И тогда батник у вас уже давно бы был готовый.
Вам не нужно рассказывать, как реализовать батником вашу задачу путем, который вы придумали. Вам лишь нужно описать саму задачу, а оптимальный/правильный путь решения ее батником вам подскажут.
Не имеет значения - умная или глупая задача (по вашему мнению). Имеет значение лишь ее полная и достаточно точная формулировка. Скорее всего ваша задача решается несколькими строками батника, но, к сожалению, вы до сих пор ее не озвучили.
На текущий момент, ситуация выглядит так (аналогия): вы бегаете к врачу и прсите у него, то зеленки, то йода, то ваты, то костыль... и все это для своего больного родственника, которого не хотите показать врачу, поскольку вам кажется, что вы знаете, как его лечить. А у родственника, скажем, эмфизема легких и поэтому, он скорее умрет, чем вы ему хоть как-то поможете без врача.

Всего записей: 488 | Зарегистр. 04-11-2018 | Отправлено: 18:34 23-06-2024
komputeryuzer

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
www_world
Цитата:
Вы бы словами описали, что вы хотите,

надо подниматься вверх по папкам до нужной папки
(в командной строке вин11, т.е. в фаре)
 
вот такой бат фаил легко поднимается с любого уровня вложенности до папки "логс" :
:уп
сд ..
if нот %cd:~-4%==Logs goto up
 
Оказалось, что батники/ехешники после завершения пользователю возвращают все  "как было"
(хотя xrun1 говорит, что у него папка меняется
Цитата:
попробуйте задать в батнике перед выходом команду CD ~.
)
 
Короче узнал про фор, кое-как разобрался (разбираюсь)
хочу нечто такое:
for %i in (1,1,999999999999999999) do if not %cd:~-4%==Logs (cd .. )елсе бреак  
 
дело за бреаком (вроде)
или пустышку ааааааа...... напишу ехо .. точно! ехо
или заставить тот батник менять папку
 
 
Добавлено:
www_world
Цитата:
ситуация выглядит так ....... не хотите показать

Извините.. Выше я описывал свои хотелки что мне надо переходить в соседнию папку в фаре (макрос уже записал, ещё хотелка - добавить туда "подъём")

Всего записей: 806 | Зарегистр. 21-04-2010 | Отправлено: 20:25 23-06-2024
www_world

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
komputeryuzer
Извините, но то, что вы написали - это не описание задачи, а поиск костыля для эмфиземы.
"Вам нужно подняться в папку":
cd ..\
и так столько раз, сколько вам нужно (мне неизвестно сколько, и как определить, когда хватит подниматься). Это решает вашу задачу? Сомневаюсь. Но таково ваше описание задачи.
Пока вы не сформулируете ВСЮ задачу словами, мы не продвинемся.
 
Могу лишь погадать. Например, вы могли бы воспользоваться таким
 
for /f %a in ('dir /ad /b /s x:\folder\* ^| findstr /x /r /c:".*\\logs"') do cd /d %a
 
x:\folder - папка, в которой на каком-то неизвестном низшем уровне находится подпапка \logs

Всего записей: 488 | Зарегистр. 04-11-2018 | Отправлено: 22:08 23-06-2024
Smitis



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

Цитата:
Оказалось, что батники/ехешники после завершения пользователю возвращают все  "как было"

Ничего они возвращают (если под "возвращением" вы имеете ввиду старую папку). Просто Вы запускаете из-под ФАРа, а в нём это так не работает.
 
Добавлено:

Цитата:
вот такой бат фаил легко поднимается с любого уровня вложенности до папки "логс"

Вангую, что если по пути встретится, скажем, NoLogs, то до Logs не поднимется.

----------
Разум когда-нибудь победит

Всего записей: 3403 | Зарегистр. 09-02-2003 | Отправлено: 22:24 23-06-2024
xrun1



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

Цитата:
в командной строке вин11, т.е. в фаре

Командная строка Window - это cmd.
Батник в cmd папку меняет. Ссылку на скрин дал в своём посте выше.
Одной строкой для for не обойдётесь. Да и какая разница, если хотите изменить папку в фаре? Там макрос нужен.
Играйтесь, но Вам это не поможет.
UPD: И как говорил выше, для фара можно попробовать добавить команду CD ~. Это команда для фаровских батников, в Windows такой нет. Я фаром лет 10 не пользуюсь, ставить и проверять не буду.

Всего записей: 821 | Зарегистр. 26-12-2009 | Отправлено: 23:12 23-06-2024 | Исправлено: xrun1, 23:17 23-06-2024
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

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


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

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

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru