4u3u
Зарегистрирован: 24.01.2003 Сообщения: 997 Откуда: Moscow
|
Добавлено: Чт Апр 07 2005 11:12 Заголовок сообщения: |
|
|
Тут ошибка на ошибке :)
1. По умолчанию for /f присваивает переменной часть строки до первого пробела, так что если дата Thu 04/07/2005, то переменной f будет присвоено значение Thu что естественно не равно значению переменной %date%. Чтобы в переменную попадала вся строка, нужно добавить параметр "delims=", отключающий разделители между элементами строки.
2. Чтобы подставлять значение переменной f в конструкцию IF, нужно использовать синтаксис %f%, а не %%f
3. Не во всех ОС, насколько я помню, вывод date /t и содержимое %date% одинаково. Но даже если я ошибаюсь, принципиально лучше сравнивать данные из одного источника, так что строку 7 я бы заменил на echo %date%>data.txt
А если ">" заменить на ">>", то в файле будут храниться все даты запуска, что полезно для отслеживания работы скрипта. При этом команда FOR в первой строке будет всегда присваивать переменой f значение последней записи в файле, так что логика скрипта не пострадает. Обрати внимание, что я убрал пробелы, потому что иначе они тоже попадают в строку, и в этом случае первый IF никогда не выдаст True.
4. Просто замечание - в указателе :end нет необходимости, потому как существует указатель :eof, всегда показывающий на конец файла. Так что можно в строке 4 написать goto :eof и убрать лейбл в конце батника.
Как бы я написал:
Код: | @echo off
FOR /F "delims=" %%i in (data.txt) do set f=%%i
if not "%f%" == "%date%" (
echo work
echo %date%>>data.txt
goto :eof
)
echo file is runing today |
|
|