中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-08 20:15
47,811 主题排行 / 349,895 发帖 / 今日 0 篇 / 48,253 会员排行
DOS批处理 & 脚本技术(批处理室) » 如何去掉TXT文本首尾的符
可打印版本  3,361 / 13
第1楼 newice 发表于 2006-12-14 10:04
初级用户 发帖 24 积分 70
如何去掉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%%")
第2楼 newice 发表于 2006-12-14 14:52
初级用户 发帖 24 积分 70
没有人能指点一下吗?
第3楼 lxmxn 发表于 2006-12-14 15:30
版主 发帖 4,938 积分 11,386

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

"<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"/>"

  试试这个脚本:
第4楼 newice 发表于 2006-12-14 16:31
初级用户 发帖 24 积分 70
后面的点没去掉,只去了前面的。
第5楼 lxmxn 发表于 2006-12-15 01:06
版主 发帖 4,938 积分 11,386

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

"<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"/>"

  得到的结果是:

<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"/>

  你再仔细检查一下。
第6楼 ccwan 发表于 2006-12-15 01:30
金牌会员 发帖 1,160 积分 2,725 来自 河北廊坊
的确。lxmxn兄的代码没有问题。加分!
第7楼 lh82102849 发表于 2006-12-15 02:58
初级用户 发帖 11 积分 24
学习了,感觉自己太差了
谢谢
第8楼 newice 发表于 2006-12-15 03:20
初级用户 发帖 24 积分 70
呵呵,还是这样的,麻烦再指点下哪里有错误

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
第9楼 newice 发表于 2006-12-15 03:21
初级用户 发帖 24 积分 70
<device name="IBV1" target="XP-001" file="My Computer\D\disk\ibv\XP-001.ibv" mode="3" clustered="no" asyncmode="yes"/>"

生存后是这样的。后面还是有个点
第10楼 lxmxn 发表于 2006-12-15 03:46
版主 发帖 4,938 积分 11,386

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

  解决方法是,再你的原代码里面,将输入重定向符号">>"前面的空格去掉,这样,生成的IBVcfg.txt文件的每一句之后就没有空格,也就可以用上面的代码来达到你的要求了。其实问题的本质,还是我的代码不健壮。  
第11楼 namejm 发表于 2006-12-15 03:53
荣誉版主 发帖 1,737 积分 5,226 来自 成都
  用 for 语句的 %~i 扩展来去掉字符串首尾的引号更简洁一点:
第12楼 newice 发表于 2006-12-15 04:04
初级用户 发帖 24 积分 70
谢谢斑竹和大大的帮忙,万分感谢!!!
第13楼 lxmxn 发表于 2006-12-15 04:15
版主 发帖 4,938 积分 11,386

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

  但是如果文本后面有一个空格,也不能很好的解决引号的问题。
第14楼 vkill 发表于 2006-12-16 10:00
金牌会员 发帖 1,744 积分 4,103 来自 甘肃.临泽
%%~i 好
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023