中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-07-05 01:15
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 如何实现用右键菜单调用bat文件完成移动文件的功能 查看 2,914 回复 43
31 发表于 2008-02-07 23:46 ·  中国 吉林 吉林市 联通
中级用户
★★
积分 307
发帖 130
注册 2008-02-01 21:29
18年会员
UID 109981
性别 男
状态 离线
Originally posted by slore at 2008-2-6 12:54 PM:
上面的*我用的是 AllFileSystemObject

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

: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里面先测试注册表里面是否有安装信息,若有则自动卸载,若无则自动安装,结构上应该更加清晰明了一些。
44 发表于 2008-02-09 12:42 ·  中国 吉林 吉林市 联通
中级用户
★★
积分 307
发帖 130
注册 2008-02-01 21:29
18年会员
UID 109981
性别 男
状态 离线
感谢3742668
的大力支持,如果你不帮我写的话,我是写不出来的,总之大功告成!比我预期的效果还要好!!再次感谢3742668!!
论坛跳转: