Board logo

标题: 如何去掉TXT文本首尾的符 [打印本页]

作者: newice     时间: 2006-12-14 10:04    标题: 如何去掉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%%")
作者: newice     时间: 2006-12-14 14:52
没有人能指点一下吗?
作者: lxmxn     时间: 2006-12-14 15:30

  假设你的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

作者: newice     时间: 2006-12-14 16:31
后面的点没去掉,只去了前面的。
作者: lxmxn     时间: 2006-12-15 01:06

  我能得到正确的结果啊,我的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"/>

  你再仔细检查一下。

作者: ccwan     时间: 2006-12-15 01:30
的确。lxmxn兄的代码没有问题。加分!
作者: lh82102849     时间: 2006-12-15 02:58
学习了,感觉自己太差了
谢谢
作者: newice     时间: 2006-12-15 03:20
呵呵,还是这样的,麻烦再指点下哪里有错误

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
作者: newice     时间: 2006-12-15 03:21
<device name="IBV1" target="XP-001" file="My Computer\D\disk\ibv\XP-001.ibv" mode="3" clustered="no" asyncmode="yes"/>"

生存后是这样的。后面还是有个点
作者: lxmxn     时间: 2006-12-15 03:46

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

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

作者: namejm     时间: 2006-12-15 03:53
  用 for 语句的 %~i 扩展来去掉字符串首尾的引号更简洁一点:
@echo off
for /f "delims=" %%i in (IBVcfg.txt) do echo %%~i
pause

作者: newice     时间: 2006-12-15 04:04
谢谢斑竹和大大的帮忙,万分感谢!!!
作者: lxmxn     时间: 2006-12-15 04:15

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

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

作者: vkill     时间: 2006-12-16 10:00
%%~i 好