那位解释下毛桃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%
只知道是定义环境变量,可是看不懂。“请你说慢些,我非一般的菜”,谢谢了。 复制以下代码到一新建文件到任一路径,扩展名改成bat。运行后就知道了意思了。 完了贴代码。其实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 忘了贴代码。其实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 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 编辑 ] 原帖由 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"” 楼上的好强。。。。。。。 原帖由 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文件名及 ...
老兄不但光盘做的好,技术好,人品更好!
虽然还迷糊着,但比早先多知道一些了。。
我留着,慢慢看。最后多谢你!! SET TP=%CD%
一条就够了。XP中SET有很多扩展,请输入 SET /? 查看。 我完全看晕了,不懂的说 学习,这样的贴才是最需要的, 其实都有很多疑问, 感谢能答疑的“大虾”们 原帖由 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 编辑 ] ^号的意思大概与C语言中的指针相同,应该是引用的意思。
(^)号应是转义字符,因引号 ("")为特殊字符。
毛桃那四行代码应简化为两行就可以:
SET TP=%~dp0
SET TP=%TP:~0,-1%
据微软解释在批处理文件中使用扩展编辑符(%)已经删除任何外围引号 ("")。 完成不懂,~~~~~ 原帖由 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还是记不住,得翻资料),懒人学习苦。。。 还是小小强厚道(lxl1638就不说了)。解释的全面。我最近自己diy一个PE的时候,遇到命令问题,上网查啊查啊,总算又弄懂了一点东西^_^ 楼上的这几位高手,真称得上德才兼备!学习了。。。 @echo off
SETLOCAL ENABLEDELAYEDEXPANSION
for /f "delims=" %%i in ("%0") do (
set dvr=%%~dpi
set dvr=!dvr:~0,-1!
echo !dvr!
)
pause %cd% 一直搞不懂老毛桃和小小强CMD命令的差别
看看小小强的解说,再结合老九的批处理,基本明白..
谢谢各位...
俺修改的可以直接使用..SET TP=%CD% 学习了!谢谢各位老大
[ 本帖最后由 hht168 于 2009-12-17 20:56 编辑 ] zjqcomputer 发表于 2007-6-22 20:17
SET Var0=%0
%0参数是默认参数,任何一个CMD文件运行时均会有此参数,它返回可能带引号的当前CMD文 ...
终于找到我想要的答案了,,找了好久的百度...谢谢大神.
页:
[1]