中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 求助-用P实现 对应文件的移动/在桌面建立快捷方式
作者:
标题: 求助-用P实现 对应文件的移动/在桌面建立快捷方式 上一主题 | 下一主题
schdk
新手上路





积分 11
发帖 5
注册 2008-9-21
状态 离线
『楼 主』:  求助-用P实现 对应文件的移动/在桌面建立快捷方式

请强人帮助,用个P命令来实现以下的功能。学习中。。。谢谢!! 已知wow.exe在磁盘上的某一个分区(有且仅有一个wow.exe) 先查找WOW.exe所在路径 将runwowfile.txt 列表文件中列出所有文件和目录,移动到WOW所在分区的根目录(根目录或自己指定的文件夹例如runwow) 例如:将d:\games\魔兽世界\...对应runwowfile.txt 列出的目录和文件 都移动到 d:\runwow(是新建立的有且仅有) runwowfile.txt <DIR> Cache <DIR> Data <DIR> Logs <DIR> Screenshots BackgroundDownloader.exe dbghelp.dll DivxDecoder.dll ijl15.dll Launcher.exe launcher.ini realmlist.wtf Repair.exe Scan.dll unicows.dll Wow.exe WowError.exe abc.rar压缩包中含有 interface wtf 2个目录 然后将压缩包abc.rar中interface和wtf解压缩到 对应的:\runwow目录里面 最后在桌面生成一个%i:\runwow\Launcher.exe的快捷方式


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





积分 220
发帖 99
注册 2008-6-26
状态 离线
『第 2 楼』:  

@echo off c: cd\ dir /a /s wow.exe errorlevel 0 goto zippo errorlevel 1 echo. d: dir /a /s wow.exe errorlevel 0 goto zippo errorlevel 1 echo. e: dir /a /s wow.exe errorlevel 0 goto zippo errorlevel 1 echo. f: dir /a /s wow.exe errorlevel 0 goto zippo errorlevel 1 echo 查询无效... &exit :zippo for /f "tokens=* delims= " %%i in ('dir /a /s wow.exe^|findstr "wow.exe"') do set pat=%%~pi cd %pat% for /f %%i in (runwowfile.txt) do move /y %%i %pat:~0,1% 压缩包不知道你放在哪个目录.


2008-9-22 03:02
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
schdk
新手上路





积分 11
发帖 5
注册 2008-9-21
状态 离线
『第 3 楼』:  

我是新学P对您的回复很感谢!下面说说自己的疑问。 errorlevel 1 echo. 意思是没有找到文件就返回1 echo.不显示什么对吧 errorlevel 0 goto zippo 凡是找到wow.exe就返回0 并跳转到Zippo段 for /f "tokens=* delims= " %%i in ('dir /a /s wow.exe^|findstr "wow.exe"') do set pat=%%~pi cd %pat% 意思是将wow所在路径设置为pat 然后用 cd %pat%进入wow所在目录 for /f %%i in (runwowfile.txt) do move /y %%i %pat:~0,1% 将 runwowfile.txt 文本列出的文件,移动到 wow所在的根吗? 不知道我的理解对不 这里的意思我虽然懂了,但是要自己写的话就不知道怎么写,不知道一个初学者怎样由走到跑! 看来只有多看代码了。。。 runwowfile.txt和abc.rar压缩包 假定都放在系统当前使用者的桌面或某个磁盘的根部 对于新手的我很多东西需要理解,强人的指点很感谢


2008-9-22 08:46
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
huahua0919
银牌会员




积分 1608
发帖 780
注册 2007-10-7
状态 离线
『第 4 楼』:  

列出你注册表中WOW项目,查看有没有相关PATH项目。


2008-9-22 09:37
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
schdk
新手上路





积分 11
发帖 5
注册 2008-9-21
状态 离线
『第 5 楼』:  

runwowfile.txt内容如下 Cache Data Logs Screenshots BackgroundDownloader.exe dbghelp.dll DivxDecoder.dll ijl15.dll Launcher.exe launcher.ini realmlist.wtf Repair.exe Scan.dll unicows.dll Wow.exe WowError.exe 这里假定 p文件和 runwowfile.txt;abc.rar 都放在d:\(希望放在任意位置都能用) 我借用了别人的一段代码,然后加入2楼 23112656 的这段代码 for /f %%i in (list.txt) do set pat=%%~pi cd %pat% for /f %%i in (d:\runwowfile.txt) do move /y %%i %pat:~0,1% 问题基本得到解决,下面要做的就是把 abc.rar压缩包的内容也放到这MOVE到的这个根;然后创建Launcher.exe的桌面快捷方式 下面是我认为能基本实现 查找/移动文件 的代码 @echo off color 0A :: 把按照盘符顺序查到的第一个指定文件加入到查询路径中去 :: 因为dir命令不能查询本脚本程序所在盘符下的所有文件 :: 所以要用cd\返回到根目录下以实现全盘查询 cd\ for %%i in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do ( dir /a /b /s %%i:wow.exe>list.txt 2>nul && goto :进入wow所在目录 ) echo 不存在该文件 pause :进入wow所在目录 for /f %%i in (list.txt) do set pat=%%~pi cd %pat% rem 根据runwowfile.txt文件列表移动文件和目录 for /f %%i in (d:\runwowfile.txt) do move /y %%i %pat:~0,1% @echo 移动完成! pause


2008-9-22 10:08
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
23112656
中级用户





积分 220
发帖 99
注册 2008-6-26
状态 离线
『第 6 楼』:  

呵呵...现在看一下我的代码错了.自己没测试过哦.


2008-9-22 14:06
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
schdk
新手上路





积分 11
发帖 5
注册 2008-9-21
状态 离线
『第 7 楼』:  

没事,你的代码对我很有帮助! 还有我有个疑问 for /f %%i in (list.txt) do set pat=%%~pi (%%~pi是什么意思,为什么要这样用?) for /f %%i in (d:\runwowfile.txt) do move /y %%i %pat:~0,1%(%pat:~0,1%这段代码的意思希望 23112656能讲解一下 谢谢) [ Last edited by schdk on 2008-9-23 at 12:41 AM ]


2008-9-22 19:36
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
23112656
中级用户





积分 220
发帖 99
注册 2008-6-26
状态 离线
『第 8 楼』:  

~I - 删除任何引号("),扩展 %I %~fI - 将 %I 扩展到一个完全合格的路径名 %~dI - 仅将 %I 扩展到一个驱动器号 %~pI - 仅将 %I 扩展到一个路径 %~nI - 仅将 %I 扩展到一个文件名 %~xI - 仅将 %I 扩展到一个文件扩展名 %~sI - 扩展的路径只含有短名 %~aI - 将 %I 扩展到文件的文件属性 %~tI - 将 %I 扩展到文件的日期/时间 %~zI - 将 %I 扩展到文件的大小 %~$PATH:I - 查找列在路径环境变量的目录,并将 %I 扩展 到找到的第一个完全合格的名称。如果环境变量名 未被定义,或者没有找到文件,此组合键会扩展到 空字符串 %pat:~0,2%这个代码错了.忘记上面给的路径是不包括盘符.所以不能定位到根目录了.除非把上面的%%~pi改为%%~fi才可以. %pat:~0,2%是取变量pat的前2个值.如果上面定义的是完全合格的路径名,那么%pat:~0,2%所显示的就肯定是盘符.也就是你的根目录的盘符


2008-9-22 20:05
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
schdk
新手上路





积分 11
发帖 5
注册 2008-9-21
状态 离线
『第 9 楼』:  

知道了%pat:~0,1% /~0,2%/~0,3%是取变量pat的前1/2/3个值,不错不错 很有意思。谢谢你的讲解!!! 这里例子中我用%pat:~0,1% for /f %%i in (d:\runwowfile.txt) do @echo move /y %%i %pat:~0,1% D:\wow>for /F %i in (d:\runwowfile.txt) do @echo move /y %i \ move /y Cache \ move /y Data \ .... 将文件移动到了正确的位置 下面是我完成的最终过程,只在自己的机器上测试成功 首先我做了一个自解压test.exe里面包括 abc.rar(里面压缩着interface和wtf目录)do it.bat;move.bat;rar.exe;runwowfile.exe 这5个文件。自解压设置的将这些文件都解压到d:\(假定机器至少有个D盘) wow.exe文件在本机d:\wow目录下 test.exe自解压后设置运行d:\do it.bat 使用的过程是将test.exe文件随便下载到机器的任意位置。然后运行test.exe 自动解压运行后启动wow. 下面是do it.bat和move.bat的代码内容。 do it.bat @echo off color 0A call d:\move.bat cd\ for %%i in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do ( dir /a /b /s %%i:wow.exe>runwow.txt 2>nul && goto :runwow ) echo 不存在该文件 pause :runwow :: 自动查找WOW所在目录然后生成启动wow.bat for /f "skip=1 delims=" %%i in ('wmic datafile where "filename='Launcher' and Extension='exe'" get name') do echo start "" "%%i">d:\启动wow.bat call d:\启动wow.bat exit ============================================== move.bat @echo off color 0A cd\ for %%i in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do ( dir /a /b /s %%i:wow.exe>list.txt 2>nul && goto :进入wow所在目录 ) echo 不存在该文件 pause :进入wow所在目录 for /f %%i in (list.txt) do set pat=%%~pi cd %pat% :: 根据runwowfile.txt文件列表移动文件和目录 for /f %%i in (d:\runwowfile.txt) do move /y %%i %pat:~0,1% CD\ D: d:\rar.exe x -o+ abc.rar %pat:~0,1% 至此基本解决:查找某一文件所在位置,然后将几个文件和目录移动到X文件所在盘的根目录,然后将abc.rar解压到这个根目录,最后启动一个文件这样一个目的。 希望进一步完善的地方是 将最后这个执行的文件 用P命令直接在系统桌面上建立一个快捷方式而不是直接运行它。


2008-9-23 00:37
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


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



论坛跳转: