无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 6071|回复: 21
打印 上一主题 下一主题

那位解释下毛桃PE中定义当前路径(%TP%)的代码?

[复制链接]
跳转到指定楼层
1#
发表于 2007-6-22 02:56:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我是个菜鸟。发现这个代码太好用了,想听行家解释下。老毛有空吗?那位大虾有空?

SET Var0=%0
IF '^%Var0:~0,1%'=='^"' SET Var0=%Var0:~1,-1%
FOR /f "delims=" %%I in ("%Var0%") do Set TP=%%~dpI
SET TP=%TP:~0,-1%

只知道是定义环境变量,可是看不懂。“请你说慢些,我非一般的菜”,谢谢了。
2#
发表于 2007-6-22 06:37:14 | 只看该作者
复制以下代码到一新建文件到任一路径,扩展名改成bat。运行后就知道了意思了。
回复

使用道具 举报

3#
发表于 2007-6-22 06:40:11 | 只看该作者
完了贴代码。其实1楼代码中可以删掉第二行。结果一样。
复制以下代码到一新建文件到任一路径,扩展名改成bat。运行后就知道了意思了。

@echo off
SET Var0=%0
echo 1, %var0%
IF '^%Var0:~0,1%'=='^"' SET Var0=%Var0:~1,-1%
echo 2, %var0%
FOR /f "delims=" %%I in ("%Var0%") do Set TP=%%~dpI
SET TP=%TP:~0,-1%
echo 3, %tp%
pause
回复

使用道具 举报

4#
发表于 2007-6-22 06:58:52 | 只看该作者
忘了贴代码。其实1楼代码中可以删掉第二行。结果一样。
复制以下代码到一新建文件到任一路径,扩展名改成bat。运行后就知道了意思了。

@echo off
SET Var0=%0
echo 1, %var0%
IF '^%Var0:~0,1%'=='^"' SET Var0=%Var0:~1,-1%
echo 2, %var0%
FOR /f "delims=" %%I in ("%Var0%") do Set TP=%%~dpI
SET TP=%TP:~0,-1%
echo 3, %tp%
pause
回复

使用道具 举报

5#
 楼主| 发表于 2007-6-22 19:48:11 | 只看该作者
原帖由 lianjiang 于 2007-6-22 06:58 AM 发表
忘了贴代码。其实1楼代码中可以删掉第二行。结果一样。
复制以下代码到一新建文件到任一路径,扩展名改成bat。运行后就知道了意思了。

@echo off
SET Var0=%0
echo 1, %var0%
IF '^%Var0:~0,1%'=='^"' S ...

多谢楼上热心的兄弟。我只知道这个能定义当前路径,就是不懂字符的含义。。。
问得很菜,还是想知道。有没有兄弟不嫌麻烦,逐句解释一下?

[ 本帖最后由 caozhi256 于 2007-6-22 07:49 PM 编辑 ]
回复

使用道具 举报

6#
发表于 2007-6-22 20:17:24 | 只看该作者
原帖由 caozhi256 于 2007-6-22 02:56 AM 发表
我是个菜鸟。发现这个代码太好用了,想听行家解释下。老毛有空吗?那位大虾有空?

SET Var0=%0
IF '^%Var0:~0,1%'=='^"' SET Var0=%Var0:~1,-1%
FOR /f "delims=" %%I in ("%Var0%") do Set TP=%%~dpI
SE ...



SET Var0=%0
%0参数是默认参数,任何一个CMD文件运行时均会有此参数,它返回可能带引号的当前CMD文件名及其路径,例如:“"Z:\1\A.CMD"”。
因此整条语句的意思是新建一个Var0变量,并将当前CMD文件名及其路径保存在Var0变量中。

IF '^%Var0:~0,1%'=='^"' SET Var0=%Var0:~1,-1%
%Var0:~0,1%是获取变量Var0变量从0开始的一个字符号,即"。如果是%Var0:~1,2%则是从1开始的2个字符,即Z:。如果是%Var0:~0,-1%则是"Z:\1\A.CMD,从尾部减去了一个字符。
因此整条语句的意思是去除Var0变量的左右"号。
^号的意思大概与C语言中的指针相同,应该是引用的意思。

FOR /f "delims=" %%I in ("%Var0%") do Set TP=%%~dpI
看不懂,但TP=%%~dpI的意思是从Var0变量中获取路径部分并赋值给TP,其中~dp是关键字。
因此整条语句的意思是获取Var0变量中的路径部分。例如:“"Z:\1\"”


SET TP=%TP:~0,-1%
再将Var0从尾部减去了一个字符,即去除右“\”号。因此最终得到不带右“\”号和双引号的纯路径部分并赋值给TP。例如:“"Z:\1"”

点评

终于找到我想要的答案了,,找了好久的百度...谢谢 大神.  详情 回复 发表于 2018-7-31 20:04
回复

使用道具 举报

7#
发表于 2007-6-23 00:57:36 | 只看该作者
楼上的好强。。。。。。。
回复

使用道具 举报

8#
 楼主| 发表于 2007-6-23 02:07:39 | 只看该作者
原帖由 zjqcomputer 于 2007-6-22 08:17 PM 发表



SET Var0=%0
%0参数是默认参数,任何一个CMD文件运行时均会有此参数,它返回可能带引号的当前CMD文件名及其路径,例如:“"Z:\1\A.CMD"”。
因此整条语句的意思是新建一个Var0变量,并将当前CMD文件名及 ...

老兄不但光盘做的好,技术好,人品更好!
虽然还迷糊着,但比早先多知道一些了。。
我留着,慢慢看。最后多谢你!!
回复

使用道具 举报

9#
发表于 2007-6-23 13:59:53 | 只看该作者
SET TP=%CD%
一条就够了。XP中SET有很多扩展,请输入 SET /? 查看。
回复

使用道具 举报

10#
发表于 2008-4-12 21:18:08 | 只看该作者
我完全看晕了,不懂的说
回复

使用道具 举报

11#
发表于 2008-4-12 21:34:38 | 只看该作者
学习,这样的贴才是最需要的, 其实都有很多疑问, 感谢能答疑的“大虾”们
回复

使用道具 举报

12#
发表于 2008-4-12 21:46:29 | 只看该作者
原帖由 Sense 于 2007-6-23 01:59 PM 发表
SET TP=%CD%
一条就够了。XP中SET有很多扩展,请输入 SET /? 查看。


老兄,不准确啊,在CMD中,%CD%是执行CMD的"起始目录"。

如你在 C:\Windows\System32 目录中执行 D:\Path1\Path2\Test.CMD
%CD%并不是D:\Path1\Path2,也不是 D:\Path1\Path2\Test.CMD,
而是 C:\Windows\System32。

因此,%CD%实用性很有限,只能用在双击CMD的场合下使用,但一般在
正常系统或PE中,通过启动组(RUN)或PECMD的INI启动某个CMD时,"初始"
目录是%SystemRoot%\System32,往往要执行的CMD并不在这个目录下。

双击的CMD可以用 %CD%,但要通用,一定要用 %0
这个问题本人和老毛桃两年前就作过讨论,所以才用 %0

[ 本帖最后由 lxl1638 于 2008-4-12 09:49 PM 编辑 ]
回复

使用道具 举报

13#
发表于 2008-4-13 10:03:31 | 只看该作者
^号的意思大概与C语言中的指针相同,应该是引用的意思。

(^)号应是转义字符,因引号 ("")为特殊字符。

毛桃那四行代码应简化为两行就可以:

  1. SET TP=%~dp0
  2. SET TP=%TP:~0,-1%
复制代码

据微软解释在批处理文件中使用扩展编辑符(%)已经删除任何外围引号 ("")。
回复

使用道具 举报

14#
发表于 2008-4-14 18:03:57 | 只看该作者
完成不懂,~~~~~
回复

使用道具 举报

15#
 楼主| 发表于 2008-8-19 19:28:32 | 只看该作者
原帖由 lxl1638 于 2008-4-12 21:46 发表


老兄,不准确啊,在CMD中,%CD%是执行CMD的"起始目录"。

如你在 C:\Windows\System32 目录中执行 D:\Path1\Path2\Test.CMD
%CD%并不是D:\Path1\Path2,也不是 D:\Path1\Path2\Test.CMD,
而是 C:\Wind ...



翻了下老帖子,感谢热心的老九哇。。。

前阵子恶补了下批处理,勉强搞懂了if  For  Set这几个(for还是记不住,得翻资料),懒人学习苦。。。
回复

使用道具 举报

16#
发表于 2008-8-19 20:53:14 | 只看该作者
还是小小强厚道(lxl1638就不说了)。解释的全面。我最近自己diy一个PE的时候,遇到命令问题,上网查啊查啊,总算又弄懂了一点东西^_^
回复

使用道具 举报

17#
发表于 2008-8-25 20:28:28 | 只看该作者
楼上的这几位高手,真称得上德才兼备!学习了。。。
回复

使用道具 举报

18#
发表于 2008-8-26 21:21:30 | 只看该作者
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
for /f "delims=" %%i in ("%0") do (
set dvr=%%~dpi
set dvr=!dvr:~0,-1!
echo !dvr!
)
pause
回复

使用道具 举报

19#
发表于 2008-8-26 21:27:12 | 只看该作者
  1. %cd%
复制代码
回复

使用道具 举报

20#
发表于 2009-12-17 11:51:15 | 只看该作者
一直搞不懂老毛桃和小小强CMD命令的差别
看看小小强的解说,再结合老九的批处理,基本明白..
谢谢各位...
俺修改的可以直接使用..SET TP=%CD%
回复

使用道具 举报

21#
发表于 2009-12-17 20:49:02 | 只看该作者
学习了!谢谢各位老大

[ 本帖最后由 hht168 于 2009-12-17 20:56 编辑 ]
回复

使用道具 举报

22#
发表于 2018-7-31 20:04:20 | 只看该作者
zjqcomputer 发表于 2007-6-22 20:17
SET Var0=%0
%0参数是默认参数,任何一个CMD文件运行时均会有此参数,它返回可能带引号的当前CMD文 ...

终于找到我想要的答案了,,找了好久的百度...谢谢  大神.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-12-4 21:20

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表