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

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

Автор: BVV63
Дата сообщения: 30.11.2009 07:18
Всем привет. Есть вопрос для лучшего понимания. Ранее я считал что операторы && и || используют код возврата (просто являются краткими синонимами выражений If %ErrorLevel%==0 и If ErrorLevel 1). Экспериментально выяснил, что команды Del и RD не возвращают ErrorLevel. Т. е. он после них всегда 0. Напр., создаю каталог D:\1 и аттрибутами безопасности NTFS запрещаю доступ к нему для всех. Если теперь выполнить команду

Код: RD /Q /S D:\1 & Echo %ErrorLevel%
Автор: 192168
Дата сообщения: 30.11.2009 11:41
В течение дня несколько раз архивируется файл. В имени файла должен быть номер за день. Как сделать средствами bat?. Спасибо.
Автор: BVV63
Дата сообщения: 30.11.2009 11:46
192168, дружище, Вы же уже задавали этот вопрос:
http://forum.ru-board.com/topic.cgi?forum=62&bm=1&topic=18991#1
Если мой ответ Вас не устроил, напишите, чем? Возможно, я неправильно понял Ваш вопрос.
Автор: 192168
Дата сообщения: 30.11.2009 11:51
Извините, не сразу нашел ответ на мой вопрос; ответил на сообщение от 08:30, отвечаю и здесь.
Файл формируется архивированием некоего исходного по маске. Одно место в маске должно быть номером файла в течение дня.
Автор: BVV63
Дата сообщения: 30.11.2009 11:57
192168
Угу и я уже ответил там, отвечу и здесь.

Цитата:
Файл формируется архивированием некоего исходного по маске.

Можно подробнее? Желательно всю строку команды.


Добавлено:
На 85-й странице данной темы NIKZZZZ даёт ответ vmazur47 (прошу прощения, не знаю как давать ссылки на посты, а не на страницы). Это не то, что Вам нужно?
Автор: mugil_cephalus
Дата сообщения: 30.11.2009 12:54
01MDM

Цитата:
Код:
set test2=!test:~%One%,%Two%!

вовремя - мне этот код тоже помог - я как раз мучился вставить в variable модификатор аргумента
example

Код: set "var%~n0=val"
echo _!var%~n0!_
Автор: 192168
Дата сообщения: 30.11.2009 12:54
К сожалению, не то.

Хочется так: arj a -h#TF982N SFile.ext1
N - номер файла.
TF982 - постоянная часть маски.

При первой такой процедуре в течение дня, соответственно, N=1, при следующем архивировании файла с именем SFile.ext1 N=2, и т.д.
На следующий день нумерация должна начаться опять с 1.
Автор: mugil_cephalus
Дата сообщения: 30.11.2009 12:58



BVV63

Цитата:
прошу прощения, не знаю как давать ссылки на посты, а не на страницы

url#sn, где sn - номер сообщения
например, - http://forum.ru-board.com/topic.cgi?forum=62&topic=17154&start=1740#15
Автор: yurkesha
Дата сообщения: 30.11.2009 13:13
192168
Если с наименьшими услиями то это проще реализовать при помощи консольной версии RAR. Опция -ag. Пример использования:
rar.exe a -rr3p -m5 -s -agNN <постоянная часть маски>.rar <файл для архивации>
Но обращаю внимание - нумерация будет производится по всем созданным архивам с такой маской! То есть вам надо либо обеспечивать перемещение архивов прошлого дня куда-нибудь, либо обеспечить уникальность постоянной маски. Например добавив к ней дату. Например так:
-ag+YYYY{_}MM{_}DD-NN
Автор: BVV63
Дата сообщения: 30.11.2009 13:14
192168
1. Архив создаётся в одном каталоге, либо разных (предположим, в 1-й день - в одном, во 2-й - в следующем)?
2. N - одного разряда хватит? В смысле может ли быть 10 и более архивов за день?
Сейчас я уже ухожу, если никто Вам не ответит, подумаю завтра.

Добавлено:
О, уже вроде ответили.
Автор: 192168
Дата сообщения: 30.11.2009 13:15
Архив создается в один и тот же каталог.
N<10

Добавлено:
yurkesha
Спасибо.
Архиватор arj без варииантов.
Уникальность имен обеспечивается датой в имени файла, в постоянной части маски.
Типов архивируемых файлов несколько.
Автор: BVV63
Дата сообщения: 30.11.2009 13:26
192168
Отлично. Ещё пара вопросов. Архивы в течение дня не перемещаются? До конца дня лежат в одном месте? TF982 - именно это и будет использоваться (интересует, неизменная часть имени будет именно из 5-и символов)?
Автор: 192168
Дата сообщения: 30.11.2009 13:40
Архивы не перемещаются.
Неизменная часть для дат до 10 числа 5 символов - 1, 2, ....9, для двузначных 6 символов.

Добавлено:
Вот сформулировал....
Неизменная часть для дат до 10 числа - 1, 2, ... 9 - 5 символов, в дни с двухзначной датой 6 символов.
Автор: yurkesha
Дата сообщения: 30.11.2009 13:50
192168
Вот пример реализации получения последней цифры номера:
Код: @ECHO OFF
FOR /F "USEBACKQ TOKENS=1 DELIMS=" %%a IN (`DIR /O:N /B TF982?.arj`) DO SET "LAST_FILE=%%~na"
SET /A "LAST_NUM=%LAST_FILE:~-1%+1"
ECHO %LAST_NUM%
Автор: 192168
Дата сообщения: 30.11.2009 13:58
Спасибо.
Я тоже рекомендовал, но старшая организация сурово сказала "Делать, как сказано".
Из кода понял, что первый файл нужно формировать с исходным номером 1, и помещать в архив, а уже следующий будет обработан с добавлением к номеру 1.
?

Добавлено:
Помещать в каталог с архивами
Автор: yurkesha
Дата сообщения: 30.11.2009 14:12
192168
Выполните код без файлов с такой маской и все сразу станет на свои места

Добавлено:
Только для файлов с кривой маской придется "огород догораживать"...
ЗЫ: Что-то меня гложет вышестоящая организация... А был ли мальчик?
Всмысле действительно ли они сказали именно это и правильно ли были поняты

Добавлено:
И это только вычисления очередной цифири а не весь код... Правильнее конечно будет его немного облагородить:
Код: @ECHO OFF
SET "LAST_FILE="
FOR /F "USEBACKQ TOKENS=1 DELIMS=" %%a IN (`DIR /O:N /B TF982?.arj 2^>nul`) DO SET "LAST_FILE=%%~na"
SET /A "LAST_NUM=%LAST_FILE:~-1%+1"
ECHO %LAST_NUM%
Автор: 192168
Дата сообщения: 30.11.2009 14:25
yurkesha
Что-то гложет меня подозрение, что вы меня во вранье подозреваете; так я поводов не давал. Как-то оно сразу вот так с мальчиками нехорошо. Просто отвратительно.
Автор: yurkesha
Дата сообщения: 30.11.2009 14:30
192168
Пробуй код.
Я не подозреваю - могу только догадываться что ты не всю ситуацию до конца рассказал. А из того что имеется в наличии получается не очень приглядная картина - прям тебя ставят в очень неловкое положение... Но куда денешься условие есть условие...
Поэтому придется использовать две маски - ? и ?? на конце...


Добавлено:
То есть вот так:
Код: FOR /F "USEBACKQ TOKENS=1 DELIMS=" %%a IN (`DIR /O:N /B TF982?.arj TF982??.arj 2^>nul`) DO SET "LAST_FILE=%%~na"
Автор: 192168
Дата сообщения: 30.11.2009 14:34
yurkesha
2^>nul - что выполняется?
Автор: yurkesha
Дата сообщения: 30.11.2009 14:40
192168
Гасит сообщение об оштбке при первом использовании - то есть когда нету файлов по маске...
Автор: 192168
Дата сообщения: 30.11.2009 14:57
Большое спасибо.

Если не трудно, почему 2^ ?
^ исключающее или, 2 будет errorlevel при отсутствии файлов?
Автор: yurkesha
Дата сообщения: 30.11.2009 15:33
192168
^ - символ экранирования для символа перенаправления.... Смотри FOR /?

Добавлено:
2 - это поток ошибок - его перенаправляем в NUL...
Автор: 192168
Дата сообщения: 30.11.2009 16:13
Ок, спасибо.
cmd неисчерпаем, как атом...
Автор: GORA2
Дата сообщения: 30.11.2009 20:24

Код: Echo Proba
Rem где - код 07H (BEEP)
Автор: BorlandIMHO
Дата сообщения: 01.12.2009 00:45
GORA2
не знаю, как у Вас - у меня работает...
Правба, "бип" выдаёт через звуковую карту...
Автор: BVV63
Дата сообщения: 01.12.2009 04:53
192168
Вот мой вариант. Маска такая, которую Вы указали: TF982.

Код:
If Not Exist "<Путь к архивам>\TF982*.*" (
    Set Number=1
    GoTo :0
    )
CD "<Путь к архивам>"
For %%A In (TF982*.*) Do (
    Set ArchiveName=%%A
    )
Set Number=%ArchiveName:~5,1%
Set /A Number=%Number%+1
:0
"<Путь к архиватору>\Arj.Exe" a -h#"<Путь к архивам>\TF982%Number%" SFile.ext1
Автор: mugil_cephalus
Дата сообщения: 01.12.2009 11:35
форумчане, у кого установлен win server 2003 resource kit: там есть команда clip?

Автор: BVV63
Дата сообщения: 01.12.2009 12:25
mugil_cephalus
Нет такой.
Автор: mugil_cephalus
Дата сообщения: 01.12.2009 12:31
BVV63
thanks
Автор: 192168
Дата сообщения: 01.12.2009 14:54
BVV63

Спасибо!
Уточнились с маской и нумерацией; маску приняли вида *DDN*.ext1, проблема пять-шесть символов снята.

DD дата двухсимвольная;
N - номер в течение дня

Спасибо.

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778

Предыдущая тема: во вкладке автозагрузка


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