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

Показать сообщение отдельно

Пользователь


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

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


Новогодние чудеса продолжаются…

Задача была в проанализировать текстовой лог-файл (\Base\log.txt)
с двумя колонками:
Цитата:
…..
c:\test1\test.doc Project1
d:\test2\test.doc Project1
…..
В паке Base\Project1\ нужно собирать одноименные файлы разных версий c восходящей нумерацией. Т.е. если на дисках с: и d: оказались разные по размеру файлы то после работы скрипта в папке Base\Project1\ появятся 1test.doc 2test.doc

Создаю пакетный файл:
Цитата:
for /f "tokens=1,2 delims= " %%A in (%~d0\Base\log.txt) do (set Arg1=%%A & set Arg2=%%B & call testproject Arg1 Arg2)
Текст подпрограммы testproject:
Цитата:
rem set Arg1=l:\test1\test.doc
rem set Arg3=Проект

rem выделим из Arg1 имя файла с расширением
for %%i in (%Arg1%) do (set name1=%%~Ni%%~Xi)
rem определим размер файла test.doc
for %%i in (%Arg1%) do (set /a size1=%%~Zi)

rem в цикле label1 сравним имеющиеся файлы в папке “Проект”
set /a j=1
:label1
set Arg2=%~d0\Base\%Arg3%\%j%%name1%
set /a size2=0

rem определим размер файла jtest.doc <--- ОШИБКА!!! “отсутствующий операнд”
for %%i in (%Arg2%) do if exist %Arg2% (set /a size2=%%~Zi)

rem если такого файла нет копируем его и выходим
if not exist %Arg2% (xcopy "%Arg1%" "%Arg2%" /c/q/r/h & goto exit)
rem если он есть, но другого размера продолжаем перебор
if "%size2%" neq "%size1%" (set /a j=j+1 & goto label1)
:exit
При передаче параметров подпрограмме из цикла возникает указанная ошибка. Если руками задать значение переменные в подпрограмме testproject все работает отлично. В чем косяк не пойму?!

Последний раз редактировалось akrav, 07-01-2008 в 17:01.


Отправлено: 23:42, 06-01-2008 | #3