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

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

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

Код:
for /F "skip=6 tokens=1,2,3" %%I in ('whoami /user') do echo %%J

отличное компактное решение, спасибо.

Всего записей: 61 | Зарегистр. 09-12-2004 | Отправлено: 11:06 22-04-2022
Pasha_ZZZ



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

Цитата:
for /f "tokens=1*" %a in ('whoami /user /fo list^|findstr /r /i /c:"^SID:"') do echo %b

Всего записей: 10853 | Зарегистр. 11-03-2002 | Отправлено: 13:02 22-04-2022
Roman_Hayretdinov



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Никто не подскажет, как при помощи утилиты WMIC работать с файлами в командной строке? Для отдельного файла такое прокатывает:
Код:
WMIC DATAFILE "C:\\Windows\\regedit.exe" LIST FULL

но когда хочу обработать группу файлов - подстановочные знаки не срабатывают! Что я делаю не так?
Можно, конечно, использовать цикл FOR, но тогда wmic.exe будет считываться с жесткого диска каждый раз при каждой итерации цикла - а это не есть хорошо. Или она целиком закэшируется в кэш процессора? весит-то вроде не много.
 
Добавлено 03-05-2022: разобрался сам

Всего записей: 47 | Зарегистр. 19-12-2021 | Отправлено: 10:36 25-04-2022 | Исправлено: Roman_Hayretdinov, 11:12 03-05-2022
gutasiho

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

Всего записей: 3121 | Зарегистр. 14-09-2020 | Отправлено: 10:04 07-05-2022
Pasha_ZZZ



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

Всего записей: 10853 | Зарегистр. 11-03-2002 | Отправлено: 10:14 07-05-2022
gutasiho

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Pasha_ZZZ
Спасибо, заработало с одиночными слэшами вокруг имени параметра.

Всего записей: 3121 | Зарегистр. 14-09-2020 | Отправлено: 11:41 07-05-2022
Arcadaw

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
В какой-то папке создаются архивные файлы, но не периодически - от разу к разу.
Накопилось допустим 10 файлов, как удалить файлы первые 5, например.
Т.е. средствами rar создаются файлы и хотелось бы удалять не по дате, а по кол-ву. Т.е. должно быть например не боее 5 файлов. Эт окак в программа бекапов, когда создаются полные копии файлов, но допускается хранить не более 5 файов - старые удаляются.
Команду forfles в данном случае не подходит, т.к. работает по дате.

Всего записей: 1251 | Зарегистр. 25-03-2004 | Отправлено: 14:19 09-05-2022
Pasha_ZZZ



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

Цитата:
 
for /f "skip=5 tokens=* delims=" %%a in ('dir /b /a-d /o-d "path_to_folder"') do del /f /q "path_to_folder\%%~a"
 

skip= - сколько файлов оставлять
path_to_folder - путь к папке с архивами

Всего записей: 10853 | Зарегистр. 11-03-2002 | Отправлено: 14:32 09-05-2022
Arcadaw

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

Цитата:
 path_to_folder - путь к папке с архивами

Спасибо. Счас попробую.
Какой замысловатый.
 
Добавлено:
Все получилось, спасибо.
 
Добавлено:
А еще подскажите плиз, а как запустить какой-то батник в случае если какой-то файл изменился?
Т.е. получается надо сравнить один файл с другим, который лежит в другом месте.Наверное надо имспользовать fc. Только получить от нее надо резуальтат проверки.
 
Добавлено:
@echo off
fc file1.txt file2.txt > nul
if ERRORLEVEL 1 goto Different
echo Файлы совпадают
REM подпрограмма, выполняющаяся при совпадении файлов. . .
exit
ifferent
echo Файлы НЕ совпадают
REM подпрограмма, выполняющаяся при различии файлов. . .  
 
Или проще есть?

Всего записей: 1251 | Зарегистр. 25-03-2004 | Отправлено: 14:47 09-05-2022 | Исправлено: Arcadaw, 15:11 09-05-2022
Fenrizz



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Arcadaw
По-правильному - через PowerShell IO.FileSystemWatcher.
https://stackoverflow.com/questions/29066742/watch-file-for-changes-and-run-command-with-powershell
https://powershell.one/tricks/filesystem/filesystemwatcher
 
Можно ещё по дате модификации мониторить, или хэш-сумму проверять.

Всего записей: 565 | Зарегистр. 12-09-2017 | Отправлено: 15:40 09-05-2022 | Исправлено: Fenrizz, 16:03 09-05-2022
Arcadaw

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

Цитата:
 По-правильному - через PowerShell IO.FileSystemWatcher.  

А почему так поправильному? Из-за хеша?
А разве fc /b не хватит?! Для простых файлов prefs.js в профиле браузера.

Всего записей: 1251 | Зарегистр. 25-03-2004 | Отправлено: 16:12 09-05-2022
Roman_Hayretdinov



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Никто не подскажет, как при помощи цикла FOR переименовать файлы, начинающиеся на "«" ?
Только что выкачал с сайта Национальной библиотеки Франции один том "Хроник" Жана Фруассара, это 900 файлов в формате JPG, каждый из которых поименован по такому типу:
«_Chroniques_sire_JEHAN_FROISSART_[...]Froissart_Jean_btv1b84386043_0.jpg
«_Chroniques_sire_JEHAN_FROISSART_[...]Froissart_Jean_btv1b84386043_1.jpg
и так далее. Пытаюсь в командной строке выполнить:

Код:
for /F "tokens=1* delims=]" %A in ('dir /b *.jpg') do ren %A]%B %B

но получаю ошибку:

Код:
ren <_Chroniques_sire_JEHAN_FROISSART_[...]Froissart_Jean_btv1b84386043_0.jpg Froissart_Jean_btv1b84386043_0.jpg
Синтаксическая ошибка в имени файла, имени папки или метке тома.

Причём знак "«" каким-то магическим образом заменяется на знак "<" ! Если переименовывать файлы не в цикле, то такой ошибки нет

Всего записей: 47 | Зарегистр. 19-12-2021 | Отправлено: 18:37 11-05-2022 | Исправлено: Roman_Hayretdinov, 18:39 11-05-2022
GCRaistlin



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Roman_Hayretdinov
Выполните сначала chcp 65001.

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

Всего записей: 3480 | Зарегистр. 18-04-2005 | Отправлено: 20:28 11-05-2022
Roman_Hayretdinov



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
GCRaistlin, спасибо! Правда, сработало только на Windows 10 - на Windows XP пришлось переключать на кодовую страницу 863 (канадский французский)

Всего записей: 47 | Зарегистр. 19-12-2021 | Отправлено: 21:40 11-05-2022
Fenrizz



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Roman_Hayretdinov
Можно без смены кодировки в два приёма:
1. ren ?_*.jpg 1*  
2. переименование в цикле

Всего записей: 565 | Зарегистр. 12-09-2017 | Отправлено: 11:19 12-05-2022
tirex2k

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

Код:
For /F "usebackq tokens=* delims=" %%i In ("c:\temp\sid.txt") Do Set old_sid=%%i
for /F "skip=6 tokens=1,2,3" %%I in ('whoami /user') do set sid=%%J
for /f "tokens=*" %%A in (c:\temp\crypto_key.reg) do (
set "string=%%A"
set "modified=!string:%old_sid%=%sid%!"
echo !modified!>>c:\temp\crypto_key2.reg
)
 

 
Что то не работает код, даже файл crypto_key2.reg не создается, в чем ошибка? Выручайте.
Может он ищет old_sid как целую строку а не как часть строки?

Всего записей: 61 | Зарегистр. 09-12-2004 | Отправлено: 11:35 12-05-2022 | Исправлено: tirex2k, 11:36 12-05-2022
Fenrizz



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

Всего записей: 565 | Зарегистр. 12-09-2017 | Отправлено: 12:13 12-05-2022
GCRaistlin



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
tirex2k
Чтобы этот кусок кода что-то делал, нужно, чтобы существовал c:\temp\crypto_key.reg с по крайней мере одной строкой, состоящей не только из пробелов.

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

Всего записей: 3480 | Зарегистр. 18-04-2005 | Отправлено: 12:29 12-05-2022 | Исправлено: GCRaistlin, 12:33 12-05-2022
tirex2k

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Fenrizz
не работает не с Setlocal EnableDelayedExpansion
не с setlocal EnableExtensions EnableDelayedExpansion
а может проблема быть что я указываю c:\temp\crypto_key2.reg

Всего записей: 61 | Зарегистр. 09-12-2004 | Отправлено: 12:33 12-05-2022 | Исправлено: tirex2k, 12:37 12-05-2022
Fenrizz



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
tirex2k
Сложно сказать. Добавьте echo для отладки и посмотрите, что будет на экране

Код:
For /F "usebackq tokens=* delims=" %%i In ("c:\temp\sid.txt") Do Set old_sid=%%i  
 echo old sid %old_sid%
 for /F "skip=6 tokens=1,2,3" %%I in ('whoami /user') do set sid=%%J  
 echo new sid %sid%
 for /f "tokens=*" %%A in (c:\temp\crypto_key.reg) do (  
 set "string=%%A"  
 set "modified=!string:%old_sid%=%sid%!"  
 echo !modified!
 echo !modified!>>c:\temp\crypto_key2.reg  
 )  

 
И  это можно сделать проще - For /F "usebackq tokens=* delims=" %%i In ("c:\temp\sid.txt") Do Set old_sid=%%i  

Код:
set /p old_sid=<c:\temp\sid.txt

Всего записей: 565 | Зарегистр. 12-09-2017 | Отправлено: 12:50 12-05-2022 | Исправлено: Fenrizz, 12:53 12-05-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