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

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

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

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.51 до Windows 10) и command.com (DOS 5.0 и выше). Старые командные процессоры можно запускать на более новых ОС, хотя не всё может работать корректно. Подробная документация по командам cmd.exe и стандартным утилитам ОС для NT 3.51, NT 4.0, NT 5.0 (Windows 2000) и NT 5.2 (Windows Server 2003). Сборник представляет исторический интерес, а также незаменим для тех, у кого появилось желание сделать свои скрипты работоспобными не только на текущей версии ОС. Ссылки wdho.ru tinyupload.com dbree.org
 
· Сборник одним архивом: Сотни Win32 утилит командной строки, нетривиальные .cmd файлы, .bat miniperl скрипты (не требующие полноценной установки Perl), FAR Manager с плагинами и настройками, разное для DOS/DOSBox (откуда под Win32 интерес представляют три продвинутых "мультисистемных" .bat файла да ещё, может быть, оболочка Necromancer DOS Navigator с поддержкой LFN и доступом к буферу обмена Windows). Краткие описания всего - в файликах files.bbs

Всего записей: 38025 | Зарегистр. 26-02-2002 | Отправлено: 13:35 19-09-2020 | Исправлено: Maz, 07:16 24-04-2021
notinthewoods



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

Код:
dir D:\test\*.part /b >D:\test\List.txt
<D:\test\List.txt (set /p input_01=& set /p input_02=)
echo %input_01%
echo %input_02%

В папке test нужно вывести имена всех файлов *.part и двум первым в списке по алфавиту назначить переменные input_01 и input_02.
Задача решена путем создания промежуточного файла List.txt, который вызывает необходимость его последующего удаления.
Как получить требуемый результат без создания промежуточного файла?

Всего записей: 250 | Зарегистр. 31-01-2015 | Отправлено: 22:15 18-01-2022
Roman_Hayretdinov



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
notinthewoods, может быть так, в две строчки?

Код:
for /F "delims=" %A in ('dir D:\test\*.part /b') do set input_01=%A
for /F "skip=1 delims=" %A in ('dir D:\test\*.part /b') do set input_02=%A


Всего записей: 47 | Зарегистр. 19-12-2021 | Отправлено: 22:37 18-01-2022
GCRaistlin



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

Код:
 
if defined input_01 set input_01=
if defined input_02 set input_02=
color 00
for /f "delims=" %%A in ('dir D:\test\*.part /b') do (
  if not defined input_02 (
    if errorlevel 1 (set input_01=%%A) else set input_02=%%A
  )
)
 


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

Всего записей: 3480 | Зарегистр. 18-04-2005 | Отправлено: 22:42 18-01-2022
Fenrizz



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

Код:
@echo off
Setlocal EnableDelayedExpansion
 
for /f "tokens=*" %%A in ('dir /B /A:-D /O:N D:\test\*.part') do (
IF NOT "!input_01!"=="" IF "!input_02!"=="" set input_02=%%A
IF "!input_01!"=="" set input_01=%%A)
echo !input_01!
echo !input_02!
 

Всего записей: 565 | Зарегистр. 12-09-2017 | Отправлено: 22:52 18-01-2022
Roman_Hayretdinov



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

Код:
for /F "delims=" %%A in ('dir D:\test\*.part /b') do set input_01=%%A& goto Label1
:Label1
for /F "skip=1 delims=" %%A in ('dir D:\test\*.part /b') do set input_02=%%A& goto :EOF

Всего записей: 47 | Зарегистр. 19-12-2021 | Отправлено: 23:08 18-01-2022 | Исправлено: Roman_Hayretdinov, 23:11 18-01-2022
Fenrizz



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

Код:
@echo off
 
for /f "tokens=*" %%A in ('dir /B /A:-D /O:-N D:\test\*.part') do set input_01=%%A
for /f "tokens=*" %%A in ('dir /B /A:-D /O:-N D:\test\*.part') do IF NOT "%%A"=="%input_01%" set input_02=%%A
 
echo %input_01%
echo %input_02%

Всего записей: 565 | Зарегистр. 12-09-2017 | Отправлено: 23:18 18-01-2022 | Исправлено: Fenrizz, 23:19 18-01-2022
notinthewoods



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
GCRaistlin, Fenrizz, Roman_Hayretdinov, спасибо!
Варианты GCRaistlin, Fenrizz работают чётко)
Roman_Hayretdinov, мне так и не удалось получить нужный результат - окно cmd после запуска появляется и сразу исчезает:

Код:
@echo off
 
for /F "delims=" %%A in ('dir D:\test\*.part /b') do set input_01=%%A& goto Label1
 
:Label1
 
for /F "skip=1 delims=" %%A in ('dir D:\test\*.part /b') do set input_02=%%A& goto :EOF
 
echo %input_01%
echo %input_02%
 
pause

*****
Добавлено.
Roman_Hayretdinov, еще раз спасибо! Теперь всё понятно)

Всего записей: 250 | Зарегистр. 31-01-2015 | Отправлено: 00:13 19-01-2022 | Исправлено: notinthewoods, 00:30 19-01-2022
Roman_Hayretdinov



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
notinthewoods, там на самом деле все работает, вы просто добавили дополнительные команды после команды выхода из bat-файла (goto :EOF). Если хотите, чтобы доп. команды сработали, надо так:

Код:
@echo off
 
for /F "delims=" %%A in ('dir D:\test\*.part /b') do set input_01=%%A& goto Label1
 
:Label1
 
for /F "skip=1 delims=" %%A in ('dir D:\test\*.part /b') do set input_02=%%A& goto Label2
 
:Label2
 
echo %input_01%
echo %input_02%
 
pause


Всего записей: 47 | Зарегистр. 19-12-2021 | Отправлено: 00:19 19-01-2022 | Исправлено: Roman_Hayretdinov, 00:22 19-01-2022
insorg



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Есть папка с кучей файлов. Нужно на все файлы нулевого размера (исключительно их) навесить атрибут read-only при помощи батника.
Есть идеи, как это сделать культурно и однострочно?

Всего записей: 2932 | Зарегистр. 04-11-2010 | Отправлено: 19:11 21-01-2022
Inoz2000



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
for %%f in (*.*) do if %%~zf == 0 attrib +R "%%~f"

Всего записей: 3753 | Зарегистр. 23-04-2009 | Отправлено: 19:17 21-01-2022
Fenrizz



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

Код:
FORFILES /C "cmd /c IF @isdir==FALSE IF @fsize equ 0 echo @file & attrib +R @file"

Всего записей: 565 | Зарегистр. 12-09-2017 | Отправлено: 19:41 21-01-2022 | Исправлено: Fenrizz, 19:42 21-01-2022
insorg



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Inoz2000
Спасибо. Сработало.
 
Fenrizz
Интересный вариант.
 
И ещё вопрос вдогонку, чтоб два раза не вставать.
У меня есть .json файлик, в нём среди всех строк есть это
Код:
...
  },
  "version": "1.40.8",
  "web_accessible_resources": [
...
Имя "version" (с кавычками) уникальное, не повторяется.
 
Как можно вытащить числовое значение версии в переменную, с которой можно будет дальше работать?

Всего записей: 2932 | Зарегистр. 04-11-2010 | Отправлено: 22:22 21-01-2022 | Исправлено: insorg, 22:24 21-01-2022
Fenrizz



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
insorg
Если по-правильному, то с помощью jq - https://stedolan.github.io/jq/manual/
если без сторонних утилит, то можно попытаться распарсить средствами команды for

Код:
for /f "tokens=*" %%A in ('find /i "version" file.json"') do set version=%%A
set version=%version: =%
echo %version:~12,-2%

Всего записей: 565 | Зарегистр. 12-09-2017 | Отправлено: 22:25 21-01-2022 | Исправлено: Fenrizz, 22:40 21-01-2022
Inoz2000



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
for /f tokens^=4^ delims^=^" %%v in ('find/i """version""" manifest.json') do SET version=%%v

----------
Мы все умрём. (-:

Всего записей: 3753 | Зарегистр. 23-04-2009 | Отправлено: 22:38 21-01-2022 | Исправлено: Inoz2000, 23:04 21-01-2022
insorg



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Супер.
А можно как-то исключить вариант ложного срабатывания на соседние "***_version" ?
Т.к. само по себе  "version":     уникально только при условии поиска целиком с кавычками, а есть и другие строки с таким концом (например, manifest_version).

Всего записей: 2932 | Зарегистр. 04-11-2010 | Отправлено: 22:55 21-01-2022 | Исправлено: insorg, 22:55 21-01-2022
Inoz2000



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

Цитата:
Имя "version" (с кавычками)  

исправил

Всего записей: 3753 | Зарегистр. 23-04-2009 | Отправлено: 23:04 21-01-2022
insorg



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

Всего записей: 2932 | Зарегистр. 04-11-2010 | Отправлено: 23:48 21-01-2022
insorg



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

Цитата:
for %%f in (*.*) do if %%~zf == 0 attrib +R "%%~f"

Не работает в папках с пробелами в пути. Как решить?

Всего записей: 2932 | Зарегистр. 04-11-2010 | Отправлено: 21:22 23-01-2022
bomzz

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
insorg
@ECHO OFF
COLOR 9F
cd /d %~dp0
for %%f in (*.*) do if %%~zf neq 0 attrib +R %%f
pause & goto :eof
у меня работает

Всего записей: 3338 | Зарегистр. 29-03-2016 | Отправлено: 21:54 23-01-2022
insorg



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

Код:
for %%f in ("D:\Work configs\*.*") do if %%~zf == 0 attrib +R "%%~f"  

Вот так заработало.

Всего записей: 2932 | Зарегистр. 04-11-2010 | Отправлено: 22:09 23-01-2022 | Исправлено: insorg, 22:10 23-01-2022
Открыть новую тему     Написать ответ в эту тему

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

Компьютерный форум 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