Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MS Windows > автоматическое переименование файла


Автор: Гость_Сергей 13.1.2006, 17:06
Вот в командной строке можно использовать переменные %DATE% и %TIME%, которые выдают соответственно дату в формате ДД.ММ.ГГГГ и время в формате ЧЧ:ММ:СС,ЦЦ
у меня стоит запланированное задание, которое каждый день создаёт файл с именем report.txt
вручную приходиться потом переименовывать этот файл, например monday.txt
вопрос 1.
как можно сделать назначенное задание, чтобы оно переименовывало файл report.txt в файл дня недели (в понедельник monday.txt и т. д.) или какие программы для этого есть?

вопрос 2. что означают ЦЦ (две цифры), следующие после запятой?

Автор: Bogdan1024 13.1.2006, 20:06
вопрос 1.
Можно запрограмировать прогу smile

Автор: quarz 14.1.2006, 19:44
Имхо средствами винды такое сделать не получится. Как сказал Богдан, выход - писать программу которая бы запускалась той же виндой после создания файла и переименовывала бы этот файл...работа на 2 строки)) если нужно - могу помочь

Автор: lovermann 15.1.2006, 00:19
Я так понял, у человека есть .bat-файл, который создаёт/исправляет лог. Зачем ему запускать какую-то программу, когда можно поправить этот батник так, чтобы он сам называл файл, как надо. Этот же код можно сохранить как отдельный батник и тоже создать задание запускать этот батник сразу после создания файла репорта.

Вот тебе часть кода, которая переименовывает файл в соответствии с днём недели:

Код

здесь был неработающий скрипт - стёрто


К сожалению, в моей версии DOS-а переменная %DATE% не хранит день недели, хотя в примерах я видел, что в других версиях она там хранится - её можно вытянуть, поэтому скрипт, который я привёл сделан немного сложно, что никак не влияет на его функциональность или скорость работы smile

Этот же код можно переписать на JScript или VBScript (будет намного проще, думаю, выглядеть) и использовать WSH, который есть в винде.

Автор: Гость_Сергей 16.1.2006, 13:02
loverman, спасибо за батник.
только неправильно он переименовывет. вот сегодня 16.01.2006 я его запускаю, он мне переименовывает в субботу, меняю дату на 18.01.2006 всё равно на субботу переименовывает.
и можешь поподробнее рассказать, как связаны errorlevel и день недели?

Автор: Гость_Сергей 16.1.2006, 13:04
%DATE% хранит в себе день недели, если стоит win2000, а на ХР и 2003 она не хранит день недели...

Автор: LSD 16.1.2006, 14:19
В принципе можно сделать такой финт ушами: в реестре в разделе HKCU\Control Panel\International присваиваем ключу sShortDate значение dddd (через апплет панели управления это не сделать, онбудет ругаться на неправильный формат). Теперь в переменной %DATE% будет храниться день недели, правда в сокращенном формате (Пн, ВТ, Ср и т.д.).
Чтобы не "поганить" основную систему, можно создать фиктивного пользователя и проделать эти установки для него. И соответсвенно запускать запланированное задание, от его имени.

Автор: Гость_Сергей 16.1.2006, 16:35
все назначенные задания у меня происходят от имени robot. поменял ему формат даты. действительно формат изменился.
НО. при выполнении этого задания, происходит ошибка (прошлый запуск 0х1). поискал в интернете, что бы это могло быть. нашёл ответ non-unicode symbols in bat-file. скорее всего это глюк какой-то из-за того, что переменная %DATE% в пакетном файле выдаёт день недели в дос-кодировке, а имя файла записывается в вин-кодировке. Может из-за этого чтонибудь не так?

Но всё же хотелось бы не менять формат даты у пользователя robot, потому что есть другие задания, в которых требуется именно формат ДД.ММ.ГГГГ

Объясните, пожалуйста, поподробнее как работает код у loverman, а то я не понял, как %errorlevel% влияет на текущий день недели.

Автор: Гость_Сергей 16.1.2006, 16:44
Да, прога тоже очень поможет.
quarz, можешь написать? думаю она небольшая, всего несколько строк.
Вот условие к проге.
исполняемый файл switch.exe
запускаться он будет майкрософтовским шедулером, соответственно с параметрами.
например switch.exe C:\reports\report.txt делает следующее.
берёт файл reports.txt, переименовывает его в monday.txt (меняет только имя файла, расширение оставляет).

А на чём написать сможешь?

Автор: lovermann 16.1.2006, 17:30
Мой предыдущий код не работает smile, но

smile
Есть другое решение: .vbs скрипт, который переименовывает файл. На этот раз работает - проверено 100%.

rename_file.vbs
Код

dValue = Weekday(Now)

If dValue = 1 Then
dName = "Sunday"
ElseIf dValue = 2 Then
dName = "Monday"
Elseif dValue = 3 Then
dName = "Tuesday"
Elseif dValue = 4 Then
dName = "Wednesday"
Elseif dValue = 5 Then
dName = "Thursday"
Elseif dValue = 6 Then
dName = "Friday"
Elseif dValue = 7 Then
dName = "Saturday"
Else
dName = "Value out of range!" 
End If

Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
fso.MoveFile "report.txt", dName&".txt"


И не надо никаких программ smile Названия дней недели можешь сам исправить - будет хоть русскими буквами smile Путь к файлу тоже можешь менять, если сам скрипт будет лежать не в той же директории, что и файл reports.txt

Автор: Гость_Сергей 16.1.2006, 18:57
loverman, огромное спасибо! всё работает.
только ещё один момент. что нужно добавить в файл rename_file.vbs, чтобы перед переименование файла удалялся старый файл?

в директории уже находятся файлы monday.txt, tuesday.txt ... и report.txt
твой скрипт виснет, если в понедельник переименовывается файл, а monday.txt уже существует.

Автор: Гость_Сергей 16.1.2006, 19:05
Нашёл! :-) надо читать мануалы :-)
добавил fso.DeleteFile и всё заработало.

всем спасибо!

Автор: lovermann 16.1.2006, 23:29
Ну, я рад, что смог помочь.
Если потребуется помощь, обращайся в этот форум, а вообще, я вижу ты убедился, что кучу готовых скриптов можно найти в интернете smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)