![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-07 13:37 |
共 48,040 主题排行 / 350,125 发帖 / 今日 0 篇 / 48,252 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » 如何实现用右键菜单调用bat文件完成移动文件的功能 |
| 可打印版本 3,074 / 43 |
| 第16楼 3742668 | 发表于 2008-02-06 12:44 |
| 荣誉版主 发帖 718 积分 2,013 | |
Originally posted by pinghu at 2008-2-5 21:48: 上面只是个演示脚本,双击后就可自动安装了。 注意setup部分只在文件上面添加"移动至父目录"功能,并未对文件夹做处理,这个可以自己添加. 另外,上面的脚本也没有对同时选中多个文件的同步问题进行处理,可能导致会出现同名覆盖的问题,对于这种情况,可以适当地利用临时文件设置一下标识,使每个实例运行的时候能根据情况决定是否拷贝。例如可以向某个文件中写入当前处理的文件名,记得用覆盖模式,然后延时一段时间,接着读取标志文件,文件名对应得到的就执行移动工作,移动完后更改标志文件,对不上的则继续等待.继续查询标志文件。... 用纯粹的bat来完成真的是没多大意义,如果可能,我建议你还是尝试一下vbs,会简单得多。 另外给你几个链接可能有用: SendTo+批处理实用小工具--加强版发送到 查找电脑中,所有的bat文件,并复制到当前目录? 批处理如何添加右键菜单? SendTo+(VBS版) |
|
| 第17楼 slore | 发表于 2008-02-06 12:54 |
| 铂金会员 发帖 2,478 积分 5,212 | |
|
上面的*我用的是 AllFileSystemObject
|
|
| 第18楼 pinghu | 发表于 2008-02-06 15:06 |
| 中级用户 发帖 130 积分 307 | |
|
问题得到初步解决,可以松一口气了!
感谢3742668的支持,我从中学习了sub1和reg add 和设置str变量的用法 ありがとございます!! |
|
| 第19楼 pinghu | 发表于 2008-02-06 18:10 |
| 中级用户 发帖 130 积分 307 | |
|
3742668的脚本运行时有个问题
假设我选的文件名为1.txt,往上移动,上级目录出现了一个1.txt文件 我重建1.txt文件,再往上移动,上级目录出现了1_New.txt文件 我再次新建1.txt文件,再往上移动,失败!! |
|
| 第20楼 pinghu | 发表于 2008-02-06 18:24 |
| 中级用户 发帖 130 积分 307 | |
|
确切的说是进入死循环了
|
|
| 第21楼 pinghu | 发表于 2008-02-06 18:42 |
| 中级用户 发帖 130 积分 307 | |
|
我把代码改进了一下,解决了死循环
@echo off call :%* 2>nul || goto setup goto :eof :Sub1 rem 移动到父目录 set "str=%~nx1" set /a counter=1 :loop if not exist "..\%str%" goto Next set "str=%~n1_New%counter%%~x1" set /a counter+=1 goto loop :Next set /a counter= move "%~nx1" "..\%str%" goto :eof :Sub2 rem 脱壳 rem 自己完成 goto :eof :setup reg add "hkcr\*\shell\移至父目录\command" /f /t reg_sz /v "" /d "\"%~0\" Sub1 \"%%1\"" reg add "hkcr\Folder\shell\脱壳\command" /f /t reg_sz /v "" /d "\"%~0\" Sub2 \"%%1\"" goto :eof 可遇到文件夹怎么办呢? |
|
| 第22楼 vkill | 发表于 2008-02-06 21:15 |
| 金牌会员 发帖 1,744 积分 4,103 来自 甘肃.临泽 | |
|
加右键也只是单文件可以用
|
|
| 第23楼 pinghu | 发表于 2008-02-06 21:54 |
| 中级用户 发帖 130 积分 307 | |
|
大侠帮忙看看,sub2部分哪里语法不对 @echo off
call :%* 2>nul || goto setup goto :eof :Sub1 rem 移动到父目录 set "str=%~nx1" set /a counter=1 :loop if not exist "..\%str%" goto Next set "str=%~n1_New%counter%%~x1" set /a counter+=1 goto loop :Next set /a counter= move "%~nx1" "..\%str%" goto :eof :Sub2 rem 脱壳 setlocal enabledelayedexpansion set /a counter=1 cd /d "%1" for /f "delims=" %%i in (*.*) do ( if not exist "..\%%~nxi" goto Next :loop set "str=%%~ni_New!counter!%%~xi" set /a counter+=1 if not exist "..\!str!" goto Next goto loop :Next if "!counter!" equ "1" (move "%%i" "..\%%~nxi") else move "%%i" "..\!str!" set /a counter=1) set counter= goto :eof :setup reg add "hkcr\*\shell\移至父目录\command" /f /t reg_sz /v "" /d "\"%~0\" Sub1 \"%%1\"" reg add "hkcr\directory\shell\移至父目录\command" /f /t reg_sz /v "" /d "\"%~0\" Sub1 \"%%1\"" reg add "hkcr\directory\shell\脱壳\command" /f /t reg_sz /v "" /d "\"%~0\" Sub2 \"%%1\"" goto :eof 经测试,sub1的功能可以支持到所有选定的文件和文件夹,并保证重命名的可靠性,只是sub2还有不对的地方,望大家帮忙 到底错在哪里呢,我写这个sub2头都大了,望大家挑错 |
|
| 第24楼 pinghu | 发表于 2008-02-07 02:16 |
| 中级用户 发帖 130 积分 307 | |
|
发现标签重名,改正后sub2仍然不能使用,通知我不知道用什么方式打开,郁闷了
|
|
| 第25楼 3742668 | 发表于 2008-02-07 02:33 |
| 荣誉版主 发帖 718 积分 2,013 | |
|
既然有sub1了,何必还要重写那么多代码呢?
还是建议用vbs或者其他更严谨的脚本来实现。 [ Last edited by 3742668 on 2008-2-7 at 01:26 PM ] |
|
| 第26楼 pinghu | 发表于 2008-02-07 12:28 |
| 中级用户 发帖 130 积分 307 | |
|
vbs 我不会,直会用批处理,楼上的脚本经测试,两个功能都不行啊,怎么回事
到底我写的Sub2错哪了 |
|
| 第27楼 3742668 | 发表于 2008-02-07 13:07 |
| 荣誉版主 发帖 718 积分 2,013 | |
|
Sorry,由于没有测试环境,所以25楼的代码中有不少错误,包括逻辑上的错误以及语法上的错误。
呵呵,太久没写过了,手都生了。试试下面这个: 建议一次性大批量选定操作目标测试一下,看看是否会存在同步方面的问题。另外可以在move后面加上写入日志的功能。 |
|
| 第28楼 pinghu | 发表于 2008-02-07 17:13 |
| 中级用户 发帖 130 积分 307 | |
|
反复试验了几次发现“移动到父目录”功能能支持到所有文件和文件夹
“脱壳”功能只能应用到所选文件夹里的文件,无法应用到所选文件夹里的文件夹 |
|
| 第29楼 pinghu | 发表于 2008-02-07 18:32 |
| 中级用户 发帖 130 积分 307 | |
|
上述代码加上
reg add "hkcr\Folder\shell\移至父目录\command" /f /t reg_sz /v "" /d "\"%~0\" Sub2 \"%%1\"" 方能移动目录 |
|
| 第30楼 3742668 | 发表于 2008-02-07 19:00 |
| 荣誉版主 发帖 718 积分 2,013 | |
Originally posted by pinghu at 2008-2-7 17:13: 我只负责给你提示和框架,具体首尾还是根据你自己的想法自己写吧。例如如上面提到过的,建议你加上日志功能,多试试特大数量的操作等等。 另外,如果想是脱壳功能应用到文件夹,可以自己尝试用dir /b来解决。 建议你自己从头到尾按照自己的想法重新自己写一遍,那样才能有收获,这也就是论坛的意义所在了。 |
|
| 上一页 1 2 3 下一页 |
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |