Что нового

[Файловая система] Создание текстовых файлов с уникальными именами.

Black_Hole

Знающий
Сообщения
126
Репутация
11
При создании текстового файла, имя (Новый текстовый документ) заменяется на дату и время аля (2013.12.31_23-59-29)

Код:
$a = "HKEY_CLASSES_ROOT\Local Settings\MuiCache\22\B1A07F78"
$b = "@C:\Windows\system32\notepad.exe,-470"
$c = "REG_SZ"

While 1
	$d = @YEAR & "." & @MON & "." & @MDAY & "_" & @HOUR & "-" & @MIN & "-" & @SEC
	RegWrite($a, $b, $c, $d)
    Sleep(500)
WEnd


Как альтернативными способами можно изменять имя, например ключами реестра если есть такие или еще как, чтобы скрипт не висел все время включенным.
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
что значит "не висел постоянно включенным"?
ведь в коде цикл :smile:
может это нужно?
Код:
_TempFile
 
Автор
B

Black_Hole

Знающий
Сообщения
126
Репутация
11
Уточню немного, есть такая штука как переменная среды %username%, %windir%, %date%, %time%, и что бы узнать ее значение достаточно написать echo %username%, и так есть ли ключи реестра которые возвращают время и дату.
 

AZJIO

Меценат
Меценат
Сообщения
2,879
Репутация
1,194
Надо найти в реестре текущую дату и время? Не верится что какая нибудь системная функция постоянно (каждую секунду) переписывала реестр (кешировала время) без видимых причин.
 

darkwhite

Знающий
Сообщения
129
Репутация
5
время и дату чего ???
если бы вы описали проблему более детально то может мы поняли о чем вы ) и для чего вам это)
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
darkwhite

Т.с хочет что бы при создании нового текстового файла, вместо стандартного имени "Новый текстовый документ" была текущая дата и время.
 

AZJIO

Меценат
Меценат
Сообщения
2,879
Репутация
1,194
inververs
Спасибо, наконец-то поняли что хочет т.с. То есть он хочет в проводнике, при нажатии левой кнопки мыши и выборе в контекстном "Создать -> Текстовый документ" появился .txt-файл, в имени которого дата создания этого файла.

И почему нельзя было написать что реально происходит?
 
Автор
B

Black_Hole

Знающий
Сообщения
126
Репутация
11
AZJIO, inververs, darkwhite

a) В первом посте, в первой строке четко написано что именно делает скрипт.
b) Ниже представлен рабочий вариант скрипта который: заменяет имя для текстового файла хранящийся в реестре по умолчанию "Новый текстовый документ" на дату и время, обновление имени происходит каждые пол секунды чтобы время было актуальным.(значение $a на вашем компьютере может быть иное, через regedit ищем параметр: Новый текстовый документ, и изменяем на ваше.)
c) Под скриптом написан вопрос: есть ли ключ для реестра (мульти-переменная) который возвращает дату и время, чтобы надобность в скрипте отпала.
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
врядли будет постоянная запись в реестр времени..постоянное обращение к файловой системе и прочие нюансы.. это не есть гуд и не нужно
поэтому, встроить свою программу в контекстное меню . она будет создавать документ с нужным именем. и не висеть в цикле :smile:
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
Имя папки по умолчанию при ее создании хранится в стандартной библиотеке Windows под названием shell32.dll, а не в реестре. Чтобы это поведение изменить надо изменить текстовый ресурс самой библиотеки. подробней тут Customize “New Folder” and “New Shortcut” Text in Windows XP Context Menu. Хотя это для XP, не факт что будет работать для осей выше.

Но самый оптимальный вариант, это как отметил joiner, не надо будет менять никакие системные файлы
 

AZJIO

Меценат
Меценат
Сообщения
2,879
Репутация
1,194
Black_Hole [?]
a) В первом посте, в первой строке четко написано что именно делает скрипт.
Я перечитал ваш пост перед тем как отправить свой. Во первых то, что вы себе в уме представляете это отличается от того, что в уме могут представить другие читатели. Вы не пишите как вы собираетесь создавать документ, а сприптом он легко создаётся с помощью FileWrite с посдстановкой времени, которые указаны в вашем посте. А запись чего то там в реестр просто вызывало недоумение. Ну и сами судите несколько человек несколько дней пытаются вас понять.

И кстати у меня в TweakerXP используется другой адрес
Код:
RegWrite("HKCU\Software\Microsoft\Windows\ShellNoRoam\MUICache", "@C:\WINDOWS\system32\notepad.exe,-469", "REG_SZ", GUICtrlRead($crtextfl))


Я в программе SaveFolders на горячую клавишу F10 повесил вызов создания текстового документа. Вам в принципе только инсертировать имя "Ctrl+Insert" и будет то,что вы хотите и даже лучше.
 
Автор
B

Black_Hole

Знающий
Сообщения
126
Репутация
11
соглашусь с joiner, отдельная программа встроенная в контекстное меню, при запуске которой создается файл с нужны нам именем, на данный момент идеальный вариант.

код скрипта, компилируем в *.exe и останется только встроить в контекстное меню.

Код:
FileWrite("./" &@YEAR & "." & @MON & "." & @MDAY & "_" & @HOUR & "-" & @MIN & "-" & @SEC & ".txt","")
 

AZJIO

Меценат
Меценат
Сообщения
2,879
Репутация
1,194
Black_Hole
А идея есть как это сделать? Запись в раздел "HKEY_CLASSES_ROOT\*\shell" для любого типа файла, чтобы получив путь обрезать имя текущего файла, на котором вызвано меню и в папке создать файл - выглядит криво. Идеально - добавить в меню "Создать" пункт, но как это сделать? То что туда добавляется либо путь на шаблон файла, либо ключевое слово на создание пустого файла с заданным именем и расширением. То есть там нет команды на запуск исполняемого файла.

Вот такой скрипт скомпилировал в файл creat.exe
Код:
#include <FileOperations.au3>
If $CmdLine[0] Then
	$aPath = _FO_PathSplit($CmdLine[1])
	If FileExists($aPath[0]) Then FileWrite($aPath[0] & '\' & @YEAR & "." & @MON & "." & @MDAY & "_" & @HOUR & "-" & @MIN & "-" & @SEC & ".txt", "")
Else
	Exit
EndIf


Далее добавил в рееестр данные
Код:
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\.txt\ShellNew]
"Command"="creat.exe \"%1\""

Всё заработало, единственная проблема - обновление проводника происходит с задержкой в несколько секунд, именно поэтому я в своей программе испльзовал автоматизацию конт. меню.

Для восстановления реестра
Код:
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\.txt\ShellNew]
"NullFile"=""

Можно пойти дальше, получить расширение от файла указанного в $CmdLine[1], тогда можно утилиту применять универсально для любого файла.
 

DarWiM

Продвинутый
Сообщения
527
Репутация
90
Код:
RegWrite('HKEY_CLASSES_ROOT\DesktopBackground\shell\my_test_key','','REG_SZ','Test in Menu')
RegWrite('HKEY_CLASSES_ROOT\DesktopBackground\shell\my_test_key\command','','REG_SZ','"C:\myprogram.exe" run "%1"')


вполне таки нормально работает (на рабочем столе)
а как чтоб в любой папке был такой пункт?
 

erlik

Продвинутый
Сообщения
317
Репутация
84
На XP пункты для всех папок добавлялись сюда:
HKEY_CLASSES_ROOT\Folder\shell
HKEY_CLASSES_ROOT\Directory\shell
 
Автор
B

Black_Hole

Знающий
Сообщения
126
Репутация
11
Полезные плюшки: При запуске программа проверяет наличие себя в контекстном меню, если она там есть предлагает себя удалить если ее там нет предлагает добавить(авто-регистрация или удаление при запуске), программа может находится где угодно и при регистрации сливает свое место положение через @ScriptDir в реестр, что бы ее некуда не надо было перемещать.
 

AZJIO

Меценат
Меценат
Сообщения
2,879
Репутация
1,194
DarWiM [?]
вполне таки нормально работает (на рабочем столе)
У меня ничего не появилось (WinXP)

erlik [?]
На XP пункты для всех папок добавлялись сюда:
добавляются пункты для папки, а надо при вызове на пустом поле проводника.

Black_Hole
Эти полезные плюшки давно уже решены в скрипте "Найти объект ярлыка" или в первых версиях ContMenu, сейчас она уже выполнена как инсталятор. Всё потому что не совсем удобно регистрировать программу от папки куда она скачана с интернета.

Для меня главной проблемой является медленное обновление проводника. Может стоит вызвав программу прописать в ней стандартный метод автоматизации конт.меню с подменой имени. Можно конечно вызвать F5, но на WinXP хорошая фича - не сортировать список и файл в конце списка, а после F5 его придётся искать в куче файлов.
 
Автор
B

Black_Hole

Знающий
Сообщения
126
Репутация
11
А еще можно добавить полезняшку в контекстное меню Создать: NewScript.au3
 

AZJIO

Меценат
Меценат
Сообщения
2,879
Репутация
1,194
А еще можно добавить полезняшку в контекстное меню Создать: Picture.psd


Добавлено:
Сообщение автоматически объединено:

Код:
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Outfile=ShellNewFile.exe
#AutoIt3Wrapper_Compression=4
#AutoIt3Wrapper_Res_Comment=-
#AutoIt3Wrapper_Res_Description=ShellNewFile.exe
#AutoIt3Wrapper_Res_Fileversion=0.1.0.0
#AutoIt3Wrapper_Res_FileVersion_AutoIncrement=n
#AutoIt3Wrapper_Res_LegalCopyright=AZJIO
#AutoIt3Wrapper_Res_Language=1049
#AutoIt3Wrapper_Run_Au3check=n
#AutoIt3Wrapper_Res_Field=Version|0.1
#AutoIt3Wrapper_Res_Field=Build|2013.03.20
#AutoIt3Wrapper_Res_Field=Coded by|AZJIO
#AutoIt3Wrapper_Res_Field=Compile date|%longdate% %time%
#AutoIt3Wrapper_Res_Field=AutoIt Version|%AutoItVer%
#AutoIt3Wrapper_Run_Obfuscator=y
#Obfuscator_Parameters=/sf /sv /om /cs=0 /cn=0
#AutoIt3Wrapper_Run_After=del /f /q "%scriptdir%\%scriptfile%_Obfuscated.au3"
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****

#NoTrayIcon
#include <FileOperations.au3>

If $CmdLine[0] Then
	$aPath = _FO_PathSplit($CmdLine[1])
	Switch $aPath[2]
		Case '.au3'
			If FileExists($aPath[0]) Then
				$sPath = _FO_GetCopyName($aPath[0] & 'я.au3', 1)
				FileWrite($sPath, '')
			EndIf
	EndSwitch
Else
	If MsgBox(4, 'Сообщение', 'Хотите активизировать программу?') = 7 Then Exit
	If @Compiled Then
		RegWrite("HKCR\.au3\ShellNew", "Command", "REG_SZ", '"' & @SystemDir & '\ShellNewFile.exe" "%1"')
		If Not FileExists(@SystemDir & '\ShellNewFile.exe') Then FileCopy(@ScriptFullPath, @SystemDir & '\ShellNewFile.exe', 1)
	Else
		RegWrite("HKCR\.au3\ShellNew", "Command", "REG_SZ", @AutoItExe & ' "' & @SystemDir & '\ShellNewFile.au3" "%1"')
		If Not FileExists(@SystemDir & '\ShellNewFile.au3') Then FileCopy(@ScriptFullPath, @SystemDir & '\ShellNewFile.au3', 1)
	EndIf
	; Exit MsgBox(0, 'Сообщение', 'Эта утилита автоматизирует создание файла')
EndIf
 
Автор
B

Black_Hole

Знающий
Сообщения
126
Репутация
11
3da704ac7eb0.jpg
2f1a1be48a82.jpg

Как это сделать

Создаем файл install.reg Пути в коде заменяем на свои.
Код:
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\.0a]
@="Autoit Script"
[HKEY_CLASSES_ROOT\.0a\Shell\Запуск\command]
@="\"C:\\autoit\\install\\AutoIt3.exe\" \"%1\""
[HKEY_CLASSES_ROOT\.0a\Shell\Компиляция AU3 -> EXE]
"Icon"="%SystemDrive%\\autoit\\install\\Icons\\au3script_v9.ico"
[HKEY_CLASSES_ROOT\.0a\Shell\Компиляция AU3 -> EXE\command]
@="\"C:\\compilation.bat\" \"%1\""
[HKEY_CLASSES_ROOT\.au3]
@=".0a"
[HKEY_CLASSES_ROOT\.au3\.0a\ShellNew]
"NullFile"=""
Создаем файл c:\compilation.bat Пути в коде заменяем на свои.
Код:
@echo Компиляция
@echo off
set a="C:\autoit\install\Aut2Exe\Aut2exe.exe"
%a% /in %1 /out %1.exe
 
Верх