Форум программистов, компьютерный форум, киберфорум
Наши страницы
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.68/74: Рейтинг темы: голосов - 74, средняя оценка - 4.68
Badger
91 / 91 / 4
Регистрация: 25.06.2012
Сообщений: 278
1

Проверка существования каталога

04.12.2012, 15:57. Просмотров 14286. Ответов 6
Метки нет (Все метки)

Привет всем.
Есть каталог o:\2012-11
Это год и месяц соответственно, в конце месяца (в двадцатых числах) этот каталог удаляется и создается o:\2012-12, т.е. с именем следующего месяца, но текущий еще 11. Мне нужно сделать проверку если не существует каталога с текущим годом и месяцем, то добавить единицу и проверить снова. Вот код всего скрипта резервной копии:
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
@echo off
set d=%date:~0,2%
set m=%date:~3,2%
set y=%date:~6,4%
set arch_date=%y%.%m%.%d%
set pSource=o:\%y%-%m%
set pDest=g:\mass_arch
set LogFile=g:\mass_arch\mass_arch.log
set rar="c:\program files\winrar\rar.exe"
 
if %m:~0,1%==0 set m=%m:~1%
 
:check
if not exist %pSource% (
    set /a %m%+=1
    if %m% GTR 12 set m=1& set /a %y%+=1& goto :check
) else (
    goto :work
)
 
:work
if %m% LSS 10 set m1=0%m%
 
echo. >> %LogFile%
echo ---%date%------------------------------------------- >> %LogFile%
echo Start Back up files at %date% %time% >> %LogFile%
forfiles /p %pDest% /m *.rar /d -30 /C "cmd /c del /f /q @file | echo @file was deleted >> %LogFile%"
%rar% a -r -ep1 %pDest%\%arch_date%.rar %pSource%
echo End Back up files at %date% %time% >> %LogFile%
Интересует меня блок проверки по метке :check. Не пойму как сделать правильно эту проверку.

Добавлено через 42 минуты
Вроде бы заработало, немного исправив:
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
@echo off
set d=%date:~0,2%
set m=%date:~3,2%
set y=%date:~6,4%
set arch_date=%y%.%m%.%d%
set pSource=o:\%y%-%m%
set pDest=g:\mass_arch
set LogFile=g:\mass_arch\mass_arch.log
set rar="c:\program files\winrar\rar.exe"
 
if %m:~0,1%==0 set m=%m:~1%
 
:check
if not exist %pSource% (
    set /a m+=1
    if %m% GTR 12 set m=1& set /a y+=1& goto :check
) else (
    goto :work
)
 
:work
set arch_date=%y%.%m%.%d%
set pSource=o:\%y%-%m%
 
if %m% LSS 10 set m1=0%m%
 
echo. >> %LogFile%
echo ---%date%------------------------------------------- >> %LogFile%
echo Start Back up files at %date% %time% >> %LogFile%
forfiles /p %pDest% /m *.rar /d -30 /C "cmd /c del /f /q @file | echo @file was deleted >> %LogFile%"
%rar% a -r -ep1 %pDest%\%arch_date%.rar %pSource%
echo End Back up files at %date% %time% >> %LogFile%
Может есть что подправить?
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.12.2012, 15:57
Ответы с готовыми решениями:

Проверка существования каталога, в имени которого есть пробелы
Согласно документации на команду IF для проверки существования каталога, необходимо выполнить...

Проверка существования директории
Здравствуйте. Проверка директории или папки. -------------------------------- Путь -...

Проверка существования файла
Создать КФ (Primer 11.bat) , который выполняет следующие функции: Очищает экран; Выводит на...

Проверка существования директории
добрый вечер. есть папки d:\data1\1\cfg\ d:\data1\2\cfg и т.д. имена могут быть разными...

Проверка существования файлов
Как сделать чтобы после первого запуска батника например создались файлы. когда будет второй и...

6
sov44
1763 / 747 / 128
Регистрация: 09.04.2011
Сообщений: 1,324
04.12.2012, 16:40 2
Badger, первое, что бросилось в глаза - то, что в 14 строчке идёт проверка на наличие папки (я полагаю, она создана и находится рядом с батником), однако в скрипте не увидел кода создания этой папки. Или она каждый раз создаётся вручную?
0
Badger
91 / 91 / 4
Регистрация: 25.06.2012
Сообщений: 278
04.12.2012, 18:57  [ТС] 3
Да, верно, этот каталог создается вручную, и автоматизировать его создание не требуется. В 6й строке только указываю путь к ней.
0
Badger
91 / 91 / 4
Регистрация: 25.06.2012
Сообщений: 278
24.12.2012, 16:15  [ТС] 4
Ап.
Проблема актуальна, как оказалось не работает ):
0
Dragokas
Эксперт WindowsАвтор FAQ
17112 / 7167 / 862
Регистрация: 25.12.2011
Сообщений: 10,964
Записей в блоге: 16
24.12.2012, 16:44 5
Хорошо. Значение новое месяцу Вы присвоили, а где обновление переменной pSource?
Между 16 и 17 нет Goto :check
Где отложенное расширение переменных? (сверка по условию проводится со старыми значениями)
Всегда используйте EnabbledelayedExpansion, когда работаете повторно с математикой внутри скобок или через амперсанд.
В одном случае m присваиваете числовой тип, а второй раз - уже строковой.

На место строк 13-19:
Bash
1
2
3
4
5
6
7
8
Setlocal EnableDelayedExpansion
...
:check
if not exist !pSource! (
  set /a m+=1
  if !m! GTR 12 set /a m=1& set /a y+=1& set pSource=o:\!y!-!m!
  goto :check
)
1
Badger
91 / 91 / 4
Регистрация: 25.06.2012
Сообщений: 278
24.12.2012, 22:27  [ТС] 6
Цитата Сообщение от Dragokas
Между 16 и 17 нет Goto :check
Почему же нет был переход на чек, в самом конце условия.
Теперь вроде бы работает:
Bash
1
2
3
4
5
6
7
8
9
10
11
:check
if !m! LSS 10 set m=0!m!
set pSource=o:\!y!-!m!
if not exist !pSource! (
  if %m:~0,1%==0 set m=%m:~1%
  set /a m+=1
  if !m! GTR 12 set /a m=1& set /a y+=1& set pSource=o:\!y!-!m!
  goto :check
)
 
echo %pSource%
Спасибо, что подтолкнули
0
Dragokas
Эксперт WindowsАвтор FAQ
17112 / 7167 / 862
Регистрация: 25.12.2011
Сообщений: 10,964
Записей в блоге: 16
25.12.2012, 13:11 7
Цитата Сообщение от Badger Посмотреть сообщение
был переход на чек, в самом конце условия.
Ну да, а если условие не выполняется, а %pSource% - is not exist, то перехода на :check нет.
1
25.12.2012, 13:11
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.12.2012, 13:11

Проверка существования строки
Суть в следующем: Нужно написать .bat файл, который проверяет hosts на наличие определенного...

Проверка существования папки в цикле
Собственно, как сделать? @echo off Setlocal EnableDelayedExpansion set folder="" for /f...

Циклическая проверка существования папки
Добрый день! Подскажите, пожалуйста: есть такой батник: xcopy "C:\1\template"...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.