标题: 【求助】右键添加“以首行字符重命名此文件”
[打印本页]
作者: 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
单独脚本,你拖个文件上去就自动改名了……
你把这个设置为右键就可以了