Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   переменная меняется внутри цикла for, последовательно принимая значения имен файлов (http://forum.oszone.net/showthread.php?t=290796)

islily 11-11-2014 16:26 2427968

переменная меняется внутри цикла for, последовательно принимая значения имен файлов
 
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 2427993

islily, приведите полный код, поскольку непонятно, в каком месте кода
Цитата:

Цитата islily
set aa=%list:~0,1%
не работает »

.

Iska 11-11-2014 17:22 2427997

Цитата:

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

Делайте аналогично:
Код:

set aa=!list:~0,1!
Либо обходным путём:
Код:

call set aa=%%list:~0,1%%
Update: и, да — присоединюсь к коллеге Georgio: приводите полный код.

Iska 11-11-2014 21:39 2428127

Цитата:

Цитата Georgio
Iska, если внутри цикла, то сработают только конструкции с удвоенными знаками процента:
Код: Выделить весь код
call set aa=%%list:~0,1%%
и аналогичные ей. »

Угу. Это я описался. Спасибо, что заметили, поправил.

Georgio 11-11-2014 22:05 2428143

Iska, я тоже поправил...

islily 12-11-2014 11:00 2428345

Вложений: 1
вот

islily 12-11-2014 11:18 2428358

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

Georgio 12-11-2014 13:41 2428436

islily, а что Вы хотите получить с помощью "1.bat" и "2.bat"?

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

islily 12-11-2014 14:36 2428453

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 2428457

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

islily 12-11-2014 15:09 2428464

Цитата:

Цитата sov44
islily, для создания архива файлов определённого временного диапазона посмотрите в сторону ключей -to, -tn архиватора rar»

sov44, это применимо когда обрабатываем файлы по времени создания, в моем случае надо по имени лога

islily 13-11-2014 08:00 2428762

Помогите пожалуйста :dont-know

Iska 13-11-2014 08:08 2428767

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

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

islily 13-11-2014 08:33 2428770

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

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

Georgio 13-11-2014 10:52 2428826

Код:

@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 2428855

Цитата:

Цитата islily
sov44, это применимо когда обрабатываем файлы по времени создания, в моем случае надо по имени лога »

Смею предположить, что имя лога связно с датой его изменения

islily 13-11-2014 15:58 2428983

Georgio, супер, супер, я могу снова продолжать решение))))))) до такого я б наверно не додумалась)

islily 20-11-2014 10:01 2432440

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 2438818

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


Время: 13:39.

Время: 13:39.
© OSzone.net 2001-