Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Не работает команда set /a

Ответить
Настройки темы
CMD/BAT - [решено] Не работает команда set /a

Старожил


Сообщения: 183
Благодарности: 14

Профиль | Отправить PM | Цитировать


здравствуйте, прошу Вас помочь в решении одной задачи.

в определенном каталоге находятся архивы, которые именуются по дате их создания, пример названия таких файлов:
2011.06.05-12.00.00.7z
2011.06.06-12.00.00.7z
2011.06.07-12.00.00.7z
2011.06.08-12.00.00.7z

требуется хранить в каталоге ТОЛЬКО три последних (по дате их создания) архива - а остальные удалить
(т.е. удалим файл - 2011.06.05-12.00.00.7z - т.к. он самый поздний )
мое решение - скрипт следующего содержания:
===================================
set S=3

for /F "Delims=" %%i in ('dir /B /O:N *.7z') do (
set /a S-=1
if /I S LEQ 0 DEL %%i
)
===================================

скрипт отрабатывается, ошибок не выдает, но команда set /a S-=1 не выполняется - не выполнение заключается в том что значение S не уменьшается на 1

если написать в скрипте
===================================
set S=3
set /a S-=1
echo %S%
===================================

то функция работает.

Получается что функция set с параметром /a не работает в составе цикла for

если нет решения этой задачи, то как ее решить???

Отправлено: 23:07, 27-06-2011

 

Аватара для ferget

Разный


Сообщения: 1294
Благодарности: 359

Профиль | Отправить PM | Цитировать


есть такое:
оставить три последних по дате файла и удалить остальное

Код: Выделить весь код
for /f "skip=3 delims=" %%a in ('dir/b/a-d/o-d *.7z') do  del "%%a"
Это сообщение посчитали полезным следующие участники:

Отправлено: 02:54, 28-06-2011 | #2



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

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Googler


Сообщения: 3665
Благодарности: 1560

Профиль | Отправить PM | Цитировать


Цитата mark23:
функция set с параметром /a не работает в составе цикла for »
set работает, подстановка %S% не работает, см. "HELP SET"
Код: Выделить весь код
SetLocal EnableDelayedExpansion

set/a S=3
for /f "delims=" %%i in ('dir/b/o:n *.7z') do (
  set/a S-=1
  if !S! LEQ 0 DEL %%i
)

-------
Как сообщить о том, что моя проблема решена?
не оказываю техподдержку через ПМ/ICQ/Mail - для этого есть форум

Это сообщение посчитали полезным следующие участники:

Отправлено: 03:29, 28-06-2011 | #3


Аватара для ferget

Разный


Сообщения: 1294
Благодарности: 359

Профиль | Отправить PM | Цитировать


остаются только 2 файла

Последний раз редактировалось ferget, 28-06-2011 в 05:43.


Отправлено: 03:58, 28-06-2011 | #4


Старожил


Сообщения: 183
Благодарности: 14

Профиль | Отправить PM | Цитировать


ferget
изменил команду на: for /f "skip=3 delims=" %%a in ('dir /b /o:n *.7z') do del "%%a"
результат: удалил оставил только три последних файла и удалил остальные

amel27 вы все правильно написали, надо только изменить оператор сравнения в команде IF на LSS

если нет возражений то отмечу - решение данной темы найдено.

Отправлено: 07:01, 28-06-2011 | #5


Новый участник


Сообщения: 11
Благодарности: 0

Профиль | Отправить PM | Цитировать


Здравствуйте. Возникла такая же проблема, как и у автора темы. Есть скрипт для экспорта веток реестра из списка:
читать дальше »

SETLOCAL ENABLEEXTENSIONS
SETLOCAL ENABLEDELAYEDEXPANSION
SET /A NUM=100
FOR /F "TOKENS=1 DELIMS=" %%I IN (LIST.TXT) DO (
REG EXPORT %%I .\%NUM%.REG
SET /A NUM+=1
ECHO %NUM%)
SET /A NUM+=1
ECHO %NUM%
PAUSE

Так вот, в цикле переменная num остается без изменений, однако вне цикла она принимает итоговое значение, которое и должно быть (если в списке например 65 строк, то результатом будет 166)

Отправлено: 12:26, 04-04-2013 | #6


Аватара для gora

Ушёл из жизни


Contributor


Сообщения: 6042
Благодарности: 3487

Профиль | Отправить PM | Цитировать


Цитата dimon91:
Возникла такая же проблема, как и у автора темы »
Решение в посте 3.
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:09, 04-04-2013 | #7


Ветеран


Contributor


Сообщения: 24163
Благодарности: 7015

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
@echo off
setlocal enableextensions enabledelayedexpansion

set /a num = 100

for /f "tokens=1 delims=" %%i in (list.txt) do (
	reg.exe export %%i .\!num!.reg
	set /a num += 1
	echo !num!
)

set /a num += 1
echo %num%

pause
Это сообщение посчитали полезным следующие участники:

Отправлено: 17:16, 04-04-2013 | #8



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Не работает команда set /a

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Криво работает сочетание for и set Boa Soft Скриптовые языки администрирования Windows 4 16-06-2011 16:37
Ошибка - [решено] Не работает команда mstscoo Tangor Microsoft Windows 2000/XP 4 18-10-2010 14:26
Прочие - Web-камера не работает. Ошибка 80004005 cannot set frame rate for preview Raspytnik Microsoft Windows 7 3 17-03-2010 22:41
Не работает команда Run archiver AutoIt 6 30-12-2009 22:01
Не работает команда ping dascon Сетевые технологии 5 11-12-2006 16:12




 
Переход