中国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
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: