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

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

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

Maz (19-09-2020 13:36): Командная строка, батники, сценарии (bat, cmd) Часть 6  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

   

cchameleone



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

Важно: копируя батник через буфер обмена из форума не забывайте удалять пробелы в конце каждой строки, т.к. в некоторых случаях из-за этого программа будет работать неправильно!!! Чтобы не копировались концевые пробелы из форума, жмите на ссылку "Редактировать" в посте, и уже из редактора копируйте батник без пробелов.
 
Примечание: Большие куски кода заключайте в тэг [ 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 (PDF). Курс лекций для начинающих
· Бокалий В. Командная строка (pdf-брошюрка в 20 страниц)
· Александров А., Дибров А. Урок bat-аники (pdf)
· Уильям Р. Станек - Командная строка Windows. Справочник администратора
 
· Скрываем консольные окна, Выполнение BAT-скриптов без вызова окна консоли
· cmdow — изменение параметров и видимости дос-окна, Статья в КОМПЬЮТЕРРАONLINE
· Набор GNU утилит для win32
· HS_Packet.7z - Пакет утилит для организации интерфейса в bat-файлах
· Использование ansi.sys
· blat — отправка почты из консоли
· Команды RunDll32
· Quick Batch File Compiler - Позволяет превратить ваш батник в независимое приложение
· Easy Batch Builder+Rus+Crack - Редактор BAT файлов.Через графический интерфейс программы вы сможете быстро конструировать пакетные файлы практически любой сложности. (В комплекте есть Лоадер созданный с помощью Sign Of Misery некоторые антивирусы обзывают его вирусом. Вам решать: ставить или не ставить) (ЗЕРКАЛО)
· Простой способ получать текущую дату всегда в одном формате (не зависит от языков и настроек) ещё и ещё
· Переход из 32-битной версии cmd.exe в 64-битную (1) (2)(3)

Всего записей: 2271 | Зарегистр. 16-10-2015 | Отправлено: 09:22 29-04-2016 | Исправлено: Maz, 08:47 26-03-2020
virussnu

BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
З.Ы.
Как она (кнопка) вообще работает я совершенно не врубаюсь (взял "с просторов интернета"). Её код для меня - "китайская грамота"... Пытался как-то разобраться, но ваааще запутался и "задвинул это дело". Помогите, плиз.

Всего записей: 347 | Зарегистр. 15-09-2007 | Отправлено: 21:45 12-09-2018 | Исправлено: virussnu, 21:51 12-09-2018
metatrop

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
virussnu
set mdd=%%~ti
устанавливает строковую переменную mdd во что-то вроде
12.09.2018 20:40
(на самом деле формат зависит от региональных настроек Windows, и это печально)
 
А фрагменты вида !mdd:~6,4! извлекают из общей строки mdd подстроки (4 символа, начиная со смещения 6, т.е. 2018). Комбинируя несколько подстрок (Вам нужно 5 штук) можно получить "ГГГГ-ММ-ДД_чч-мм".

Всего записей: 263 | Зарегистр. 17-09-2010 | Отправлено: 22:02 12-09-2018
wadimuss

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

Цитата:
на самом деле формат зависит от региональных настроек Windows, и это печально
ну, а что, не можем поменять?
в реестре:

Код:
Windows Registry Editor Version 5.00
 
[HKEY_CURRENT_USER\Control Panel\International]
"sShortDate"="dd.MM.yyyy"

на "yyyy.MM.dd"
 
и в ТС наверняка есть установка региональных настроек под себя (не фанат ТС)

Всего записей: 920 | Зарегистр. 24-11-2008 | Отправлено: 08:24 13-09-2018 | Исправлено: wadimuss, 08:25 13-09-2018
Pasha_ZZZ



Platinum Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
virussnu
metatrop
wadimuss
Цитата:
wmic PATH Win32_LocalTime GET Day,Month,Year,Hour,Minute,Second
только вывод сортируется по алфавиту, по названиям переменных, но это нестрашно

Всего записей: 10082 | Зарегистр. 11-03-2002 | Отправлено: 08:38 13-09-2018
virussnu

BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
metatrop
wadimuss
Pasha_ZZZ
 
Спасибо, други, за отзывчивость!
 
Э... ТОЛЬКО Я НИХЧЕГО (ПОЧТИ) НЕ ПОНЯЛ...
 
Готовый вариант не предложите?
Мне-бы кнопочку... А лучше две (см. пост).

Всего записей: 347 | Зарегистр. 15-09-2007 | Отправлено: 10:32 13-09-2018
YuS_2



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

Цитата:
1. КАК ПОПРАВИТЬ команду, чтоб ей было "фиолетово" до символов/кодировок/языков?  
2. КАК ПОПРАВИТЬ команду, чтоб получить папку вида "ГГГГ-ММ-ДД_чч-мм" и ей было "фиолетово" до символов/кодировок/языков?  
 

Вот эти две строки:

Код:
cmd /v:on /c  
"for %%i in (%S) do set mdd=%%~ti && md ^"%T"!mdd:~6,4!-!mdd:~3,2!-!mdd:~0,2!^""

замените на такие:

Код:
powershell -ex bypass -w hidden -c
"&{gi (gc %UF -enc utf8)|%%{if(!(test-path ($a ='%T'+('{0:yyyy-MM-dd_HH-mm}' -f $_.lastwritetime)))){md $a|out-null}}}"

и будет счастье, но... powershell должен присутствовать в системе.

Всего записей: 3199 | Зарегистр. 03-02-2009 | Отправлено: 11:24 13-09-2018 | Исправлено: YuS_2, 11:28 13-09-2018
Smitis



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Другой способ получить дату и время не зависимые от региональных настроек через cmd/wmic:
for /f "delims=." %%? in ('wmic.exe OS get LocalDateTime ^| find "."') do set sDateTime=%%?
 
И далее нарезать как нужно
В отличие от wmic.exe path win32_LocalTime get * числа  будут выравнены незначащими нулями

Всего записей: 2435 | Зарегистр. 09-02-2003 | Отправлено: 12:41 13-09-2018 | Исправлено: Smitis, 12:44 13-09-2018
xerpal



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

Цитата:
вторая команда перемещает все файлы только из каталогов ggg в корень (ищет по всем папкам)


Код:
 
CD /d "%~dp0"  
 for /r %%i in ("ggg") do move /y "%%i\*.*" "%~dp0"  
 for /d %%i in (*) do rd "%%i" /q /s
 

Не то. Нужно не в корень - то есть не в ОДНУ папку, а те самые рандомные папки - в их корни.  одну то папку элементарно делается

Всего записей: 1458 | Зарегистр. 08-10-2011 | Отправлено: 13:57 13-09-2018 | Исправлено: xerpal, 14:12 13-09-2018
YuS_2



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

Цитата:
Другой способ получить дату и время не зависимые от региональных настроек

Боюсь, что это не подходит для конкретной ситуации, т.к. получать надо не дату-время системы, а именно в параметрах файлов/каталогов, т.е. дату создания/изменения.

Всего записей: 3199 | Зарегистр. 03-02-2009 | Отправлено: 14:05 13-09-2018
xerpal



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

Цитата:
Вы делаете совсем не то же самое, и в своей самонадеянности даже не замечаете этого. Обратите внимание на фразы "вытащить из ggg все файлы" (про папки речь не идёт) и "поместить их в корень этих папок" (слово "этих" можно понять по-разному).

Да, эти рандомных папок, которые непосредственно содержат папки "ggg". Вложенности даже не надо, все линейно
 
То есть у нас структура: есть папки ааа, bbb, ccc, xxx и так далее. нужно чтобы они содержали только файлы из ggg

Код:
ааа
   >> a
   >>>> regre.gif
   >>>> thrh. png
   >> b
   >>>> fsf.txt
   >>>> vewrw.jpg
   >>ggg
   >>>> a1.txt
   >>>> a2.txt
   >>>> a3.txt
   >>>> a4.txt

   >>c
   >>>>randomfile.htm
 
bbb
   То же самое что и в aaa - по структуре папок
 
ccc
  То же самое что и в aaa - по структуре папок
 
xxx
  То же самое что и в aaa - по структуре папок
 
Должны же получить

Код:
 
 
ааа  
  >> a1.txt
  >>  a2.txt
  >>  a3.txt
  >>  a4.txt

bbb
>> a1.txt
    >> a2.txt
    >> a3.txt
    >> a4.txt

 
И так  далее
 

PS Стрелочки обозначают глубину вложенности, пробовал пробелами - пробелы сжираются

Всего записей: 1458 | Зарегистр. 08-10-2011 | Отправлено: 14:15 13-09-2018 | Исправлено: xerpal, 14:37 13-09-2018
Jonmey

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
xerpal
Ваша задача, как мне видится, состоит из двух шагов
- удаление всех файлов и подпапок, кроме указанных
аналогично http://www.cyberforum.ru/cmd-bat/thread1897185.html
- пакетное перемещение оставшихся файлов на уровень выше
типа http://forundex.ru/admin/Nuzhno-paketno-peremestitj-fajli-na-urovenj-vishe-Papok-neskoljko-soten-22179
Удаление всех папок \ggg за отдельный шаг можно не считать, поскольку это одна команда, дописанная в конец второго шага. Разумеется, оба шага могут находиться в одном батнике.

Всего записей: 1173 | Зарегистр. 17-01-2011 | Отправлено: 15:19 13-09-2018 | Исправлено: Jonmey, 15:22 13-09-2018
xerpal



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

Цитата:
пакетное перемещение оставшихся файлов на уровень выше  типа http://forundex.ru/admin/Nuzhno-paketno-peremestitj-fajli-na-urovenj-vishe-Papok-neskoljko-soten-22179

Да, это работает. Прям первый синий пример. Остаётся мусор только, хотя большая часть проблемы решена.
 

Цитата:
Удаление всех папок \ggg за отдельный шаг можно не считать, поскольку это одна команда, дописанная в конец второго шага.

Да, там дописал

Код:
rd /s /q "%target%"  

 

Цитата:
удаление всех файлов и подпапок, кроме указанных  аналогично http://www.cyberforum.ru/cmd-bat/thread1897185.html

А вот тут ничего не работает. Ничё не удаляет
 
Допилил что там было кое-как, теперь два файла, один чистит папку, второй переносит файлы куда надо и удаляет изначальные ggg.
Решение не идеальное, но работает

Всего записей: 1458 | Зарегистр. 08-10-2011 | Отправлено: 15:41 13-09-2018 | Исправлено: xerpal, 16:41 13-09-2018
xerpal



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

Код:
 set sExcludeFilesOrFolders="ggg"
 
for /f "tokens=*" %%i in ('2^>nul dir/ad/b') do (
 
     pushd "%%i"
     for  /f "tokens=*" %%k in ('2^>nul dir/A:-D /B') do (
         del /f /q "%%k"  
    )  
    for  /f "tokens=*" %%j in ('2^>nul dir/ad/b') do (
        set /a bDelete = 1
        IF /i "%%~j" equ  %sExcludeFilesOrFolders%  set /a bDelete = 0
        IF !bDelete! equ 1 rd /s /q "%%j"  
    )
   
    popd
)
exit /b 0

Переносим файлы.  

Код:
@echo off
 
set "target=ggg"
 
for /f "delims=" %%i in ('2^>nul dir/ad/b') do (
 pushd "%%i"
 if exist "%target%\" (
  pushd "%target%"
  for /f "delims=" %%j in ('2^>nul dir/a/b') do (
  >nul 2>&1 move "%%j" ..
  )
  popd
  2>nul rd "%target%"
 )
 rd /s /q "%target%"  
 popd
)
exit/b 0

Всего записей: 1458 | Зарегистр. 08-10-2011 | Отправлено: 20:01 13-09-2018 | Исправлено: xerpal, 20:03 13-09-2018
virussnu

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

Цитата:
Боюсь, что это не подходит для конкретной ситуации, т.к. получать надо не дату-время системы, а именно в параметрах файлов/каталогов, т.е. дату создания/изменения.

В том-то и дело, что с ПОЛУЧЕНИЕМ дат проблем нет (в "моей" кнопке)! Всё прекрасно "получается"!
Проблема в СОЗДАНИИ папок внутри каталогов с "китайскими" именами!
Как решить этот вопрос?
 
Поможите люде добрыя!

Всего записей: 347 | Зарегистр. 15-09-2007 | Отправлено: 20:36 13-09-2018
YuS_2



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

Цитата:
Как решить этот вопрос?

дык  13-09-2018

Всего записей: 3199 | Зарегистр. 03-02-2009 | Отправлено: 20:49 13-09-2018
virussnu

BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
YuS_2
Э-э-э, камрад, с Павершелом оно, конечно, хорошо и за твоё решение спасибо, но надобно-бы решить вопрос силами системы, командного процессора, бо павершел далеко не везде имеется, а тотал используется "портабельно"...
Тут-бы без "приблуд" дело решить... Как-бы уже работающий вариант "напильником допилить"?
Заранее спасибо всем, кто откликнется!
 
Добавлено:
Вроде как были какие-то команды, устанавливающие  юникод для КМД (заставляющие батники с юникодом работать, например)... Сюда что-то подобное не прикрутить? Код кнопки, кстати, (аргумент/параметр) должен быть в одну строку. Более я, увы, не знаю...
 
Добавлено:
И ещё (желательно) вариант с часами-минутами-бы... Хотя-бы без юникода...

Всего записей: 347 | Зарегистр. 15-09-2007 | Отправлено: 07:36 14-09-2018
YuS_2



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

Цитата:
Как-бы уже работающий вариант "напильником допилить"?

Слишком многое хочешь получить от cmd...

Всего записей: 3199 | Зарегистр. 03-02-2009 | Отправлено: 09:51 14-09-2018
Smitis



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

Цитата:
Вроде как были какие-то команды, устанавливающие  юникод для КМД (заставляющие батники с юникодом работать, например)

%comspec% /u /c ....
или установить кодовую таблицу UTF8 chcp 65001
А из кнопки, вообще, текст в юникоде передаётся?

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

Всего записей: 2435 | Зарегистр. 09-02-2003 | Отправлено: 11:42 14-09-2018 | Исправлено: Smitis, 11:42 14-09-2018
virussnu

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

Цитата:
А из кнопки, вообще, текст в юникоде передаётся?

Ну тотал-же как-то передаёт пути и названия...
 
YuS_2

Цитата:
Слишком многое хочешь получить от cmd...

Как мне это расценивать? Невозможно? Или пока просто не придумали (не знаете) как?
 
Добавлено:
Smitis

Цитата:
%comspec% /u /c ....  или установить кодовую таблицу UTF8 chcp 65001  

А как это должно (может быть) выглядеть в кнопке (её коде)? Можно "прикрутить"?

Всего записей: 347 | Зарегистр. 15-09-2007 | Отправлено: 13:08 14-09-2018
Smitis



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

Цитата:
Ну тотал-же как-то передаёт пути и названия...  

Может он не в юникоде передаёт, в ASCII (тотал до сих под с описаниями файлов в юникоде работать не умеет, может и здесь так).

Цитата:
А как это должно (может быть) выглядеть в кнопке (её коде)? Можно "прикрутить"?

Что-то типа
%comspec% /u /v:on /c for %%i in (%S) do set "mdd=%%~ti" & md "%T!mdd:~6,4!-!mdd:~3,2!-!mdd:~0,2!"
Вместо %comspec% можно поставить cmd, если тотал это не понимает.
Я не использую тотал и не знаю, как он передаёт список %S.
Можно попробовать
%comspec% /u /v:on /c chcp 65001>nul & for %%i in (%S) do set "mdd=%%~ti" & md "%T!mdd:~6,4!-!mdd:~3,2!-!mdd:~0,2!"
но кодировка должна быть в UTF8 (65001). Воспримется ли chcp 1200 в таком виде я не знаю.

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

Всего записей: 2435 | Зарегистр. 09-02-2003 | Отправлено: 13:41 14-09-2018
   

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

Компьютерный форум Ru.Board » Компьютеры » Программы » Командная строка, батники, сценарии (bat, cmd)
Maz (19-09-2020 13:36): Командная строка, батники, сценарии (bat, cmd) Часть 6


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

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.Board
© Ru.Board 2000-2020

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru