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

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

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

Maz (20-06-2024 22:42): Командная строка, батники, сценарии - bat, cmd (7 часть)  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

   

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

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



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

Это я совсем налажал в коде - выходил из цикла досрочно...
Исправил код выше:
поменял GOTO :EOF на GOTO :METKA1
И добавил :METKA1 в конец блока.

Всего записей: 2757 | Зарегистр. 15-12-2003 | Отправлено: 10:18 21-12-2020
Xant1k



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Fenrizz
Пробую через эксель разобраться. Но лучше встроенными средствами винды, если таковые есть.
 
Добавлено:
los
Там прям конкретно SORT винды, чё я unix sort не отличу)
 
Добавлено:
iNNOKENTIY21
Спасибо)
 
Я тебе ещё должен за замену байт ответить (с этим форумом древним без оповещении невозможно нормально общаться).

Всего записей: 2918 | Зарегистр. 20-02-2009 | Отправлено: 12:22 21-12-2020
GCRaistlin



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Xant1k
Можно пройтись по файлу - посчитать длины строк и создать массив "длина - номера строк с этой длиной". Потом перебрать элементы этого массива по убыванию, проходясь каждый раз по файлу снова и помещая в новый файл строки с соответствующими номерами. Ограничение: строки должны быть не длиннее 8191 символа.

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

Всего записей: 4128 | Зарегистр. 18-04-2005 | Отправлено: 12:39 21-12-2020
Milena88



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

Код:
GOTO :EOF

Это переход куда, или что это?

Всего записей: 73 | Зарегистр. 13-09-2017 | Отправлено: 15:23 21-12-2020
GCRaistlin



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

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

Всего записей: 4128 | Зарегистр. 18-04-2005 | Отправлено: 15:33 21-12-2020
YuS 2



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

Цитата:
Это переход куда, или что это?

:EOF - end-of-file

Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 16:20 21-12-2020
Milena88



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Спасибо GCRaistlin и YuS 2!

Всего записей: 73 | Зарегистр. 13-09-2017 | Отправлено: 20:43 21-12-2020
Xant1k



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
iNNOKENTIY21
Применил.. вывод в консоль есть, добавил запись в файл
Код:
echo %%a    > D:\Other\mylinks.txt
но сохраняет только последнюю, самую длинную строку
 
А чисто на пшелле как выглядит команды с записью в файл? Что-то типо этого
PowerShell.exe -ExecutionPolicy ByPass -command ". gc ssl.txt | sort -Property {$_.length}; Start-Transcript -Path "D:\Other\mylinks.txt" -NoClobber" у меня не работает.
 
И ещё можно сортировку по алфавиту добавить с учётом цифр и символов?
 
Ещё есть косяк(?) с кодировкой.. строки вида
http://0x1.tv/index.php?title=Категория:HasSpeaker&pageuntil=Методическая+поддержка+педагогов+по+переходу+на+российские+операционные+системы+семейства+«Альт»+—+направления+работы%2C+достигнутые+результаты%2C+планы+на+будущее+%28Татьяна+Губина%2C+OSEDUCONF-2019%29
 
http://89.218.140.251/ek/Попов%20С.А.%20Информационные%20технологии%20переводчика.pdf
 
становятся
 
http://0x1.tv/index.php?title=ђ?ђш‘'ђзђ?ђ?‘?ђс‘?:HasSpeaker&pageuntil=ђ?ђз‘'ђ?ђ?ђс‘Шђз‘?ђуђш‘?+ђхђ?ђ?ђ?ђз‘?ђђуђш+ђхђзђ?ђшђ?ђ?ђ?ђ?ђ?+ђхђ?+ђхђз‘?ђз‘:ђ?ђ?‘?+ђ?ђш+‘?ђ?‘?‘?ђсђь‘?ђуђсђз+ђ?ђхђз‘?ђш‘Еђсђ?ђ?ђ?‘<ђз+‘?ђс‘?‘'ђзђ?‘<+‘?ђзђ?ђзђь‘?‘'ђ?ђш+‚<ђ?ђ>‘?‘'‚>+ў?"+ђ?ђшђх‘?ђшђ?ђ>ђзђ?ђс‘?+‘?ђшђ+ђ?‘'‘<%2C+ђ?ђ?‘?‘'ђсђ?ђ?‘?‘'‘<ђз+‘?ђзђъ‘?ђ>‘?‘'ђш‘'‘<%2C+ђхђ>ђшђ?‘<+ђ?ђш+ђ+‘?ђ?‘?‘%ђзђз+%28ђчђш‘'‘?‘?ђ?ђш+ђ"‘?ђ+ђсђ?ђш%2C+OSEDUCONF-2019%29  
 
http://89.218.140.251/ek/ђ?ђ?ђхђ?ђ?%20ђц.ђ?.%20ђ?ђ?‘"ђ?‘?ђ?ђш‘Еђсђ?ђ?ђ?‘<ђз%20‘'ђз‘:ђ?ђ?ђ>ђ?ђ?ђсђс%20ђхђз‘?ђзђ?ђ?ђ?‘Шђсђуђш.pdf  
 
и в конце каждой строки добавился пробел.
 
-
Пока что самый лучший вариант который попался это

Код:
@echo off
setlocal disableDelayedExpansion
 
set "file=ssl.txt"
set "tempLoc=sortLinesTemp"
 
md "%tempLoc%"
set "cnt=0"
for /f usebackq^ delims^=^ eol^= %%A in ("%file%") do (
  set /a cnt+=1
  set "ln=%%A"
  setlocal enableDelayedExpansion
  echo(!ln!>"%tempLoc%\f!cnt!"
  endlocal
)
(for /f %%F in ('dir /b /o-s "%tempLoc%"') do type "%tempLoc%\%%F")>"%file%.new"
move /y "%file%.new" "%file%" >nul
rd /s /q "%tempLoc%"
type "%file%"

но не нравится тем что создаёт папку с временными файлами и сортировка идёт по уменьшению.

Всего записей: 2918 | Зарегистр. 20-02-2009 | Отправлено: 22:36 21-12-2020 | Исправлено: Xant1k, 23:34 21-12-2020
lexapass



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Xant1k
Используйте >> для добавления последующих строк в файл.
Единичный > всегда перезаписывает файл, т.е. хорош только для инициализации = записи первой строки в файл, в Вашей терминологии последней.

Всего записей: 567 | Зарегистр. 11-10-2004 | Отправлено: 22:54 21-12-2020 | Исправлено: lexapass, 22:55 21-12-2020
YuS 2



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

Цитата:
чисто на пшелле как выглядит команды с записью в файл?

script.ps1

Код:
param(
    # кодировка исходного файла
    $srcenc = 'UTF8',
    # кодировка целевого файла
    $dstenc = 'UTF8',
    # исходный файл
    $source = 'test.txt',
    # целевой файл
    $destination = 'out.txt'
)
 
gc $source -enc $srcenc|sort {$_.length},{$_}|out-file $destination -enc $dstenc

Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 09:08 22-12-2020
iNNOKENTIY21



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

Цитата:
А чисто на пшелле как выглядит команды с записью в файл?  

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

Код:
gc -LiteralPath '.\test.txt' | Sort-Object -Property Length, {$_} | Out-File -LiteralPath '.\test-sorted.txt' -Force

читает файл test.txt в текущей папке | сортирует по длине строки, строки с одинаковой длиной сортирует по алфавиту | сохраняет в файл test-sorted.txt в текущей папке с перезаписью.

Всего записей: 3625 | Зарегистр. 16-08-2012 | Отправлено: 09:10 22-12-2020
JekG

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Приветствую
Подскажите еще по такому вопросу
 
Есть папка D:Backup\ в нее каждый день создается подпапка бекап с текущей датой в назвнии и в эту папку копируются файлы.  
Дабы не захламлять сервер удаляю батником папки старше 3 дней
 

Код:
@cd /d "D:Backup\" && @forfiles /d -3 /C "cmd /c if @isdir==TRUE echo rd /s /q @file"

 
Как уточнить задачу так, чтобы удаление стартовало при наличии в папке более трех подпапок? если подпапок три или меньше - просто выход.  

Всего записей: 2727 | Зарегистр. 12-10-2005 | Отправлено: 10:18 22-12-2020
Fenrizz



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

Цитата:
set cnt=0
for /F %%A in ('dir /b/o:N/a:D C:\BACKUP\AAA\') do set /a cnt+=1
if %cnt% gtr 3 (
echo OK )

Всего записей: 689 | Зарегистр. 12-09-2017 | Отправлено: 11:06 22-12-2020 | Исправлено: Fenrizz, 11:07 22-12-2020
yurkesha



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Fenrizz
Цитата:
if %cnt% gtr 3
для FOR /F есть интересный параметр "skip=3" - главное правильную сортировку задать

Всего записей: 2757 | Зарегистр. 15-12-2003 | Отправлено: 20:25 22-12-2020
Xant1k



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
YuS 2
Немного про другое имелось ввиду. Что добавить к текущему варианту в конце.
 
С кодировкой сделал так PowerShell.exe -ExecutionPolicy ByPass -command ". gc -LiteralPath '.\ssl.txt' -enc UTF8 | Sort-Object -Property Length, {$_} | Out-File -LiteralPath '.\test-sorted.txt' -enc UTF8 -Force
вроде работает.
 
Добавлено:
iNNOKENTIY21
Ну можно и так) но тогда лучше наверное без бантиков, и в профильную тему перебраться?
 
>строки с одинаковой длиной сортирует по алфавиту
вот это прям то что надо

Всего записей: 2918 | Зарегистр. 20-02-2009 | Отправлено: 15:49 23-12-2020 | Исправлено: Xant1k, 17:12 23-12-2020
mat86



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
yurkesha не срабатывает все равно  
Fenrizz заменил на
Цитата:
echo DELETE
так ничего не удаляет

Цитата:
"Свернуть все окна.scf" - файл в правильной (DOS 866) кодировке?
да в DOS 866 проверял несколько раз
 

Всего записей: 438 | Зарегистр. 19-03-2009 | Отправлено: 20:46 23-12-2020
Fenrizz



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
mat86
Так он и не должен удалять - это для отладки
Убирайте условия по одному и смотрите пишет он в консоли DELETE или нет.

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



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
mat86
Цитата:
не срабатывает все равно  
ты меня совсем запутал
Первый вариант был правильным... Неправильной была команда удаления которую ты поставил вместо вывода на экран...

Код:
@ECHO OFF
SET "RELETIVE_PATH=AppData\Roaming\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar"
for %%a in ("%UserProfile%") do (for /d %%i in ("%%~dpa*") do (CALL :METKA "%%i\%RELETIVE_PATH%"))
GOTO :EOF
 
:METKA
SET "WORK_DIR=%~1"
FOR /r "%WORK_DIR%" %%k IN (*) DO (
IF /I NOT "%%~nxk"=="111.txt" (
IF /I NOT "%%~nxk"=="222.txt" (
DEL /q "%%~k"
)
)
)
GOTO :EOF  

На этот раз все внимательно перепроверил несколько раз. Неспеша

Всего записей: 2757 | Зарегистр. 15-12-2003 | Отправлено: 21:49 24-12-2020
mat86



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
yurkesha огромное спасибо, все работает и в xp в том числе

Всего записей: 438 | Зарегистр. 19-03-2009 | Отправлено: 08:56 25-12-2020
Xant1k



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

Цитата:
С кодировкой сделал так PowerShell.exe -ExecutionPolicy ByPass -command ". gc -LiteralPath '.\ssl.txt' -enc UTF8 | Sort-Object -Property Length, {$_} | Out-File -LiteralPath '.\test-sorted.txt' -enc UTF8 -Force
вроде работает.

Заметил что выходной файл получается в utf8 with BOM. Как исправить, т.е. к простому UTF8 привести?

Всего записей: 2918 | Зарегистр. 20-02-2009 | Отправлено: 09:31 27-12-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 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

Компьютерный форум Ru.Board » Компьютеры » Программы » Командная строка, батники, сценарии - bat, cmd
Maz (20-06-2024 22:42): Командная строка, батники, сценарии - bat, cmd (7 часть)


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

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

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru