中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-07 13:38
48,040 主题排行 / 350,125 发帖 / 今日 0 篇 / 48,252 会员排行
DOS批处理 & 脚本技术(批处理室) » 如何实现用右键菜单调用bat文件完成移动文件的功能
可打印版本  3,075 / 43
第31楼 pinghu 发表于 2008-02-07 23:46
中级用户 发帖 130 积分 307
Originally posted by slore at 2008-2-6 12:54 PM:
上面的*我用的是 AllFileSystemObject

17楼说的正确,如果用*表示应用到文件,要想应用到文件夹要用或者folder,却不能同时用directory和folder。用AllFileSystemObject可以应用到文件和文件夹
注册表真是挑剔啊,既要保证功能全面又要保证键值的功能没有冗余和重叠!
call :sub1 “%%~dpnxi”这行中的“%%~dpnxi”是格式上是什么参数,起什么作用??
第32楼 pinghu 发表于 2008-02-07 23:51
中级用户 发帖 130 积分 307
楼上说的日志功能我也完全不会弄,我太菜了,
我写出来的东西还有许多语法上的错误,对批处理的语法也不熟悉
比如在for 语句的作用范围内跳转标签能否被识别?
第33楼 pinghu 发表于 2008-02-08 00:00
中级用户 发帖 130 积分 307
为什么直接选中文件夹能实现上移,选中文件夹就不能实现呢,同样是盗用sub1啊,头疼
第34楼 pinghu 发表于 2008-02-08 11:36
中级用户 发帖 130 积分 307
我用了楼上说的’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
第35楼 3742668 发表于 2008-02-08 12:16
荣誉版主 发帖 718 积分 2,013
Very Good!
不过,只是dir /b是无法拷贝隐藏文件的,另外卸载部分何不放在setup里面呢?在里面判断是否有相关的注册表项目,然后决定是安装还是卸载。
最重要的一点是在这个帖子里你收获到了多少?能否完全不看参考,仅凭思路来写有自己风格的代码?
例如你在前面12F提到过的问题究竟产生的原因是什么?注册表中的值的内容和批处理之间有什么联系?为什么有的地方要加引号,有的不用?
你可以自己尝试解决这些问题,如果有什么不明白的可以跟贴寻求提示。
第36楼 pinghu 发表于 2008-02-08 13:34
中级用户 发帖 130 积分 307
@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是如何在注册表和批处理中传递的
第37楼 pinghu 发表于 2008-02-08 13:41
中级用户 发帖 130 积分 307
加了dir /a /b 还是不能移动隐藏文件
第38楼 pinghu 发表于 2008-02-08 13:50
中级用户 发帖 130 积分 307
if "%dd%"=="a" goto setup
if "%dd%"=="A" goto setup两句能否写成一句呢
第39楼 slore 发表于 2008-02-08 15:59
铂金会员 发帖 2,478 积分 5,212
多看 /?
第40楼 pinghu 发表于 2008-02-08 17:17
中级用户 发帖 130 积分 307
想通了一个问题
在运行批处理文件时可以加参数
在call 标签调用子程序时同样可以加参数
第41楼 pinghu 发表于 2008-02-08 17:23
中级用户 发帖 130 积分 307
新手学习的一个重要问题
看来 /? 以后 对应用命令的格式不熟悉
比如
if "%dd%"=="a" goto setup
if "%dd%"=="A" goto setup两句能否写成一句呢
这个问题
我使用if "%dd%"=="a" ^| "%dd%"=="A" goto setup
语法不对啊
第42楼 pinghu 发表于 2008-02-08 18:00
中级用户 发帖 130 积分 307
到底有没有不带赋值功能的逻辑运算符?楼上的问题可以用/i 参数解决
能不能用一个语句判断dd的值等于a b c其中之一就满足条件的
第43楼 3742668 发表于 2008-02-08 18:22
荣誉版主 发帖 718 积分 2,013

为什么还要交互呢?
在setup里面先测试注册表里面是否有安装信息,若有则自动卸载,若无则自动安装,结构上应该更加清晰明了一些。
第44楼 pinghu 发表于 2008-02-09 12:42
中级用户 发帖 130 积分 307
感谢3742668
的大力支持,如果你不帮我写的话,我是写不出来的,总之大功告成!比我预期的效果还要好!!再次感谢3742668!!
上一页  1 2 3
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023