中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 如何获取路径最后一个"\"后的字串[完美解决]
« [1] [2] »
作者:
标题: 如何获取路径最后一个"\"后的字串[完美解决] 上一主题 | 下一主题
HUNRYBECKY
银牌会员





积分 1179
发帖 442
注册 2006-9-9
状态 离线
『楼 主』:  如何获取路径最后一个"\"后的字串[完美解决]

已解决,见http://www.cn-dos.net/forum/viewthread.php?tid=27658&page=1&sid=FB2nu4#pid174202 贴2楼ZH159兄的回答.

下面是我的代码,请修改
@ECHO OFF
SET PATH=%CD%;%CD%\TOOLS\;%PATH%

FOR /F "EOL=;DELIMS=" %%I in (.\Purge\PurgeS.SVE) DO (
    ECHO 正在压缩备份%windir%\%%I\下的文件,请稍等......
    PING 127.0.0.1 -n %TIMEOUT% >NUL
    RAR.EXE A -EP3 -IDQ ".\BACKUP\%%I" "%windir%\%%I"
)
PAUSE
其中PurgeS.SVE中的内容如下:
;这里可以设置要备份和清理的系统级垃圾文件,必须以文件夹来表示,而且必须以%windir%为根来表示
;如果设置了字体清理,需要设置在FONTS.SVE中设置要保留的字体文件
;输入法清理请单独在IME.SVE中进行设置
;
;
;可备份和清理的文件夹,如果想保留则使用;注释掉要清理的项目;也可以添加其他需要备份和清理的文件夹中的内容如Web\Wallpaper下的墙纸
;字体
FONTS
;帮助
HELP
;帮助支持中心
PCHealth
;驱动缓存
Driver Cache
;DLL缓存
SYSTEM32\dllcache
;系统修复备份
REPAIR
;预存取
prefetch
;搜索助理
srchasst
;微软代理
msagent
;系统激活(只限于VOL版)
;system32\oobe
大家应该看明白了我这段代码的意思,我是使用RAR程序把PurgeS.SVE指定中指定的文件夹下的所有文件压缩备份到当前的BACKUP目录下,但是运行到有子目录的SYSTEM32\dllcache时则出现错误,提示找不到压缩文件要备份的路径,因为我是想不区分有无子目录一切都直接备份到BACKUP目录,而且并以目录的最后一个子目录的名称来确定压缩文件的名称,如SYSTEM32\dllcache备份后压缩文件应该是dllcache.rar 而且必须位于BACKUP目录下

希望大家给我一个解决的思路或代码,要求使用批处理,不使用VBS,运行环境为WINXP,谢谢.

有关RAR命令,我刚才把自己的学习笔记发到http://www.cn-dos.net/forum/viewthread.php?tid=27657&sid=FB2nu4 ,可以参考.


17楼出现新的问题,在线等待高手们的再次回答

[ Last edited by HUNRYBECKY on 2007-2-14 at 03:09 AM ]

2007-2-13 02:45
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 2 楼』:  

dim Str1,Pos
Str1="C:\WINDOWS\IME\CINTLGNT"
Pos=InstrRev(Str1,"\")
msgbox mid(Str1,Pos+1,len(Str1)-Pos)

2007-2-13 02:49
查看资料  发短消息 网志   编辑帖子  回复  引用回复
HUNRYBECKY
银牌会员





积分 1179
发帖 442
注册 2006-9-9
状态 离线
『第 3 楼』:  



  Quote:
Originally posted by slore at 2007-2-13 02:49:
dim Str1,Pos
Str1="C:\WINDOWS\IME\CINTLGNT"
Pos=InstrRev(Str1,"\")
msgbox mid(Str1,Pos+1,len(Str1)-Pos)

谢谢回答,我想使用批处理,不使用VBS

2007-2-13 02:58
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
vkill
金牌会员





积分 4103
发帖 1744
注册 2006-1-20
来自 甘肃.临泽
状态 离线
『第 4 楼』:  

for /f "tokens=*" %? in ('dir  /ad/b c:\') do (echo %?|sed -r "s/.*\\([^\]*)$/\1/")

2007-2-13 03:00
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
redtek
金牌会员





积分 2902
发帖 1147
注册 2006-9-21
状态 离线
『第 5 楼』:  

获取路径最后一个"\"后的字串原理:)

FOR  /?

  Quote:
%~nI        - 仅将 %I 扩展到一个文件名





    Redtek,一个永远在网上流浪的人……

_.,-*~'`^`'~*-,.__.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._
2007-2-13 03:01
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HUNRYBECKY
银牌会员





积分 1179
发帖 442
注册 2006-9-9
状态 离线
『第 6 楼』:  



  Quote:
Originally posted by vkill at 2007-2-13 03:00:
for /f "tokens=*" %? in ('dir  /ad/b c:\') do (echo %?|sed -r "s/.*\\([^\]*)$/\1/")

我不想使用SED这个东西,谢谢VKILL兄弟的回答,有其他方法吗?

2007-2-13 03:09
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HUNRYBECKY
银牌会员





积分 1179
发帖 442
注册 2006-9-9
状态 离线
『第 7 楼』:  



  Quote:
Originally posted by redtek at 2007-2-13 03:01:
获取路径最后一个"\"后的字串原理:)

FOR  /?


谢谢REDTEK兄的回答,但是我如下使用,好象不对,能否修改下.
@ECHO OFF
SET PATH=%CD%;%CD%\TOOLS\;%PATH%

FOR /F "EOL=;DELIMS=" %%I in (.\Purge\PurgeS.SVE) DO (
    ECHO 正在压缩备份%windir%\%%I\下的文件,请稍等......
    PING 127.0.0.1 -n %TIMEOUT% >NUL
    RAR.EXE A -EP3 -IDQ ".\BACKUP\%%I:%~nI" "%windir%\%%I"
)
PAUSE


2007-2-13 03:15
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 8 楼』:  

@echo off
FOR /F "EOL=;DELIMS=" %%I in (PurgeS.SVE) DO (
    ECHO 正在压缩备份%windir%\%%I\下的文件,请稍等......
    PING 127.0.0.1 -n %TIMEOUT% >NUL
for /F "tokens=2 DELIMS=\" %%J IN ("%%I") do echo ".\BACKUP\%%J" "%windir%\%%I"
echo ".\BACKUP\%%I" "%windir%\%%I"
)
PAUSE

2007-2-13 03:28
查看资料  发短消息 网志   编辑帖子  回复  引用回复
HUNRYBECKY
银牌会员





积分 1179
发帖 442
注册 2006-9-9
状态 离线
『第 9 楼』:  



  Quote:
Originally posted by slore at 2007-2-13 03:28:
@echo off
FOR /F "EOL=;DELIMS=" %%I in (PurgeS.SVE) DO (
    ECHO 正在压缩备份%windir%\%%I\下的文件,请稍等......
    PING 127.0.0.1 -n %TIMEOUT% >NUL
for /F "tok ...

再次谢谢兄的回答,不过因为路径的层数不是固定的,所以使用你的这个方法还是不行,你这个DELIMES=2只有2层,如果是3层,4层呢?

再说明下我获取以\的目录的最后的名称的原因在于我便于使用RAR命令重新恢复,如我备份了所有项目,那么可以让用户选择要恢复的内容,如日文输入法,韩文输入法,MS拼音输入法等,如果整体直接压缩到一个或某个包内,恢复时使用RAR命令是很不方便的

[ Last edited by HUNRYBECKY on 2007-2-13 at 03:53 AM ]

2007-2-13 03:50
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HUNRYBECKY
银牌会员





积分 1179
发帖 442
注册 2006-9-9
状态 离线
『第 10 楼』:  

依然在线等待..................期待高手们的回答.

2007-2-13 04:03
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HUNRYBECKY
银牌会员





积分 1179
发帖 442
注册 2006-9-9
状态 离线
『第 11 楼』:  [在线求助]如何处理这样的路径字符串[已结]


─────────────────── 版务记录 ────────────────────
执行:namejm
说明:{tid=27658}与本主题存在上下文关系,合并到本主题下。
处罚:因该用户在论坛里并非新人,理应对本论坛的发帖规定有所了解,故扣除
  该用户发帖所得的4点积分。
─────────────────── 版务记录 ────────────────────


C:\WINDOWS\system32
C:\WINDOWS\SHELLNEW
C:\WINDOWS\system32\dhcp
C:\WINDOWS\system32\dllcache
C:\WINDOWS\Help\Tours\mmTour
C:\WINDOWS\Help\Tours\WindowsMediaPlayer
C:\WINDOWS\ime\CHSIME
C:\WINDOWS\ime\SHARED


上面这些路径中,我只想获取路径中最后一个\的内容,如得到的结果如下
system32
SHELLNEW
dhcp
dllcache
mmTour
WindowsMediaPlayer
CHSIME
SHARED

请求高手们给点意见,要求不使用第三方工具,不使用VBS脚本

[ Last edited by namejm on 2007-2-12 at 04:46 PM ]

   此帖被 -4 点积分     点击查看详情   
评分人:【 namejm 分数: -4  时间:2007-2-13 05:46


2007-2-13 04:20
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
zh159
金牌会员




积分 3687
发帖 1467
注册 2005-8-8
状态 离线
『第 12 楼』:  

list.txt
C:\WINDOWS\system32
C:\WINDOWS\SHELLNEW
C:\WINDOWS\system32\dhcp
C:\WINDOWS\system32\dllcache
C:\WINDOWS\Help\Tours\mmTour
C:\WINDOWS\Help\Tours\WindowsMediaPlayer
C:\WINDOWS\ime\CHSIME
C:\WINDOWS\ime\SHARED

@echo off
for /f "delims=" %%i in (list.txt) do echo %%~ni
pause


2007-2-13 04:42
查看资料  发短消息 网志   编辑帖子  回复  引用回复
HUNRYBECKY
银牌会员





积分 1179
发帖 442
注册 2006-9-9
状态 离线
『第 13 楼』:  

非常感谢zh159兄对我的问题多次回答,得向你好好学习.
刚才redtek兄也回答了我这个问题,本人因为对FOR语句实在用的不熟悉,所以还是没有明白redtek兄的意思,我居然当作SET的变量来处理,搞成%%I:%~nI,所以怎么搞都不出来.

再次非常感谢兄的回答.

2007-2-13 05:08
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 14 楼』:  

同时感谢~
对bat里的for还差好多呀..

2007-2-13 05:16
查看资料  发短消息 网志   编辑帖子  回复  引用回复
vkill
金牌会员





积分 4103
发帖 1744
注册 2006-1-20
来自 甘肃.临泽
状态 离线
『第 15 楼』:  

哎,竟然忘记了用%~ni

2007-2-13 06:03
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: