caozhi256 发表于 2007-6-22 02:56:40

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

我是个菜鸟。发现这个代码太好用了,想听行家解释下。老毛有空吗?那位大虾有空?

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%

只知道是定义环境变量,可是看不懂。“请你说慢些,我非一般的菜”,谢谢了。

lianjiang 发表于 2007-6-22 06:37:14

复制以下代码到一新建文件到任一路径,扩展名改成bat。运行后就知道了意思了。

lianjiang 发表于 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

lianjiang 发表于 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

caozhi256 发表于 2007-6-22 19:48:11

原帖由 lianjiang 于 2007-6-22 06:58 AM 发表 http://bbs.wwwfox.net/images/common/back.gif
忘了贴代码。其实1楼代码中可以删掉第二行。结果一样。
复制以下代码到一新建文件到任一路径,扩展名改成bat。运行后就知道了意思了。

@echo off
SET Var0=%0
echo 1, %var0%
IF '^%Var0:~0,1%'=='^"' S ...
多谢楼上热心的兄弟。我只知道这个能定义当前路径,就是不懂字符的含义。。。
问得很菜,还是想知道。有没有兄弟不嫌麻烦,逐句解释一下?

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

zjqcomputer 发表于 2007-6-22 20:17:24

原帖由 caozhi256 于 2007-6-22 02:56 AM 发表 http://bbs.wuyou.net/images/common/back.gif
我是个菜鸟。发现这个代码太好用了,想听行家解释下。老毛有空吗?那位大虾有空?

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

willsion 发表于 2007-6-23 00:57:36

楼上的好强。。。。。。。

caozhi256 发表于 2007-6-23 02:07:39

原帖由 zjqcomputer 于 2007-6-22 08:17 PM 发表 http://bbs.wwwfox.net/images/common/back.gif



SET Var0=%0
%0参数是默认参数,任何一个CMD文件运行时均会有此参数,它返回可能带引号的当前CMD文件名及其路径,例如:“"Z:\1\A.CMD"”。
因此整条语句的意思是新建一个Var0变量,并将当前CMD文件名及 ...
老兄不但光盘做的好,技术好,人品更好!
虽然还迷糊着,但比早先多知道一些了。。
我留着,慢慢看。最后多谢你!!

Sense 发表于 2007-6-23 13:59:53

SET TP=%CD%
一条就够了。XP中SET有很多扩展,请输入 SET /? 查看。

fyw321 发表于 2008-4-12 21:18:08

我完全看晕了,不懂的说

goodtime 发表于 2008-4-12 21:34:38

学习,这样的贴才是最需要的, 其实都有很多疑问, 感谢能答疑的“大虾”们

lxl1638 发表于 2008-4-12 21:46:29

原帖由 Sense 于 2007-6-23 01:59 PM 发表 http://bbs.wuyou.net/images/common/back.gif
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 编辑 ]

Sia 发表于 2008-4-13 10:03:31

^号的意思大概与C语言中的指针相同,应该是引用的意思。
(^)号应是转义字符,因引号 ("")为特殊字符。

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

SET TP=%~dp0
SET TP=%TP:~0,-1%
据微软解释在批处理文件中使用扩展编辑符(%)已经删除任何外围引号 ("")。

情留メ蚊子 发表于 2008-4-14 18:03:57

完成不懂,~~~~~

caozhi256 发表于 2008-8-19 19:28:32

原帖由 lxl1638 于 2008-4-12 21:46 发表 http://bbs.wuyou.net/images/common/back.gif


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

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


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

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

fnycc 发表于 2008-8-19 20:53:14

还是小小强厚道(lxl1638就不说了)。解释的全面。我最近自己diy一个PE的时候,遇到命令问题,上网查啊查啊,总算又弄懂了一点东西^_^

davejion 发表于 2008-8-25 20:28:28

楼上的这几位高手,真称得上德才兼备!学习了。。。

haiou327 发表于 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

haiou327 发表于 2008-8-26 21:27:12

%cd%

wolonglw 发表于 2009-12-17 11:51:15

一直搞不懂老毛桃和小小强CMD命令的差别
看看小小强的解说,再结合老九的批处理,基本明白..
谢谢各位...
俺修改的可以直接使用..SET TP=%CD%

hht168 发表于 2009-12-17 20:49:02

学习了!谢谢各位老大

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

2012zhiwen 发表于 2018-7-31 20:04:20

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

终于找到我想要的答案了,,找了好久的百度...谢谢大神.
页: [1]
查看完整版本: 那位解释下毛桃PE中定义当前路径(%TP%)的代码?