Board logo

标题: 【求助】右键添加“以首行字符重命名此文件” [打印本页]

作者: plp626     时间: 2008-5-11 07:24    标题: 【求助】右键添加“以首行字符重命名此文件”

如题;
由于常在网上copy。粘贴,每次保存时时还要右键重名一下文件,烦了
这类文件都是些文本文件,如
.txt
.htm
.html
1.现在让注册表给右键添加个这个功能,不知键值在哪。。。?
2.对于htm文件会难度较大,因为不是ascii码字符,源文件还有许多<>/\类字符,不知用sed。。。怎么处理?
为方便大家解答,我假定这些文件行首都为合法字符,


(参考5楼hat的代码)答案如下:(可过滤非法字符,可以根据自己需要对代码修改)
假定你的bat1环境变量值为C:\mybat\myrename.bat(自己配)
@echo off
<%0 more +5>C:\mybat\myren.bat
reg add HKEY_CLASSES_ROOT\*\shell\MyRename\command /ve /t REG_SZ /d "cmd.exe /c call %bat1% %%1" /f>nul
exit

@echo off
for %%a in (%1)do call:renm "%%~dpna" %%~xa
:renm
set/p t=<"%~1%2"
set t=%t:.=%
set t=%t:/=%
set t=%t:\=%
set t=%t:?=%
set t=%t::=%
set t=%t:;=%
set t=%t:^*=%
set "t=%t:^<=%"
set "t=%t:^>=%"
set "t=%t:^|=%"
::超多同名文件可以循环重命名,但代码长了
ren "%~1%2" "%t%%2"||ren "%~1%2" "%t%_1%2"||ren "%~1%2" "%t%_2%2"||(echo err&pause)
exit
http://www.cn-dos.net/forum/viewthread.php?tid=40212

感谢!加分!

[ Last edited by plp626 on 2008-5-12 at 10:31 AM ]
作者: slore     时间: 2008-5-11 10:18
http://www.cn-dos.net/forum/viewthread.php?tid=32984
作者: plp626     时间: 2008-5-11 10:28
inf:
[Version]
Signature="$Chicago$"

[DestinationDirs]
DefaultDestDir=12,"web"

[DefaultInstall]
AddReg=SearchText_AddReg,ForUnInstall
CopyFiles=SearchText_CopyFiles

[DefaultUnInstall]
DelReg=SearchText_AddReg,ForUnInstall
DelFiles=SearchText_CopyFiles

[SearchText_CopyFiles]
SaveText.inf
SaveText.html

[SearchText_AddReg]
HKCU,"Software\Microsoft\Internet Explorer\MenuExt\保存内容(&S)",,0x00000000,"%12%\web\SaveText.html"
HKCU,"Software\Microsoft\Internet Explorer\MenuExt\保存内容(&S)","contexts",0x00010001,50

[ForUnInstall]
HKLM,%RegPath%,"DisplayName",,"SaveText By Slore"
HKLM,%RegPath%,"HelpLink",,"bbs.cn-dos.net"
HKLM,%RegPath%,"Publisher",,"Slore"
HKLM,%RegPath%,"UninstallString",0x00000000,"%UnistallStr%%12%\Web\SaveText.inf,DefaultUninstall,5"

[Strings]
RegPath="SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\SaveText"
UnistallStr="RunDll32 advpack.dll,LaunchINFSection "

;;;;;;;--------------------------------------------
;-- Only localize strings below this line
;-- This SearchText Setup Inf Made By SLore
;;;;;;---------------------------------------------
能否讲下代码流程。。。
还有,安装了,不会用,右键没变化。。。
作者: slore     时间: 2008-5-11 10:35
右键,安装……

需要重新启动IE

然后你选段文件右键……看看
作者: HAT     时间: 2008-5-11 10:56
我试着写了一下,成功过一次,可是代码被我改了,又不成功了,关键就是写注册表的那句,实在不记得该怎样写了。哪位能帮我改改?
@echo off
set DstDir=C:\test\test.bat
>"%DstDir%" type nul
>>"%DstDir%" (
  echo @echo off
  echo set /p fname=^<"%%1"
  echo ren "%%1" "%%fname%%%%~x1"
)
reg add HKEY_CLASSES_ROOT\*\shell\MyRename\shell /ve /t REG_SZ /d "cmd.exe /c call \"%DstDir%\" %%1" /f>nul
正确的代码如下:
@echo off
set DstDir=C:\test\test.bat
>"%DstDir%" type nul
>>"%DstDir%" (
  echo @echo off
  echo set /p fname=^<"%%1"
  echo ren "%%1" "%%fname%%%%~x1"
)
reg add HKEY_CLASSES_ROOT\*\shell\MyRename\command /ve /t REG_SZ /d "cmd.exe /c call \"%DstDir%\" %%1" /f>nul
[ Last edited by HAT on 2008-5-11 at 01:20 PM ]
作者: slore     时间: 2008-5-11 11:12
::下面这句省略就是按项名为右键菜单名
reg add HKEY_CLASSES_ROOT\*\shell\MyRename\  /ve /d "右键菜单名" /f
reg add HKEY_CLASSES_ROOT\*\shell\MyRename\command /ve /t REG_SZ /d "cmd.exe /c call \"%DstDir%\" %%1" /f
作者: slore     时间: 2008-5-11 11:16
[381.rar] slore 网页内容右键保存 2008-5-11 更新 修正unicode无法保存错误 1kB 2008/05/11(Sun)11:45 SaveText By Slore.rar

http://upload.cn-dos.net/img/381.rar

刚才测试发现论坛上面的»无法保存……
就改了下……

现在自动识别了。
也就是说:

如果你选的内容有unicode字符则保存文本为unicode,
如果没有就是默认的,一般是ANSI编码。

作者: HAT     时间: 2008-5-11 13:19
汗水,原来是误把command写成了shell,值了一晚上夜班,大脑缺氧啦^_^
多谢 slore 兄
作者: plp626     时间: 2008-5-11 13:58


  Quote:
Originally posted by slore at 2008-5-11 11:16 AM:
[381.rar] slore 网页内容右键保存 2008-5-11 更新 修正unicode无法保存错误 1kB 2008/05/11(Sun)11:45 SaveText By Slore.rar

[url]http://upload.cn-dos.net/ ...

两个代码都是:


作者: slore     时间: 2008-5-11 14:14
XP SP2下测试通过……
作者: slore     时间: 2008-5-11 14:19
Set objDlg = CreateObject("MSComDlg.CommonDialog")

这个调用保存对话框……

如果你不能用这个对象……只能保存到固定路径了……
作者: slore     时间: 2008-5-11 14:23
如果你的不支持,就在把FSO的path改改,把DLG对象去掉
作者: slore     时间: 2008-5-11 14:35
实在想交互点,可以用inputbox
作者: plp626     时间: 2008-5-12 11:45
若首行字符含有%,“一楼的这代码,提示符就会显示找不到文件。。。
大家看看。。。。%真让我头痛。。。
@echo off
<%0 more +5>C:\mybat\myren.bat
reg add HKEY_CLASSES_ROOT\*\shell\MyRename\command /ve /t REG_SZ /d "cmd.exe /c call %bat1% %%1" /f>nul
exit

@echo off
for %%a in (%1)do call:renm "%%~dpna" %%~xa
:renm
set/p t=<"%~1%2"
set t=%t:.=%
set t=%t:/=%
set t=%t:\=%
set t=%t:?=%
set t=%t::=%
set t=%t:;=%
set t=%t:^*=%
set "t=%t:^<=%"
set "t=%t:^>=%"
set "t=%t:^|=%"
::超多同名文件可以循环重命名,但代码长了
ren "%~1%2" "%t%%2"||ren "%~1%2" "%t%_1%2"||ren "%~1%2" "%t%_2%2"||(echo err&pause)
exit

作者: slore     时间: 2008-5-12 13:26
我的从网页上直接保存的你用不了的话。要右键的那个……

FSO读文本一行你会吧?
然后给你说个replace函数……
作者: slore     时间: 2008-5-12 14:01
FileName = WScript.Arguments(0)
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile(FileName,1)
If objFile.AtEndOfStream Then ObjFile.Close:WSH.Quit
StrLine = objFile.ReadLine
ObjFile.Close
NewName = ReplaceEx(StrLine,"\/:*?""<>|")
Set objFile = objFSO.GetFile(FileName)
objFile.Name = NewName & "." & objFSO.GetExtensionName(FileName)
Set objFile = Nothing
Set
objFSO = Nothing

Function
ReplaceEx(RepIn,RepStr)
   
For i = 1 To Len(RepStr)
        
ReplaceEx = Replace(RepIn,Mid(RepStr,i,1),"")
   
Next
End Function


报告下,很牛的=。=
如果第一行为空,VBS居然可以给文件一个空!不是空格哦。
作者: plp626     时间: 2008-5-12 14:18
看不懂,不过看你说的貌视很牛叉,
研究下,
---------------
你16楼这个代码就相当于我那个
C:\mybat\myrename.bat
吗?

[ Last edited by plp626 on 2008-5-12 at 02:20 PM ]
作者: slore     时间: 2008-5-12 17:29
单独脚本,你拖个文件上去就自动改名了……

你把这个设置为右键就可以了