中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-06-25 06:58
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [请教]如何获取绝对路径中文件名的最后一部分?[已解决] 查看 6,632 回复 25
16 发表于 2006-10-21 02:54 ·  中国 湖北 武汉 电信
版主
★★★★★
积分 11,386
发帖 4,938
注册 2006-07-23 17:10
19年会员
UID 59080
状态 离线

  namajm兄在F11中的代码是测试错误的代码还是正确的代码?
 
  我这里测试,没有通过,显示的是"ab",而不是我们想得到的"ab c",不知道咋回事。。
17 发表于 2006-10-21 06:15 ·  中国 广东 佛山 广东睿江科技有限公司
荣誉版主
★★★★
batch fan
积分 5,226
发帖 1,737
注册 2006-03-10 00:38
20年会员
UID 51697
来自 成都
状态 离线
  不好意思,我举的例子是想说明那段代码不能正确获取带空格路径中指定层次的文件夹名,当时没有注释清楚,现在已经注释好了。
尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
18 发表于 2006-10-21 06:17 ·  中国 广东 佛山 广东睿江科技有限公司
荣誉版主
★★★★
batch fan
积分 5,226
发帖 1,737
注册 2006-03-10 00:38
20年会员
UID 51697
来自 成都
状态 离线
  14F的代码确实厉害,用到了比较生僻的shift,颇具技巧性,它可能是最具备通用性的了。
尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
19 发表于 2006-10-21 07:03 ·  中国 湖北 武汉 电信
版主
★★★★★
积分 11,386
发帖 4,938
注册 2006-07-23 17:10
19年会员
UID 59080
状态 离线

  呵呵。。。

  我一直在思考这个问题:

  为什么在11楼的代码不行,而在14楼的代码却可行呢?难道就是这个shift起的作用?也没有明白为什么要循环4次。
20 发表于 2006-10-21 07:35 ·  中国 湖北 荆门 电信
荣誉版主
★★★
积分 2,013
发帖 718
注册 2006-02-18 07:07
20年会员
UID 50550
状态 离线
多看看 <帮助与支持>吧.
不一样的搭配就有不一样的味,这也是脚本存在的原因之一:

@echo off
setlocal ENABLEDELAYEDEXPANSION
set str=c:\ab c\def\gh .exe\
set num=1
for /l %%i in (1,1,%num%) do set "str=!str:*\=!"
echo %str:\= && 2>nul cd %
pause

把最后的cd换成echo就可以逐级显示.
几种方法使用的场合不同,至于孰好孰坏,那就是见仁见智了.
21 发表于 2006-10-21 08:39 ·  中国 广东 佛山 广东睿江科技有限公司
荣誉版主
★★★★
batch fan
积分 5,226
发帖 1,737
注册 2006-03-10 00:38
20年会员
UID 51697
来自 成都
状态 离线
  发现 echo %str:\= && 2>nul cd % 一句中,把cd换成任意的命令都能正确执行,对这一句去掉最后几个\分隔的内容的写法百思不得其解,还请3742668解说一二。

  另外,echo %str:\= && 2>nul cd %在提取其中的文件夹名的时候,最后一位是空格,在提取文件名的时候没有这个问题,换成 echo %str:\=&& 2>nul cd % 就可以了(注意:两条语句&&前一个有空格,一个没有空格)。
尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
22 发表于 2006-10-21 08:43 ·  中国 湖南 娄底 电信
银牌会员
★★★
积分 1,218
发帖 485
注册 2006-07-21 21:24
19年会员
UID 58987
来自 湖南.娄底
状态 离线
Originally posted by 3742668 at 2006-10-21 07:35:
多看看 <帮助与支持>吧.
不一样的搭配就有不一样的味,这也是脚本存在的原因之一:
几种方法使用的场合不同,至于孰好孰坏,那就是见仁见智了.


同意, 解决问题的方法多种多样, 就看你怎么用了.
23 发表于 2006-10-21 09:00 ·  中国 湖北 荆门 电信
荣誉版主
★★★
积分 2,013
发帖 718
注册 2006-02-18 07:07
20年会员
UID 50550
状态 离线
Originally posted by namejm at 2006-10-21 08:39:
  发现 echo %str:\= && 2>nul cd % 一句中,把cd换成任意的命令都能正确执行,对这一句去掉最后几个\分隔的内容的写法百思不得其解,还请37426 ...

记得在那篇讨论加密解密的贴子里就有使用到过类似的方法.
原理很简单,例如:

set "command=set i=3"
echo i的值:%i% & pause
%command%
echo i的值:%i% & pause

参考:非编译型批处理加密方案与代码之11F方案。
另外其实最后一种方法还存在一点小问题,获得最后的文件名时可能显示出一行"ECHO 处于打开状态"之类的提示,为了节省代码量,没对它进行处理.
24 发表于 2006-10-24 03:32 ·  中国 上海 虹口区 电信
初级用户
★★
积分 153
发帖 68
注册 2006-10-12 22:25
19年会员
UID 65507
来自 上海
状态 离线
Originally posted by 3742668 at 2006-10-21 09:00:

记得在那篇讨论加密解密的贴子里就有使用到过类似的方法.
原理很简单,例如:

set "command=set i=3"
echo i的值:%i% & pause
%command%
ech ...



经测试,确实会出现:“ECHO处于打开/关闭状态的提示”,不知道怎么样解决这个问题,经常会碰到这个问题。。。
个人主页-找餐厅:http://www.canting.cc
25 发表于 2006-10-24 06:39 ·  中国 广东 佛山 广东睿江科技有限公司
荣誉版主
★★★★
batch fan
积分 5,226
发帖 1,737
注册 2006-03-10 00:38
20年会员
UID 51697
来自 成都
状态 离线
  请问是在什么情况下出现“ECHO处于打开/关闭状态“的提示的?请把测试的路径发出来看一下。估计把 echo %str:\= && 2>nul cd % 修改成 echo. %str:\=&& 2>nul cd % 就可以了(注意:echo后有一个点号)。
尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
26 发表于 2006-10-24 21:58 ·  中国 湖南 娄底 电信
初级用户
积分 46
发帖 22
注册 2006-10-24 09:03
19年会员
UID 68024
性别 男
状态 离线
好,强!值得学习~!
论坛跳转: