中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-03 10:52
48,038 主题排行 / 350,123 发帖 / 今日 0 篇 / 48,251 会员排行
DOS批处理 & 脚本技术(批处理室) » 如何获取路径最后一个"\"后的字串[完美解决]
可打印版本  2,612 / 25
第16楼 HUNRYBECKY 发表于 2007-02-13 22:35
银牌会员 发帖 442 积分 1,179
Originally posted by HUNRYBECKY at 2007-2-13 04:20:

─────────────────── 版务记录 ────────────────────
执行:namejm
说明:{tid=27658}与本主 ...



谢谢处罚,因为当时比较急,又要放假了,想在放假前做处理,放假后可能很少上网,不是很方便,所以发多个帖子以加快回答的速度.我以后会记住的.
第17楼 HUNRYBECKY 发表于 2007-02-13 22:57
银牌会员 发帖 442 积分 1,179
再问下高手门一个问题:我想在下面的批处理IME.BAT中根据用户的选择IME.SVE来决定删除和备份那些输入法,但是遇到一个问题:
ime\IMJP8_1
system32\imjp81.ime
system32\imjp81k.dll
system32\kbdjpn.dll
system32\msir3jp.dll
system32\msir3jp.lex
ime\IMJP8_1是文件夹,表示日文输入,后面几个是日文输入的几个关联文件,我备份时要同时把该目录和其他几个关联文件一起压缩到一文件夹命名如IMJP8_1中,如何做到?因为这里有三个难点:一是在路径层次不确定的情况下如何以文件夹的最后一个\名称来命名,问题已经由12楼的ZH159兄解决,二是如果区分判断IME.SVE中所列是文件夹还是文件,我使用FINDSTR+扩展名判断,还是有点问题;三是如何根据第二个难点的判断把文件压缩添加到相应的压缩包中?

可能我的描述不是很清楚,表达能力不好,见谅,见下面的代码
批处理IME.BAT的内容


IME.SVE的内容:


[ Last edited by HUNRYBECKY on 2007-2-13 at 11:03 PM ]
第18楼 HUNRYBECKY 发表于 2007-02-13 23:03
银牌会员 发帖 442 积分 1,179
另外问个小问题:
一.如何在发帖子时给文本加颜色之类的以便突出显示,我这里怎么没有这些显示?
二.建议斑竹修改帖子的字数限制为100字符,字数太少,难以表达清楚.
第19楼 zh159 发表于 2007-02-13 23:10
金牌会员 发帖 1,467 积分 3,687
判断是否文件夹(缺点:不能区分包含“.”名称的文件夹):


list.txt
第20楼 HUNRYBECKY 发表于 2007-02-13 23:32
银牌会员 发帖 442 积分 1,179
Originally posted by zh159 at 2007-2-13 23:10:
判断是否文件夹(缺点:不能区分包含“.”名称的文件夹):


我在代码中再加入FOR +FINDSTR来联合根据获取的变量I来判断,但是遗憾的是ECHO %%I ^|FINDSTR在FOR语句中似乎有问题,根本得理想的结果,即使说获取的结果居然%%A居然和%%I是一样的,等于没有一样,但是我单独测试,也就是不用在FOR语句中则是成功的,真有点不不明白了.
第21楼 zh159 发表于 2007-02-13 23:46
金牌会员 发帖 1,467 积分 3,687
要扩展名简单啊:
@echo off
for /f "delims=" %%i in (list.txt) do if not "%%~xi" == "" echo %%~nxi
pause
第22楼 HUNRYBECKY 发表于 2007-02-14 00:32
银牌会员 发帖 442 积分 1,179
Originally posted by zh159 at 2007-2-13 23:46:
要扩展名简单啊:
@echo off
for /f "delims=" %%i in (list.txt) do if not "%%~xi" == "" echo %%~nxi
pause


非常谢谢兄的回答,刚才我一直测试,扩展名的问题已经解决,但是就是我刚才说的第二个问题很难解决,如何保持得到的文件名称以便是文件的时候直接追加到刚才的文件夹中?因为如果不是文件夹的时候变量会覆盖掉原来的变量.

为了便于测试,我上传了整个文件.请运行里面的TEST.BAT测试,谢谢

[ Last edited by HUNRYBECKY on 2007-2-14 at 12:52 AM ]

附件
test.rar (256.19 KiB)
第23楼 HUNRYBECKY 发表于 2007-02-14 02:10
银牌会员 发帖 442 积分 1,179
自己顶一下,今天下午开始放假啦,希望放假前有人给我一个思路,谢谢.
祝大家新年快乐,百事可乐.
第24楼 HUNRYBECKY 发表于 2007-02-14 03:08
银牌会员 发帖 442 积分 1,179
经过不断的构思和调试,终于搞定了,其实很简单,因为变量每次要被替换掉,即使使用SET语句也一样,那么能不能像VB ,VBS设置全局变量一样呢,经过测试把变量写入一个文本中,然后再读入就达到了模仿VB,VBS的全局变量的效果,经过测试,下面代码完全达到了我所要的效果,工夫不费有心人,同时还是非常感谢ZH159,VIKILL等我对的问题回答.
测试:请下载22楼代码,并更换TEST.BAT中的内容为以下内容
第25楼 csx163 发表于 2007-02-14 05:35
初级用户 发帖 45 积分 97
%~nI - 仅将 %I 扩充到一个文件名
%~xI - 仅将 %I 扩充到一个文件扩展名
%~nxI 可以这样用??
第26楼 zh159 发表于 2007-02-14 06:33
金牌会员 发帖 1,467 积分 3,687
for/?
可以组合修饰符来得到多重结果:

%~dpI - 仅将 %I 扩充到一个驱动器号和路径
%~nxI - 仅将 %I 扩充到一个文件名和扩展名
%~fsI - 仅将 %I 扩充到一个带有短名的完整路径名
%~dp$PATH:i - 查找列在路径环境变量的目录,并将 %I 扩充
到找到的第一个驱动器号和路径。
%~ftzaI - 将 %I 扩充到类似输出线路的 DIR


[ Last edited by zh159 on 2007-2-13 at 05:34 PM ]
上一页  1 2
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023