中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
作者:
标题: 如何去掉TXT文本首尾的符 上一主题 | 下一主题
newice
初级用户





积分 70
发帖 24
注册 2005-9-20
状态 离线
『楼 主』:  如何去掉TXT文本首尾的符

set IBV存放路径=D\disk\ibv
set 机器名前缀=XP-
set 客户机数量=200

if %客户机数量% leq 9 goto :9
if %客户机数量% leq 99 goto :99
if %客户机数量% leq 999 goto :999
goto :end

:9
for /l %%i in (1,1,9) do echo "<device name="IBV%%i" target="%机器名前缀%00%%i" file="My Computer\%IBV存放路径%\%机器名前缀%00%%i.ibv" mode="3" clustered="no" asyncmode="yes"/>" >>IBVcfg.txt


:99
for /l %%i in (1,1,9) do echo "<device name="IBV%%i" target="%机器名前缀%00%%i" file="My Computer\%IBV存放路径%\%机器名前缀%00%%i.ibv" mode="3" clustered="no" asyncmode="yes"/>" >>IBVcfg.txt
for /l %%i in (10,1,%客户机数量%) do echo "<device name="IBV%%i" target="%机器名前缀%0%%i" file="My Computer\%IBV存放路径%\%机器名前缀%0%%i.ibv" mode="3" clustered="no" asyncmode="yes"/>" >>IBVcfg.txt


:999
for /l %%i in (1,1,9) do echo "<device name="IBV%%i" target="%机器名前缀%00%%i" file="My Computer\%IBV存放路径%\%机器名前缀%00%%i.ibv" mode="3" clustered="no" asyncmode="yes"/>" >>IBVcfg.txt
for /l %%i in (10,1,99) do echo "<device name="IBV%%i" target="%机器名前缀%0%%i" file="My Computer\%IBV存放路径%\%机器名前缀%0%%i.ibv" mode="3" clustered="no" asyncmode="yes"/>" >>IBVcfg.txt
for /l %%i in (100,1,%客户机数量%) do echo "<device name="IBV%%i" target="%机器名前缀%%%i" file="My Computer\%IBV存放路径%\%机器名前缀%%%i.ibv" mode="3" clustered="no" asyncmode="yes"/>" >>IBVcfg.txt

:end

生存后是这样的
"<device name="IBV1" target="XP-001" file="My Computer\D\disk\ibv\XP-001.ibv" mode="3" clustered="no" asyncmode="yes"/>"

就是想去掉前面的“和后面的”

<device name="IBV1" target="XP-001" file="My Computer\D\disk\ibv\XP-001.ibv" mode="3" clustered="no" asyncmode="yes"/>


还有一个是取机器名的后面3个数字并定义为变量,有没更直观的方法

for /f %%i in ("%computername%") do (
    set "name=%%i"
    call set "name=%%name:~3,4%%")

2006-12-14 10:04
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
newice
初级用户





积分 70
发帖 24
注册 2005-9-20
状态 离线
『第 2 楼』:  

没有人能指点一下吗?

2006-12-14 14:52
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 3 楼』:  


  假设你的IBVcfg.txt的内容如下:

  Quote:
"<device name="IBV%%i" target="%机器名前缀%00%%i" file="My Computer\%IBV存放路径%\%机器名前缀%00%%i.ibv" mode="3" clustered="no" asyncmode="yes"/>"
"<device name="IBV%%i" target="%机器名前缀%0%%i" file="My Computer\%IBV存放路径%\%机器名前缀%0%%i.ibv" mode="3" clustered="no" asyncmode="yes"/>"
"<device name="IBV1" target="XP-001" file="My Computer\D\disk\ibv\XP-001.ibv" mode="3" clustered="no" asyncmode="yes"/>"

  试试这个脚本:
rem code by lxmxn @ cn-dos.net
@echo off
    for /f "delims=" %%a in (IBVcfg.txt) do (
        setlocal enabledelayedexpansion
        set str=%%a
        set str=!str:~1,-1!
        echo !str!
        ::echo 如果要输入到文件中,在echo !str!加上>>filename.txt
        endlocal
    )
pause


   此帖被 +5 点积分       点击查看详情   
评分人:【 ccwan 分数: +5  时间:2006-12-15 01:30


2006-12-14 15:30
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
newice
初级用户





积分 70
发帖 24
注册 2005-9-20
状态 离线
『第 4 楼』:  

后面的点没去掉,只去了前面的。

2006-12-14 16:31
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 5 楼』:  


  我能得到正确的结果啊,我的IBVcfg.txt的内容是:

  Quote:
"<device name="IBV%%i" target="%机器名前缀%00%%i" file="My Computer\%IBV存放路径%\%机器名前缀%00%%i.ibv" mode="3" clustered="no" asyncmode="yes"/>"
"<device name="IBV%%i" target="%机器名前缀%0%%i" file="My Computer\%IBV存放路径%\%机器名前缀%0%%i.ibv" mode="3" clustered="no" asyncmode="yes"/>"
"<device name="IBV1" target="XP-001" file="My Computer\D\disk\ibv\XP-001.ibv" mode="3" clustered="no" asyncmode="yes"/>"

  得到的结果是:

  Quote:
<device name="IBV%%i" target="%机器名前缀%00%%i" file="My Computer\%IBV存放路径%\%机器名前缀%00%%i.ibv" mode="3" clustered="no" asyncmode="yes"/>
<device name="IBV%%i" target="%机器名前缀%0%%i" file="My Computer\%IBV存放路径%\%机器名前缀%0%%i.ibv" mode="3" clustered="no" asyncmode="yes"/>
<device name="IBV1" target="XP-001" file="My Computer\D\disk\ibv\XP-001.ibv" mode="3" clustered="no" asyncmode="yes"/>

  你再仔细检查一下。


2006-12-15 01:06
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
ccwan
金牌会员




积分 2725
发帖 1160
注册 2006-9-23
来自 河北廊坊
状态 离线
『第 6 楼』:  

的确。lxmxn兄的代码没有问题。加分!



三人行,必有吾师焉。   学然后知不足,教然后知困,然后能自强也。
2006-12-15 01:30
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lh82102849
初级用户





积分 24
发帖 11
注册 2006-9-30
状态 离线
『第 7 楼』:  

学习了,感觉自己太差了
谢谢

2006-12-15 02:58
查看资料  发短消息 网志   编辑帖子  回复  引用回复
newice
初级用户





积分 70
发帖 24
注册 2005-9-20
状态 离线
『第 8 楼』:  

呵呵,还是这样的,麻烦再指点下哪里有错误

set IBV存放路径=D\disk\ibv
set 机器名前缀=XP-
set 客户机数量=200

if %客户机数量% leq 9 goto :9
if %客户机数量% leq 99 goto :99
if %客户机数量% leq 999 goto :999
goto :end

:9
for /l %%i in (1,1,9) do echo "<device name="IBV%%i" target="%机器名前缀%00%%i" file="My Computer\%IBV存放路径%\%机器名前缀%00%%i.ibv" mode="3" clustered="no" asyncmode="yes"/>" >>IBVcfg.txt


:99
for /l %%i in (1,1,9) do echo "<device name="IBV%%i" target="%机器名前缀%00%%i" file="My Computer\%IBV存放路径%\%机器名前缀%00%%i.ibv" mode="3" clustered="no" asyncmode="yes"/>" >>IBVcfg.txt
for /l %%i in (10,1,%客户机数量%) do echo "<device name="IBV%%i" target="%机器名前缀%0%%i" file="My Computer\%IBV存放路径%\%机器名前缀%0%%i.ibv" mode="3" clustered="no" asyncmode="yes"/>" >>IBVcfg.txt


:999
for /l %%i in (1,1,9) do echo "<device name="IBV%%i" target="%机器名前缀%00%%i" file="My Computer\%IBV存放路径%\%机器名前缀%00%%i.ibv" mode="3" clustered="no" asyncmode="yes"/>" >>IBVcfg.txt
for /l %%i in (10,1,99) do echo "<device name="IBV%%i" target="%机器名前缀%0%%i" file="My Computer\%IBV存放路径%\%机器名前缀%0%%i.ibv" mode="3" clustered="no" asyncmode="yes"/>" >>IBVcfg.txt
for /l %%i in (100,1,%客户机数量%) do echo "<device name="IBV%%i" target="%机器名前缀%%%i" file="My Computer\%IBV存放路径%\%机器名前缀%%%i.ibv" mode="3" clustered="no" asyncmode="yes"/>" >>IBVcfg.txt

:end

rem code by lxmxn @ cn-dos.net
@echo off
    for /f "delims=" %%a in (IBVcfg.txt) do (
        setlocal enabledelayedexpansion
        set str=%%a
        set str=!str:~1,-1!
        echo !str! >>filename.txt
        ::echo 如果要输入到文件中,在echo !str!加上>>filename.txt
        endlocal
    )
pause

2006-12-15 03:20
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
newice
初级用户





积分 70
发帖 24
注册 2005-9-20
状态 离线
『第 9 楼』:  

<device name="IBV1" target="XP-001" file="My Computer\D\disk\ibv\XP-001.ibv" mode="3" clustered="no" asyncmode="yes"/>"

生存后是这样的。后面还是有个点

2006-12-15 03:21
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 10 楼』:  


  Re newice :
  
  你我使用的代码并没有差别,而是由于你的IBVcfg.txt文件中的每一行后面有一个空格(仔细观察一下就可以发现了),导致批处理脚本没有达到你所要的要求。

  解决方法是,再你的原代码里面,将输入重定向符号">>"前面的空格去掉,这样,生成的IBVcfg.txt文件的每一句之后就没有空格,也就可以用上面的代码来达到你的要求了。其实问题的本质,还是我的代码不健壮。  


2006-12-15 03:46
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 11 楼』:  

  用 for 语句的 %~i 扩展来去掉字符串首尾的引号更简洁一点:
@echo off
for /f "delims=" %%i in (IBVcfg.txt) do echo %%~i
pause


   此帖被 +3 点积分     点击查看详情   
评分人:【 lxmxn 分数: +3  时间:2006-12-15 04:15




尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
2006-12-15 03:53
查看资料  发短消息 网志   编辑帖子  回复  引用回复
newice
初级用户





积分 70
发帖 24
注册 2005-9-20
状态 离线
『第 12 楼』:  

谢谢斑竹和大大的帮忙,万分感谢!!!

2006-12-15 04:04
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 13 楼』:  


  版主的代码好简洁,顶一个。

  但是如果文本后面有一个空格,也不能很好的解决引号的问题。


2006-12-15 04:15
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
vkill
金牌会员





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

%%~i 好

2006-12-16 10:00
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


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



论坛跳转: