无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 5174|回复: 16
打印 上一主题 下一主题

[已解决] ,.................

[复制链接]
跳转到指定楼层
1#
发表于 2012-5-21 19:52:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
2#
发表于 2012-5-21 21:12:02 | 只看该作者
如果前面字符数固定的话,貌似可以这样?
@echo off
set kk=1:2\aaa\bbb\ccc\aaa.gho
strings a=left %kk%,16
echo %a%
pause

评分

参与人数 1无忧币 +10 收起 理由
527104427 + 10 给力!!

查看全部评分

回复

使用道具 举报

3#
 楼主| 发表于 2012-5-22 08:17:34 | 只看该作者

回复 #2 pznpt 的帖子

不是固定的,我想实现的是,这个KK的值由用户输入,输入后,批处理自动截取GHO文件前面的路径

在我DIY的MAXDOS9里面,备份还原是创建一个畸形目录来存放GHO文件,
路径可以由用户自由输入
这个畸形目录是由omnifs来创建,如果用户修改了路径,就导致一个隐患:omniifs创建的目录和
Ghost备份还原的目录不一致,这样就失败了
回复

使用道具 举报

4#
 楼主| 发表于 2012-5-22 10:01:37 | 只看该作者

回复 #2 pznpt 的帖子

貌似用sed能解决问题,刚才在批处理之家掏到一段代码:
set kk=1:2\aaa\bbb\ccc\aaa.gho
echo %kk% | sed "s/.*\\//"

截取到的是aaa.gho,不知道怎么截取前面的?


这个问题似乎用awk也能解决,本人小菜,只会改现成的,要自已写出来,还是个难题
回复

使用道具 举报

5#
发表于 2012-5-22 10:11:53 | 只看该作者
楼主听说过正则表达式吧!
回复

使用道具 举报

6#
 楼主| 发表于 2012-5-22 10:22:09 | 只看该作者

回复 #5 my9823 的帖子

没有,请指教!!谢谢
回复

使用道具 举报

7#
发表于 2012-5-22 10:27:57 | 只看该作者
只能看懂一点,将路径替换为空:
.代表单个字符,字母数字之类;
*代表前边的元素出现个数(0或者n个),尽可能多的匹配;
\\转义斜杠,这个就限制它匹配到最后一个\,不至于匹配后边的文件名,
回复

使用道具 举报

8#
 楼主| 发表于 2012-5-22 10:35:26 | 只看该作者

回复 #7 my9823 的帖子

那么可不可以反过来呢?把文件名替换为空,保留路径?
回复

使用道具 举报

9#
发表于 2012-5-22 10:38:05 | 只看该作者
有个()和\1可以临时保存匹配对象,例如路径,替换后边为空将可惜偶也懂点皮毛,帮不上啊!
回复

使用道具 举报

10#
 楼主| 发表于 2012-5-22 11:03:02 | 只看该作者

回复 #9 my9823 的帖子

没事,再研究研究吧!!!!!!!!
回复

使用道具 举报

11#
发表于 2012-5-22 11:04:44 | 只看该作者

回复 #4 527104427 的帖子

bathome我也有回复,呵呵。。。
@echo off
set str=
set kk=1:2\aaa\bbb\ccc\abc.gho
:11
strings a=find %kk%,\
if "%a%"=="0" goto 12
strings b=mid %kk%,1,%a%
strings c=add %a%,1
strings kk=mid %kk%,%c%
set str=%str%%b%
goto 11
:12
echo %str%

评分

参与人数 1无忧币 +10 收起 理由
527104427 + 10 兄弟很给力!!

查看全部评分

回复

使用道具 举报

12#
 楼主| 发表于 2012-5-22 11:07:54 | 只看该作者

回复 #11 pznpt 的帖子

兄弟强!!马上试试看
回复

使用道具 举报

13#
 楼主| 发表于 2012-5-22 11:14:12 | 只看该作者

回复 #11 pznpt 的帖子

哈哈,OK了,连带空格的情况都给处理了,感谢感谢!!!!
回复

使用道具 举报

14#
发表于 2012-5-23 09:54:29 | 只看该作者
这个 不用循环 也可以搞定的,strings 本身就有 获取文件目录 的函数,只是这个函数不支持 1:2 这样的分区盘符表示方法,我们变通一下就可以了。
看下面:

@echo off
set p0=1:2\dasfds\fdsaf\dsaf\sda\fdsaf\asdf\abc.gho
strings n=findc %p0%,\
strings p1=left %p0%,%n%
strings p2=mid  %p0%,%n%
strings p=filedir a:%p2%
strings p=mid %p%,2
set px=%p1%%p%
echo %px%

1、获取 第一个“\” 在字符串的位置
2、分别 截取 第一个 "\" 左右两侧 内容为 p1 p2 两个变量
3、通过 filedir 函数 获取 字符串  a:%p2% 的路径  给变量 p
4、去除 p 变量 第一个字符 "\" ,并与 p1 结合 就 生成了变量 px ,px 就是 所求。

[ 本帖最后由 dos时代菜鸟 于 2012-5-23 10:00 编辑 ]
回复

使用道具 举报

15#
发表于 2012-5-23 10:45:07 | 只看该作者

回复 #14 dos时代菜鸟 的帖子

还是 dos时代菜鸟 大大强啊!
刚开始我也试过filedir和filedrive,只是用的e:\aaa\bbb\ccc\abc.gho形式。由于虚拟机不存在e:盘,还以为strings只支持实际存在的文件呢,其实只需要实际已存在的盘符即可。只一点,与CMD窗口的for截取有点不同,呵呵。。。
dos时代菜鸟 大大的代码简单明了,受教了!
回复

使用道具 举报

16#
发表于 2012-5-23 11:16:59 | 只看该作者
filedir 不支持 带 空格的字符串。
要支持 带空格的 字符串 需要用到循环。如下:

@echo off
for %%c in (p0 n0 l n m) do set %%c=
set p0=1:2\dasfds\ fdsaf\dsa f\sda \fdsa f\as df\abc.gho
strings n0=length %p0%
:fn
strings l=mid %p0%,%n%,1
if %l%*==\* set m=%n%
if %n%*==%n0%* goto fn_
strings n=add %n%,1
goto fn         
:fn_
strings p=left %p0%,%m%
for %%c in (p0 n0 l n m) do set %%c=
echo %p%

循环体 用于找出 字符串中 最后一个 "\" 的位置,然后用 left 函数截取 最后一个"\"左边的内容。
回复

使用道具 举报

17#
 楼主| 发表于 2012-5-23 11:52:55 | 只看该作者
老大们太强大了,小的还需潜水学习!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-11-28 03:46

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表