Почему мой случай сравнения IF не работает?

update SOLVED – проблема не в моем коде. существует ограничение по designу (некоторые могут сказать «ошибка») в командном processоре. операторы сравнения IF не работают со значениями выше 2147483648. протестированы и реплицированы в Windows 2000, XP и Server 2003.

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

=========

приветствовать там в киберпространстве,

Я управляю networkingю небольшой компании. Я пытаюсь настроить автоматизированный process архивирования, используя batch file, работающий на serverе, и ему нужна небольшая помощь в логике. Я не программист и не имею времени изучать PowerShell или VBscript. Я прочитал и перечитал ссылку на команду MS на IF, FOR и CALL и не могу понять, что я делаю неправильно.

У нас есть Windows 2000 Server с двумя дисками и ленточным накопителем. На одном диске есть общая папка, назовите ее Public; другой диск не является общим, назовите его Staging.

Общий диск будет принимать inputящие резервные копии с клиентских компьютеров. Мне нужен process перемещения fileов из общего диска на накопительный диск до тех пор, пока диск не будет слишком полным, чтобы принимать больше fileов, после чего начlessся резервное копирование ленты. По завершении ленточного запуска Staging-диск будет опустошен, и process возобновит перемещение fileов из Public в Staging.

objective состоит в том, чтобы автоматически и постоянно архивировать fileы резервных копий рабочего стола на ленту без вмешательства пользователя, кроме изменения ленты.

Вы можете спросить, зачем задействовать два диска? Две причины:

1) Если рабочие столы поддерживают резервное копирование непосредственно на накопительный накопитель, в какой-то момент резервные копии клиентских компьютеров будут сбой из-за нехватки места на целевом диске. Я не могу предсказать, когда это произойдет; единственным определяемым условием, о котором я могу думать, будет произвольный порог свободного дискового пространства, но поскольку fileы резервных копий, которые будут архивироваться, будут разных размеров, я мог бы столкнуться с ситуацией, когда свободное пространство целевого диска выше порога, но следующая резервная copy превышает это пространство. Результат: резервное копирование клиентского рабочего стола завершается неудачей, и резервное копирование на ленту на serverе не запускается.

2) Если накопительный накопитель заполняется и по какой-либо причине происходит сбой резервного копирования на магнитной ленте (независимо от того, какая лента не изменилась или что-то еще), резервное копирование рабочих столов на общий диск покупает мне некоторое time, чтобы исправить проблему с лентой до того, как резервные копии рабочего стола начнут сбой.

Вот algorithm, который я пытаюсь закодировать:

1) Начать

2) Получите свободное пространство на промежуточном диске

3) Получите размер самого маленького fileа на общедоступном диске (если fileов less, выйдите)

4) Сравните размер fileа с свободным пространством на промежуточном диске

5) если file поместится, переместите его на Staging drive; else, выход и запуск резервного копирования ленты

6) вернуться в начало

И вот мой пакетный код, который не работает. На этом этапе тестирования у меня есть один file (8 ГБ) в общедоступном диске, который поместится в свободное пространство (32 ГБ) на промежуточном диске. Команда set подтверждает, что variables устанавливаются как ожидалось; process терпит неудачу в заявлении [if% BKFsize% LSS% DiskFree% "]. Вместо перемещаемого fileа вместо этого вызывается ленточная подпрограмма, указанная 'else':

@echo off setlocal enableextensions enabledelayedexpansion :Begin REM obtain and display free space on Staging drive. D: for /f "tokens=3 delims= " %%A in ('dir ^| find "bytes free"') do ( set Z=%%A set Z=!Z:,=! ) set DiskFree=!Z! echo. echo D: has %DiskFree% bytes free echo. REM obtain sizes of files on Public drive to be moved. E: cd \backup.email if not exist *.bkf exit dir *.bkf /b /os > BKFlist.txt for /f "tokens=*" %%G in (BKFlist.txt) do call :CheckBKF "%%G" goto :eof :CheckBKF set BKFfile=%1 set BKFsize=%~z1 echo. echo File %BKFfile% is %BKFsize% bytes echo. set pause REM move file(s) to Staging drive, space permitting; or, REM if not enough space for smallest file, start tape backup. if %BKFsize% LSS %DiskFree% ( echo Moving file %BKFfile% to drive D echo. move E:\backup.email\%BKFfile% D:\backup.email ) else ( C:\WINNT\AutoBackup\TapeBKF.cmd exit ) goto Begin :End 

Я знаю, что это должно быть довольно просто, но, как я уже сказал, я не программист, и я склоняюсь перед вашим превосходным мастерством. Любые советы очень ценятся, и спасибо.

  • После патчей, устанавливая элемент, который читается с компакт-диска ОС .. Пакеты обновления повторно применяются?
  • Как заблокировать email в приложениях Google?
  • пересылка небольших и больших пакетов: любая разница?
  • Максимальный размер сегмента UDP
  • Проверьте, какой средний размер пакета находится в сети (какой брандмауэр / маршрутизатор я должен get)
  • Заставить Windows отправлять пакеты, как только они прибудут
  • Сервер VMWare-ESXi отбрасывает пакеты, шаткое connection
  • Как избежать столкновения пакетов в полнодуплексном режиме?
  • «Доступ запрещен», только при попытке запустить скрипт через telnet
  • Есть ли cmd / certutils для копирования certificateа из одного магазина в другой?
  • Как развернуть Vista SP2 с носителями Vista SP1?
  • Давайте будем гением компьютера.