Как вставить вчерашнюю дату в имя файла?

Обсуждение программ nnCron и nnCron LITE

Как вставить вчерашнюю дату в имя файла?

Postby spronkin » Sun, 15 Jan 2012, 14:16

Как изменить имя файла, вставив в него текущую дату понятно:
Code: Select all
nncron.exe S" y:\Penza_web-камеры.xlsx" S" y:\Penza_web-камеры%YYYY%%MM%%DD%.xlsx" FRENAME


Как теперь сделать, чтобы дата была на 1 сутки меньше, т.е. вчерашней?
Команды для изменения даты файла не нашел, к сожалению.
User avatar
spronkin
 
Posts: 86
Joined: Sun, 15 Jan 2012, 13:56

Re: Как вставить вчерашнюю дату в имя файла?

Postby VoidVolker » Sun, 15 Jan 2012, 15:05

Code: Select all
S" y:\Penza_web-камеры.xlsx" S" y:\Penza_web-камеры%YYYY%%MM%%DD%.xlsx" EVAL-SUBST FRENAME

В крон ини или отдельный плагин:
Code: Select all
: вчера  ( -- num_YYYYMMDD )
  Year@ Mon@ Day@ -1 DAY+  SWAP 100 * +  SWAP 10000 * + ;

Далее просто используем:
Code: Select all
S" y:\Penza_web-камеры.xlsx" S" y:\Penza_web-камеры%вчера N>S%.xlsx" EVAL-SUBST FRENAME
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2898
Joined: Tue, 25 Apr 2006, 17:56

Re: Как вставить вчерашнюю дату в имя файла?

Postby spronkin » Sun, 15 Jan 2012, 16:09

Что-то я не понял. Я помещаю свой код в батник, при выполнении которого предопределенные переменные %YYYY%%MM%%DD% проглатываются. И уже не мой скрипт ни ваш не работают.
Вот что в результате выводится в cmd:

Code: Select all
C:\nnCron>nncron.exe S" y:\Penza_web-камеры.xlsx" S" y:\Penza_web-камеры.xlsx" FRENAME

Code: Select all
C:\nnCron>nncron.exe S" y:\Penza_web-камеры.xlsx" S" y:\Penza_web-камеры.xlsx" EVAL-SUBST FRENAME


Code: Select all
C:\nnCron>nncron.exe %MM%

C:\nnCron>nncron.exe %QUOTE%


Что это случилось не пойму, только что все работало и бац. В чем дело?
User avatar
spronkin
 
Posts: 86
Joined: Sun, 15 Jan 2012, 13:56

Re: Как вставить вчерашнюю дату в имя файла?

Postby VoidVolker » Sun, 15 Jan 2012, 16:22

А в консоли крона или в задаче работает? Что вообще было сделано?
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2898
Joined: Tue, 25 Apr 2006, 17:56

Re: Как вставить вчерашнюю дату в имя файла?

Postby spronkin » Sun, 15 Jan 2012, 16:40

Сделал только то, что высказали, добавил в nncron.ini
Code: Select all
: вчера  ( -- num_YYYYMMDD )
  Year@ Mon@ Day@ -1 DAY+  SWAP 100 * +  SWAP 10000 * + ;

Более ничего не менял. Перезапускал сервис - не помогло.
Простая конструкция работает:
Code: Select all
nncron.exe S" y:\Penza_web-камеры.xlsx" S" y:\Penza_web-камеры_2.xlsx" FRENAME

А эта уже нет
Code: Select all
nncron.exe S" y:\Penza_web-камеры.xlsx" S" y:\Penza_web-камеры2%YYYY%%MM%%DD%.xlsx" FRENAME

В консоли пишет OK, но вообще не работает
Code: Select all
S" y:\Penza_web-камеры.xlsx" S" y:\Penza_web-камеры%YYYY%%MM%%DD%.xlsx" FRENAME
 Ok....
FILE-RENAME: "Y:\Penza_web-камеры.xlsx" "Y:\Penza_web-камеры2.xlsx"
 Ok........

ver. nncron193b3.exe.
Касперский блокирует uninstall.exe и файлы в папке temp как RootShell, но отключить его я к сожалению не могу из-за пароля.
User avatar
spronkin
 
Posts: 86
Joined: Sun, 15 Jan 2012, 13:56

Re: Как вставить вчерашнюю дату в имя файла?

Postby VoidVolker » Sun, 15 Jan 2012, 17:10

Как бы вот так надо:
VoidVolker wrote:S" y:\Penza_web-камеры.xlsx" S" y:\Penza_web-камеры%YYYY%%MM%%DD%.xlsx" EVAL-SUBST FRENAME

Внимательнее надо быть.
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2898
Joined: Tue, 25 Apr 2006, 17:56

Re: Как вставить вчерашнюю дату в имя файла?

Postby spronkin » Sun, 15 Jan 2012, 17:37

Прошу прощения если не так выразился, но повторюсь, что ни моя, ни ваша конструкции не работают. Файл остается с таким же именем как и был. В этом комменте я лишь пытался сказать, что результат отсутствует, а работает лишь простое переименование в Penza_web-камеры_2.xlsx

Ваша строка:
Code: Select all
nncron.exe S" y:\Penza_web-камеры.xlsx" S" y:\Penza_web-камеры%вчера N>S%.xlsx" EVAL-SUBST FRENAME
при выполнении как bat-файла дает следующее:
Code: Select all
C:\nnCron>nncron.exe S" y:\Penza_web-камеры.xlsx" S" y:\Penza_web-камеры.xlsx" EVAL-SUBST FRENAME
Т.е. файл переименовывается сам в себя.
если ее просто вставить в cmd из буфера, то часть синтаксической конструкции %вчера N>S% видна на экране, но результата переименования все равно нет
Code: Select all
C:\nnCron>nncron.exe S" y:\Penza_web-камеры.xlsx" S" y:\Penza_web-камеры%вчера N>S%.xlsx" EVAL-SUBST FRENAME

PS: извините, я начинающий пользователь, сейчас в спешке пытаюсь написать и попробовать еще выполнить как задачу. Не поможете?
User avatar
spronkin
 
Posts: 86
Joined: Sun, 15 Jan 2012, 13:56

Re: Как вставить вчерашнюю дату в имя файла?

Postby VoidVolker » Sun, 15 Jan 2012, 17:53

Кстати, для перемещения файла следует использовать FMOVE.
Справка > Ключевые слова nnCron > Работа с файлами и каталогами > FILE-RENAME: "old_filename" "new_filename"
Переименовывает указанный файл. Если вы просто перемещаете файл, а не изменяете его имя, то в качестве аргумента to_filename можно указывать приемный каталог без имени файла.
В отличии от слова FILE-MOVE: может переименовывать (перемещать) каталоги, но только в пределах одного диска.

FILE-MOVE: "from_filename" "to_filename"
Перемещает указанный файл. Если вы не изменяете имя файла в процессе перемещения, то в качестве аргумента to_filename можно указывать приемный каталог без имени файла.
Не поддерживает работу с масками имен файлов и не работает с каталогами.
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2898
Joined: Tue, 25 Apr 2006, 17:56

Re: Как вставить вчерашнюю дату в имя файла?

Postby spronkin » Sun, 15 Jan 2012, 18:32

Аналогично, с FMOVE происходит только простое переименование в в filename_2.ext, переименования в filename%YYYY%%MM%%DD%.ext не происходит.

Да что ж это такое? У вас работает?
Диск "y" является сетевым, пробовал с системного, со своими правами. Но тут дело не в правах, а в том что предопределенные переменные не выводятся. Где-то у меня синтаксическая ошибка по-ходу...
User avatar
spronkin
 
Posts: 86
Joined: Sun, 15 Jan 2012, 13:56

Re: Как вставить вчерашнюю дату в имя файла?

Postby VoidVolker » Sun, 15 Jan 2012, 18:47

В консоли крона или задаче работает? Проверить можно в консоли крона:
Code: Select all
S" y:\Penza_web-камеры%вчера N>S%.xlsx" EVAL-SUBST TYPE CR

Code: Select all
y:\Penza_web-камеры20120114.xlsx
 Ok
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2898
Joined: Tue, 25 Apr 2006, 17:56

Re: Как вставить вчерашнюю дату в имя файла?

Postby elos » Sun, 15 Jan 2012, 18:56

До кучи...

В помощи крона что-то не нашёл, но в помощи nnbackup это описано - "Можно ли использовать переменные в командной строке?"
Можно. В командной строке WinNT/2000/XP вы можете использовать переменные с макроподстановками (%...%), но для этого обязательно надо окружать строку с переменной двойными кавычками, иначе подстановки попытается обработать командный интерпретататор. Разумеется, в командной строке не стоит использовать переменные %crlf%, %QUOTE% и %PERCENT%.

Вот несколько примеров:
Code: Select all
nnbackup.exe dump 0 -i c:\data\ -o d:\backup -dn "%DumpLevel @%_my_data"
nnbackup.exe ver -n 7 -i c:\data\ -o d:\backup -sdn "my_data_%DD%-%MM%-%YYYY%" 

Чтобы использовать переменные в батч-файлах и командной строке Win9*/ME, вам прийдется не только окружить строку с переменной двойными кавычками, но и "удвоить" каждый из знаков процента. Например:
Code: Select all
nnbackup.exe dump 0 -i c:\data\ -o d:\backup -dn "%%DumpLevel @%%_my_data"
nnbackup.exe ver -n 7 -i c:\data\ -o d:\backup -sdn "my_data_%%DD%%-%%MM%%-%%YYYY%%"


Похожее - раз и два (про день назад).
elos
 
Posts: 664
Joined: Tue, 25 Apr 2006, 11:15

Re: Как вставить вчерашнюю дату в имя файла?

Postby spronkin » Sun, 15 Jan 2012, 19:10

Как задача работает эта конструкция:
Code: Select all
#( test_task
    Time: 0 8 * 1-2 * 2012
    Time: 0 8 1-4 3 * 2012
    NoActive
    Action:
   FILE-RENAME: "c:\nnCron\Penza.xlsx" "c:\nnCron\Penza%YYYY%%MM%%DD%.xlsx"
)#


Code: Select all
S" y:\Penza_web-камеры%вчера N>S%.xlsx" EVAL-SUBST TYPE CR
y:\Penza_web-камеры20120114.xlsx

дает OK

Но
Code: Select all
S" y:\Penza_web-камеры.xlsx" S" y:\Penza_web-камеры%вчера N>S%.xlsx" EVAL-SUBST FRENAME

из консоли пишет тоже ok, но файл не переименовывается
User avatar
spronkin
 
Posts: 86
Joined: Sun, 15 Jan 2012, 13:56

Re: Как вставить вчерашнюю дату в имя файла?

Postby VoidVolker » Sun, 15 Jan 2012, 19:21

Ну тогда если надо из командой строки крона, то проще так:
Code: Select all
nncron.exe -run test_task

Кстати, ннкрон последний вот этот: http://www.nncron.ru/download/nncron193b10.exe
И еще, какая ОС? Под семеркой/вистой крон следует запускать как приложение. И еще стоит попробовать без касперского, он все таки несколько непредсказуемый и может втихую блокировать ннкрон.
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2898
Joined: Tue, 25 Apr 2006, 17:56

Re: Как вставить вчерашнюю дату в имя файла?

Postby spronkin » Sun, 15 Jan 2012, 19:39

Проблему я пока до конца не решил, но понял, что дело в правах на файл или связано с особенностью работы с сетевыми ресурсами.
Т.е. скрипт работает на c:\nnCron\, но не работает на сетевом диске y:\

Я сам сижу на локальной рабочей станции под XP под пользователем oper в рабочей группе TP-WS-07.
Сетевой диск относится к компьютеру локальной сети, доступ к которому осуществляется с именем пользователя tip в домене PFVT.

При работе с сетевым диском не работают ни команды FILE-RENAME, ни FILE-COPY, ни FILE-MOVE. Пробовал запускать задачу от имени tip командой
Code: Select all
User: tip Password: 123 DOMAIN: PFVT LogonInteractive
, вход в систему проходит без ошибок (по крайней мере Windows не рапортует), однако действия в задаче по каким-то причинам не выполняются.

Хотя nnbackup из cmd работая под текущим пользователем oper копирует с сетевого диска и на него без проблем. Однако при выполнении nnBackup из задачи он не видит сетевой диск y. Я так понял, nncron функционирует от имени системы, поэтому доступ к сетевым ресурсам у него ограничен.

Мне нужно переименовать файл на сетевом диске.

Временно решил проблему так: запускаю задачу от имени пользователя oper, и далее использую команду net use для подключения сетевого ресурса. Т.обр. доступ к сетевому диску осуществляется уже от oper'а и далее запускаю процесс nnbackup для копирования файла на c:\, там его переименовываю и заливаю обратно на сетевой диск, ну и отключаю его напоследок (подключений к диску не разрешается более двух).
Code: Select all
#( test-task2
    Time: 0 8 * 1-2 * 2012
    Time: 0 8 1-4 3 * 2012
  \ User: tip Password: ght,bjnbr2032 Domain: PFVT LogonInteractive
    User: oper \ запускаем задачу от имени oper
    Action:
        StartIn: "c:\nnBackup\"
        START-APPW: cmd.exe net use y: \\trishina\Web-cam 123 /user:PFVT\TIP                                 
        START-APPW: cmd.exe nnbackup.exe sync -i "c:\nnCron\empty" -o "c:\nnCron\uik" -da    \ чистим папку на всякий случай
        START-APPW: cmd.exe nnbackup.exe copy -i "y:\Penza_web-камеры.xlsx" -o "c:\nnCron\uik" \ копируем на диск C:
        FILE-RENAME: "c:\nnCron\uik\Penza_web-камеры.xlsx" "c:\nnCron\uik\Penza_web-камеры%вчера N>S%.xlsx" \ Переименовываем
        START-APPW: cmd.exe nnbackup.exe copy -i "c:\nnCron\uik" -o "y:\"  \ копируем обратно
        START-APPW: cmd.exe net use y: /DELETE                                       \ отключаем сетевой диск, так как он на самом деле не виден под текущим пользователем (oper)
)#
User avatar
spronkin
 
Posts: 86
Joined: Sun, 15 Jan 2012, 13:56


Return to nnCron forum (Russian)

Who is online

Users browsing this forum: ask and 2 guests

cron