中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 如何实现用右键菜单调用bat文件完成移动文件的功能
« [1] [2] [3] »
作者:
标题: 如何实现用右键菜单调用bat文件完成移动文件的功能 上一主题 | 下一主题
pinghu
中级用户





积分 307
发帖 130
注册 2008-2-1
状态 离线
『第 31 楼』:  



  Quote:
Originally posted by slore at 2008-2-6 12:54 PM:
上面的*我用的是 AllFileSystemObject

17楼说的正确,如果用*表示应用到文件,要想应用到文件夹要用或者folder,却不能同时用directory和folder。用AllFileSystemObject可以应用到文件和文件夹
注册表真是挑剔啊,既要保证功能全面又要保证键值的功能没有冗余和重叠!
call :sub1 “%%~dpnxi”这行中的“%%~dpnxi”是格式上是什么参数,起什么作用??

2008-2-7 23:46
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
pinghu
中级用户





积分 307
发帖 130
注册 2008-2-1
状态 离线
『第 32 楼』:  

楼上说的日志功能我也完全不会弄,我太菜了,
我写出来的东西还有许多语法上的错误,对批处理的语法也不熟悉
比如在for 语句的作用范围内跳转标签能否被识别?

2008-2-7 23:51
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
pinghu
中级用户





积分 307
发帖 130
注册 2008-2-1
状态 离线
『第 33 楼』:  

为什么直接选中文件夹能实现上移,选中文件夹就不能实现呢,同样是盗用sub1啊,头疼

2008-2-8 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
pinghu
中级用户





积分 307
发帖 130
注册 2008-2-1
状态 离线
『第 34 楼』:  

我用了楼上说的’dir /b ' 结果成功了,能脱壳文件和文件夹,大功告成,学到不少东西,再把完整的批处理贴一次,以供大家使用

安装程序
@echo off

    call :%* 2>nul || goto setup
goto :eof

:Sub1
rem 移动到父目录   
        if not defined str set "str=%~nx1"
        if not exist "..\%~nx1" (move "%str%" "..\%~nx1" && set "str=" && goto :eof)
        call :Sub1 "%~n1_New%~x1"
goto :eof

:Sub2
rem 脱壳
    cd "%~1"
    for /f "delims=" %%i in ('dir /b') do call :Sub1 "%%~dpnxi"

goto :eof



:setup
    reg add "hkcr\AllFilesystemObjects\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

卸载程序
reg delete "hkcr\directory\shell\脱壳" /f
reg delete "hkcr\AllFilesystemObjects\shell\移至父目录" /f

2008-2-8 11:36
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
3742668
荣誉版主





积分 2013
发帖 718
注册 2006-2-18
状态 离线
『第 35 楼』:  

Very Good!
不过,只是dir /b是无法拷贝隐藏文件的,另外卸载部分何不放在setup里面呢?在里面判断是否有相关的注册表项目,然后决定是安装还是卸载。
最重要的一点是在这个帖子里你收获到了多少?能否完全不看参考,仅凭思路来写有自己风格的代码?
例如你在前面12F提到过的问题究竟产生的原因是什么?注册表中的值的内容和批处理之间有什么联系?为什么有的地方要加引号,有的不用?
你可以自己尝试解决这些问题,如果有什么不明白的可以跟贴寻求提示。

2008-2-8 12:16
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
pinghu
中级用户





积分 307
发帖 130
注册 2008-2-1
状态 离线
『第 36 楼』:  

@echo off
    call :%* 2>nul || goto choice
goto :eof

:Sub1
rem 移动到父目录   
        if not defined str set "str=%~nx1"
        if not exist "..\%~nx1" (move "%str%" "..\%~nx1" && set "str=" && goto :eof)
        call :Sub1 "%~n1_New%~x1"
goto :eof

:Sub2
rem 脱壳
    pushd "%~1"
    for /f "delims=" %%i in ('dir /a /b') do call :Sub1 "%%~dpnxi"
    popd
    rd "%~1"
goto :eof

:choice
set /p dd=安装A,卸载X,退出T:
if "%dd%"=="a"  goto setup
if "%dd%"=="A"  goto setup
if "%dd%"=="x"  goto unistall
if "%dd%"=="X"  goto unistall
if "%dd%"=="t"  goto :eof
if "%dd%"=="T"  (goto :eof) else echo 重新输入 &goto choice
goto :eof

:setup
    reg add "hkcr\AllFilesystemObjects\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

:unistall
    reg delete "hkcr\directory\shell\脱壳" /f
    reg delete "hkcr\AllFilesystemObjects\shell\移至父目录" /f
goto :eof

这回把卸载也加进去了,还在dir 中加入了/a参数

我到现在也不知道本文中call 的用法,还有%1是如何在注册表和批处理中传递的

2008-2-8 13:34
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
pinghu
中级用户





积分 307
发帖 130
注册 2008-2-1
状态 离线
『第 37 楼』:  

加了dir /a /b 还是不能移动隐藏文件

2008-2-8 13:41
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
pinghu
中级用户





积分 307
发帖 130
注册 2008-2-1
状态 离线
『第 38 楼』:  

if "%dd%"=="a"  goto setup
if "%dd%"=="A"  goto setup两句能否写成一句呢

2008-2-8 13:50
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 39 楼』:  

多看 /?

2008-2-8 15:59
查看资料  发短消息 网志   编辑帖子  回复  引用回复
pinghu
中级用户





积分 307
发帖 130
注册 2008-2-1
状态 离线
『第 40 楼』:  

想通了一个问题
在运行批处理文件时可以加参数
在call 标签调用子程序时同样可以加参数

2008-2-8 17:17
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
pinghu
中级用户





积分 307
发帖 130
注册 2008-2-1
状态 离线
『第 41 楼』:  

新手学习的一个重要问题
看来 /? 以后 对应用命令的格式不熟悉
比如
if "%dd%"=="a"  goto setup
if "%dd%"=="A"  goto setup两句能否写成一句呢
这个问题
我使用if "%dd%"=="a" ^| "%dd%"=="A"  goto setup
语法不对啊

2008-2-8 17:23
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
pinghu
中级用户





积分 307
发帖 130
注册 2008-2-1
状态 离线
『第 42 楼』:  

到底有没有不带赋值功能的逻辑运算符?楼上的问题可以用/i 参数解决
能不能用一个语句判断dd的值等于a b c其中之一就满足条件的

2008-2-8 18:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
3742668
荣誉版主





积分 2013
发帖 718
注册 2006-2-18
状态 离线
『第 43 楼』:  


:choice
    set /p dd=安装A,卸载X,退出T:
    call :%dd% || (echo error! && goto choice)
goto :eof

:a
:A
    reg .....
goto :eof

:x
:X
    reg .....
goto :eof
为什么还要交互呢?
在setup里面先测试注册表里面是否有安装信息,若有则自动卸载,若无则自动安装,结构上应该更加清晰明了一些。

2008-2-8 18:22
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
pinghu
中级用户





积分 307
发帖 130
注册 2008-2-1
状态 离线
『第 44 楼』:  

感谢3742668
的大力支持,如果你不帮我写的话,我是写不出来的,总之大功告成!比我预期的效果还要好!!再次感谢3742668!!

2008-2-9 12:42
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] [3] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: