|
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 |
|