| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > 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. Можно запрограмировать прогу |
| Автор: quarz 14.1.2006, 19:44 |
| Имхо средствами винды такое сделать не получится. Как сказал Богдан, выход - писать программу которая бы запускалась той же виндой после создания файла и переименовывала бы этот файл...работа на 2 строки)) если нужно - могу помочь |
| Автор: lovermann 15.1.2006, 00:19 | ||
| Я так понял, у человека есть .bat-файл, который создаёт/исправляет лог. Зачем ему запускать какую-то программу, когда можно поправить этот батник так, чтобы он сам называл файл, как надо. Этот же код можно сохранить как отдельный батник и тоже создать задание запускать этот батник сразу после создания файла репорта. Вот тебе часть кода, которая переименовывает файл в соответствии с днём недели:
К сожалению, в моей версии DOS-а переменная %DATE% не хранит день недели, хотя в примерах я видел, что в других версиях она там хранится - её можно вытянуть, поэтому скрипт, который я привёл сделан немного сложно, что никак не влияет на его функциональность или скорость работы Этот же код можно переписать на 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 | ||
| Мой предыдущий код не работает Есть другое решение: .vbs скрипт, который переименовывает файл. На этот раз работает - проверено 100%. rename_file.vbs
И не надо никаких программ |
| Автор: Гость_Сергей 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 |
| Ну, я рад, что смог помочь. Если потребуется помощь, обращайся в этот форум, а вообще, я вижу ты убедился, что кучу готовых скриптов можно найти в интернете |