Ru-Board.club
← Вернуться в раздел «Microsoft Windows»

» Задачи на bat-файлах 10

Автор: AlexanderNON
Дата сообщения: 25.04.2011 06:07
BVV63


Цитата:
Ну, в общем-то, нет:

Код:
WMIC Path Win32_LocalTime Get DayOfWeek


А можно код написать, где с помощью этой строки можно удалить все архивы кроме пятничных?
Автор: Bezzz
Дата сообщения: 25.04.2011 06:23

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

dir /b /a:-d /o:-d
первый файл списка будет самый свежий
Для перемещения используем move
Автор: res2001
Дата сообщения: 25.04.2011 07:46
BVV63

Цитата:
Ну, в общем-то, нет:

В данном случае это не подойдет - надо из даты изменения файла вычислить день недели.

Добавлено:
AlexanderNON

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


Код: @echo off
set "curdir=c:\temp\"
set "arhdir=c:\temp\arh\"
::Переносим последний архив из временной папки в каталог с архивами
for /f "tokens=*" %%a in ('dir /O:-D /A:-D /B %curdir%') do move /y %%a %arhdir% & goto:next
:next
::Удаляем из временной папки всё
del /f/q %curdir%*.*
::Оставляем в архивном каталоге только 3 последних файла
for /f "skip=3 tokens=*" %%a in ('dir /O:D /A:-D /B %arhdir%') do del /f/q %%a
Автор: wolf0425
Дата сообщения: 25.04.2011 08:12

Цитата:

Цитата: Тогда вопрос, как сделать батник, который бы удалял все архивы из папки кроме последнего созданного. Потом копировал бы его в сетевую папку и при удачном копировании удалял архив?
dir /b /a:-d /o:-d
первый файл списка будет самый свежий
Автор: res2001
Дата сообщения: 25.04.2011 08:32
wolf0425

Цитата:
так все же нужен последний созданный или с с самой последней датой модификации?

Думаю это не столь важно, т.к. это видимо бэкапы и дата создания скорее всего не будет отличаться от даты модификации, отличаться будет время.
Автор: AlexanderNON
Дата сообщения: 25.04.2011 12:23
res2001

Спасибо большое, потестирую.
Автор: Free_Soft
Дата сообщения: 25.04.2011 12:23
У кого есть возможность, потестируйте консольную утилиту для скачивания файлов из интернет по http и ftp ссылкам
Скачать | [more]консольная программа для скачивания из интернета файлов по HTTP и FTP ссылкам.
код возврата: 0 - удачное скачивание, -1 - неизвестная ошибка, код системной ошибки

123 недопустимое имя файла. The filename, directory name, or volume label syntax is incorrect.
206 имя файла слишком длинное. The filename or extension is too long.
1309 полученные данные не соответсвуют ожиданиям пользователя (нет параметра или в буфере обмена нетекстовая информация) An attempt has been made to operate on an impersonation token by a thread that is not currently impersonating a client
12006 недопустиммый URL. The URL scheme could not be recognized, or is not supported.
12007 несуществующий адрес. The server name could not be resolved.
12014 неправильный пароль. The request to connect and log on to an FTP server could not be completed because the supplied password is incorrect.
12015 неправильный логин. The request to connect and log on to an FTP server failed.
12029 невозможно соединится с сервером. The attempt to connect to the server failed.

DOWNLOAD http://bomz-co.narod.ru/ENHANCER.zip

В случае отсутствия командного параметра утилита пытается получить ссылку из буфера обмена.
Поддерживаются ссылки требующие получение имени файла с сервера (IFOLDER), HTTPS.

Файл скачивается в рабочую директорию.

В случае совпадения имен или существования в месте скачивания файла с таким же
именем в начало имени добавляется порядковый номер от 00_ до 99_.

Допустимы ссылки:
ftp://ftp.mozilla.org/pub/firefox/releases/4.0/win32/ru/Firefox%20Setup%204.0.exe
http://mirror.yandex.ru/mozilla/firefox/releases/latest-4.0/win32/ru/Firefox%20Setup%204.0.exe
Но батником удобнее передавать в виде:
ftp://ftp.mozilla.org/pub/firefox/releases/4.0/win32/ru/Firefox Setup 4.0.exe
http://mirror.yandex.ru/mozilla/firefox/releases/latest-4.0/win32/ru/Firefox Setup 4.0.exe

ftp://LOGIN:PASSWORD@ftp.XXXXXXXXXX[/more]

интересна, прежде всего, работа со всякими ссылками "сложного" вида
Автор: res2001
Дата сообщения: 25.04.2011 14:09
Free_Soft
А чем curl то не устраивает или wget?
Автор: Free_Soft
Дата сообщения: 25.04.2011 14:15
кто сказал, что не устраивает? просто альтернативный вариант
Автор: wolf0425
Дата сообщения: 25.04.2011 15:09

Цитата:
У кого есть возможность, потестируйте консольную утилиту для скачивания файлов
Вроде качает.
Ещё бы умела не файлом скачивать, а в stdout сразу отправлять...


Цитата:
А чем curl то не устраивает или wget?
размером?

Автор: monsoon
Дата сообщения: 25.04.2011 15:16
Скачал rar-архив, в котором 837 файлов. В свойствах архива в винраре указана базовая ОС - Unix (видимо архивировали в юниксе, но разархивировать и потом перекодировать имена файлов нужно в winXP)
Названия файлов в 16-ричном виде.
Попробовал раскодировать, на 2cyr.com пишет, что кодировка utf-16 с постфильтром bin-to-hex.
Т.е. например в названии файла присутствует D092D0B8D0B4D0B5D0BED188D0BAD0BED0BBD0B0, что в кириллице соответствует слову Видеошкола, т.е. каждый символ кириллицы кодируется четырьмя символами в hex или двумя байтами. Одной утилитой iconv тут не обойтись. Как бы их переименовать, т.к. вручную 837 файлов - многовато?
Автор: ASE_DAG
Дата сообщения: 25.04.2011 15:27
monsoon
Это единичный случай? Дайте ссылку.
Автор: 5peciali5t
Дата сообщения: 25.04.2011 15:43
Free_Soft

Цитата:
просто альтернативный вариант

на сложных не пробовал особо, простые отрабатывает на раз.

минусы
- на больших файлах напрягает отсутствие прогресса в %, висит себе консоль и непонятно когда оно там докачается
- download.exe детектится парой антивирусов, необязательно что он опасен, но многим это не понравится

плюс
- компактность: 3,5-4 кб это здорово. для простых задач вполне подойдет
Автор: monsoon
Дата сообщения: 25.04.2011 15:44
ASE_DAG

Цитата:
Это единичный случай? Дайте ссылку

Все названия файлов закодированы таким образом. Ссылку на архив могу дать, но он 8 гигов :wink:
[more=Несколько названий файлов для примера.]D090D09DD093D095D09BD0ACD0A1D09AD090D0AF_ _D09FD0ABD09BD0AC_New.doc
D091D095D097_ _D0A2D095D091D0AF.doc
D091D095D0A1D09FD095D0A7D09DD0ABD099_ _D090D09DD093D095D09B.doc
D092D09ED097D0ACD09CD098_ _D09CD09ED081_ _D0A1D095D0A0D094D0A6D095.doc
D093D0A0D0AFD097D0AC.doc
D097D090D09AD090D0A2.doc
D09ED0A1D09AD09ED09BD09ED09A_ _D09BD0ACD094D090.doc
D09FD09ED0A2D095D0A0D0AFD09DD0ABD099_ _D0A0D090D099_ .doc
D0A2D09ED0A0D095D0A0D09E_ Em.doc
D0A2D09ED0A0D095D0A0D09E_ _D0A1#m.doc
D0A3D09BD098D0A6D090_ _D0A0D09ED097.doc
D0A8D0A2D098D09BD0AC_ .doc
D0AF_ _D0A1D092D09ED091D09ED094D095D09D.doc
D09FD180D0BED187D182D0B8D182D0B5!!!.doc[/more]
Задача еще усложняется тем, что подчеркивания, точки и пробелы представлены не в юникоде.
Автор: ASE_DAG
Дата сообщения: 25.04.2011 15:52
monsoon
> могу дать
Ну так давайте. ;) Или он на каком-нибудь (кхм) говнообменнике типа Рапиды?

Добавлено:
monsoon
Кстати, UTF-16 тут совершенно не при чем. Это просто шестнадцатеричные коды символов в Юникоде. Разобрать это начисто невозможно, поскольку нет возможности отличить последовательность B0 в значении «а» и B0 в значении «B0», можно только задаться условием, что [A-Z0-9]{2} — это всегда код символа, т.е. например субстроки 88 в значении числа «88» там заведомо нет. Тогда что-нибудь типа
$ echo -e $(sed 's/[A-Z0-9]\{2\}/\\x&/g' <<< D092D0B8D0B4D0B5D0BED188D0BAD0BED0BBD0B0) # это Баш
вернет нам
Видеошкола

Поэтому я и спрашиваю сам архив.
Автор: monsoon
Дата сообщения: 25.04.2011 16:18
ASE_DAG
ссылка на лелитбите (на руборде letit могут выпрямить)
Автор: ASE_DAG
Дата сообщения: 25.04.2011 16:47
monsoon
Не, с Лелитбита я качать все-таки не буду.
Если учесть, что я выше ошибся, и это все-таки номера байт для UTF-8, то можно задавшись тем, что у нас в именах файлов было только ASCII и кириллица (первый байт в UTF-8: D0 или D1) привести все это безобразие к первоначальному виду довольно однозначно:

$ echo -e $(sed 's/\(D[01]\)\([A-Z0-9]\{2\}\)/\\x\1\\x\2/g' <<< D092D0B8D0B4D0B5D0BED188D0BAD0BED0BBD0B0) # локаль — UTF-8, да
Видеошкола


Суть, я думаю, понятна.

P.S. Но я бы вам все-таки посоветовал взять другой деархиватор и попробовать это распаковать им.
Автор: monsoon
Дата сообщения: 25.04.2011 17:19
ASE_DAG
Спасибо.

Цитата:
$ echo -e $(sed 's/\(D[01]\)\([A-Z0-9]\{2\}\)/\\x\1\\x\2/g' <<< D092D0B8D0B4D0B5D0BED188D0BAD0BED0BBD0B0) # локаль — UTF-8, да
Видеошкола

Это для линукса команда?
в winXP немного изменил:
echo D092D0B8D0B4D0B5D0BED188D0BAD0BED0BBD0B0 | sed -e 's/\(D[01]\)\
([A-Z0-9]\{2\}\)/\\x\1\\x\2/g'

Пробовал в Far и Far2 (с поддержкой юникод) в обоих результатом выдается:
\xD0\x92\xD0\xB8\xD0\xB4\xD0\xB5\xD0\xBE\xD1\x88\xD0\xBA\xD0\xBE\xD0\xBB\xD0\xB0


Цитата:
P.S. Но я бы вам все-таки посоветовал взять другой деархиватор и попробовать это распаковать им.

Пробовал winrar и 7-zip. Что-то лучшее не знаю.
Автор: ASE_DAG
Дата сообщения: 25.04.2011 17:32
monsoon
> Это для линукса команда?
Это для Баша, я это даже один раз уже писал.

> немного изменил
Ага, выкинули ключевую команду echo -e, для которой Сед строку и подготавливал.

> в обоих результатом выдается
Все правильно, именно это то, что вы оставили, и делает.

Добавлено:
echo из пакета GNU Coreutils, собственно доступен в порте оного под Винду.
Автор: 5peciali5t
Дата сообщения: 25.04.2011 21:53
а есть ли способ по возможности без использования сторонних программ консольно выдрать из файла значение Версия файла для его сравнения с другим файлом чтобы вычислить что свежее? (сложнее, но универсальнее в моем случае)
если по аналогии проще будет выделить даты времени подписания цифровыми подписями чтобы сравнить какой файл позже вышел (возможно проще для сравнения по датам выхода, но не все файлы имеют цифровую подпись)
и есть ли возможность консольно получать дату появления того или иного файла на сервере разработчика средствами таких программ как wget и т.п.
Автор: ASE_DAG
Дата сообщения: 25.04.2011 21:59
5peciali5t
> выдрать из файла значение Версия файла
Простите, о каких файлах идет речь?
Файловая система не хранит информацию о какой-либо «версии файла», но хранит дату последней модификации, по ней обычно и определяют «что свежее».
Автор: 01MDM
Дата сообщения: 25.04.2011 22:16
5peciali5t
Например так:

Код:
wmic datafile where name="C:\\WINDOWS\\system32\\calc.exe" get version
Автор: 5peciali5t
Дата сообщения: 25.04.2011 23:12
ASE_DAG

Цитата:
Простите, о каких файлах идет речь?

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

01MDM
спасибо
суровая вещь этот wmic. а всех ли виндах он есть?
как бы его помягче сделать в плане поддержки относительных путей и/или поддержки переменных и необязательности "\\" только ...
Автор: ASE_DAG
Дата сообщения: 25.04.2011 23:31
5peciali5t
>> о каких файлах идет речь?
> допустим <...>
То есть, об исполняемых бинарниках.
Тогда, как вариант, можно воспользоваться утилитой filever из пакета Support Tools (suptools.msi).

> нужно выяснить его версию, сделать некий эхо-запрос версии на их сервер, сравнить результаты
Интересно, как вы будете делать запрос (почему, кстати, «эхо»? где вы это слово услышали?) версии у сервера?
Автор: 5peciali5t
Дата сообщения: 26.04.2011 00:25
ASE_DAG
хорошо. перефразирую: можно ли какой нибудь утилитой до непосредственно скачивания хотя бы полный размер файла лежащего на сервере или другую информацию получить, выгрузить, сравнить с уже имеющимся файлом?

скрин убран
Автор: ASE_DAG
Дата сообщения: 26.04.2011 00:46
5peciali5t
> можно ли какой нибудь утилитой до непосредственно скачивания хотя бы полный размер файла лежащего на сервере
Конечно, но только при чем тут размер? Не находите, что лучше дату модификации? ;)

> например wget
Ну вот вы сами себе и ответили. :)
$ wget -S --spider http://download.skype.com/SkypeSetupFull.exe 2>&1
, хотя я бы предпочел
$ curl -I http://download.skype.com/SkypeSetupFull.exe
— во-первых, вывод идет сразу на STDOUT, а не на STDERR, а во-вторых, мусора в нем (в выводе) нет.

P.S. Что у вас за страсть к скриншотам?
Автор: 5peciali5t
Дата сообщения: 26.04.2011 00:56
ASE_DAG
спасибо. так более понятно.
страсть? Вам показалось
Автор: ASE_DAG
Дата сообщения: 26.04.2011 01:02
5peciali5t
> страсть?
Ну зачем вы сюда прилепили скриншот (да еще и залитый не пойми куда)? Чтобы ненавязчиво так предложить мне перепечатать линк вручную? :)
Автор: lorents
Дата сообщения: 26.04.2011 10:56
Добрый день!

Код: @echo off
:hj
if "%~1" == "" echo completed & pause & exit
call :_proc %1
shift
goto :hj

:_proc
set "type=%~a1 "
if %type:~0,1% equ d (echo dir %1) else (echo file %1)
exit /b
Автор: astratek
Дата сообщения: 26.04.2011 11:49
в каталоге имеются разные файлы, необходимо скопировать первый найденный файл в другой каталог. как можно реализовать?

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071

Предыдущая тема: зависает установка Windows XP: 39 минут


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.