标题: 如何去掉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 好