Войти

Показать полную графическую версию : переменная меняется внутри цикла for, последовательно принимая значения имен файлов


islily
11-11-2014, 16:26
cd E:\log
setlocal enabledelayedexpansion
set list=
for %%i in (*) do set list=!list! %%i
echo %list%
set list >>E:\1.txt

а вот уже set aa=%list:~0,1%
не работает

Georgio
11-11-2014, 17:17
islily, приведите полный код, поскольку непонятно, в каком месте кода set aa=%list:~0,1%
не работает ».

Iska
11-11-2014, 17:22
а вот уже set aa=%list:~0,1%
не работает »
Делайте аналогично:
set aa=!list:~0,1!
Либо обходным путём:
call set aa=%%list:~0,1%%

Update: и, да — присоединюсь к коллеге Georgio: приводите полный код.

Iska
11-11-2014, 21:39
Iska, если внутри цикла, то сработают только конструкции с удвоенными знаками процента:
Код: Выделить весь код
call set aa=%%list:~0,1%%
и аналогичные ей. »
Угу. Это я описался. Спасибо, что заметили, поправил.

Georgio
11-11-2014, 22:05
Iska, я тоже поправил...

islily
12-11-2014, 11:00
вот

islily
12-11-2014, 11:18
Iska, Georgio, выше написала на каком этапе я не могу продолжить написание батника
Решение будет состоять из 3х батников, 1.bat определяет каким днем должны быть-> от сегодняшнего - 3 дня и от сегодняшнего - месяц -3дня, 2.bat должен работать с папкой с логами, определить что архивировать, как архивировать и куда. 3.bat должен просто выполнить первые 2 батника и удалить txt кот создавались ими (не обяз-но).

Georgio
12-11-2014, 13:41
islily, а что Вы хотите получить с помощью "1.bat" и "2.bat"?

Приведите желаемые результаты в том же виде, в каком Вы их хотите видеть по завершении работы этих пакетных файлов (то есть желаемое содержимое файла "1.txt" в обоих случаях).

islily
12-11-2014, 14:36
Georgio, чтобы понять каков результат должен быть, нужно прочитать задание, кот я прикрепила
1.txt я для самопроверки сделала.
1.bat я его сделала до конца, там он определяет с каким днем нужно сравнивать лог файлы в папке в зависимости от сегодняшнего дня %date%. Сравнение идет по двум условиям 1) не прошел месяц 2) прошло более месяца И там и там не берем файлы за последние 3 дня. И сделала эти переменные форматом yyyymmdd
2.bat не могу сделать. Т.к это множество лог файлов %list% нужно перебрать и сделать переменные aa=%list%:~0.8 чтобы они были тоже фотматом yyyymmdd. И затем эту переменную сравнивать. Если название лога yyyymmdd (из 2.bat)> yyyymmdd (из 1.bat), то архивируй в один файл и переписаны в другой каталог

E:\log
20141112.log
20141111.log
20141110.log
.........

sov44
12-11-2014, 14:49
islily, для создания архива файлов определённого временного диапазона посмотрите в сторону ключей -to, -tn архиватора rar

islily
12-11-2014, 15:09
islily, для создания архива файлов определённого временного диапазона посмотрите в сторону ключей -to, -tn архиватора rar»
sov44, это применимо когда обрабатываем файлы по времени создания, в моем случае надо по имени лога

islily
13-11-2014, 08:00
Помогите пожалуйста :dont-know

Iska
13-11-2014, 08:08
islily, это обязательно должен быть пакетный файл? Суть в том, что на WSH/PoSH работа с интервалами дат реализуется готовыми функциями/методами, а на пакетных файлах все вычисления надо делать «ручками».

Смысл задания не осилил ;).

islily
13-11-2014, 08:33
Iska, Да, это должен быть CMD/BAT
Пофиг на смысл) Мне продолжить решение надо...я близка к концу, загвоздка вот в чем>
Есть логи
E:\log
20141112.log
20141111.log
20141110.log
.........

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

Georgio
13-11-2014, 10:52
@echo off

cd /d "E:\log"
setlocal enabledelayedexpansion
for /f %%i in ('dir /a-d/b *.log') do (
set aa=%%~ni
echo !aa!
if !aa! leq %d3% тратата
)

sov44
13-11-2014, 11:45
sov44, это применимо когда обрабатываем файлы по времени создания, в моем случае надо по имени лога »
Смею предположить, что имя лога связно с датой его изменения

islily
13-11-2014, 15:58
Georgio, супер, супер, я могу снова продолжать решение))))))) до такого я б наверно не додумалась)

islily
20-11-2014, 10:01
Georgio,

setlocal enabledelayedexpansion
for /f %%i in ('dir /a-d/b *.log') do (
set aa=%%~ni
echo !aa!
if !aa! leq %d3% тратата
)

Теперь пишу на юникс подобной ос, подскажите пжлст, как это будет выглядеть на bash?

islily
02-12-2014, 22:14
Ребят!! Мой вопрос не по вашей части? Мне идти на другой форум? Или все же дадите решение моей проблемы, пожаааааааалуйста. На Винде сделала, а вот на Убунту нет, опять на той же фигне застопорилась(((




© OSzone.net 2001-2012