中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-06-15 23:29
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [讨论]最大限度原样输出含特殊字符的指定行内容 精华I 查看 19,166 回复 32
16 发表于 2007-05-18 14:13 ·  中国 广东 广州 电信
高级用户
★★★
潜水修练批处理
积分 788
发帖 366
注册 2006-12-31 02:43
UID 75048
性别 男
状态 离线
这个可否??紧限于输出

type test.txt>output.txt
正在潜水修练的批处理小白
17 发表于 2007-05-18 14:18 ·  中国 浙江 杭州 华数宽带
银牌会员
★★★
积分 2,000
发帖 621
注册 2007-01-01 00:00
UID 75212
性别 男
状态 离线
?
namejm上面的帖子针对的是哪个帖子说的?

我觉得当引号个数为奇数是就会把 echo后所有的东西全部输出;
因此无法重定向;
我认为解决方法为给每个引号加转义;

对于偶数;觉得不会出错
18 发表于 2007-05-18 14:23 ·  中国 广东 电信
荣誉版主
★★★★
batch fan
积分 5,226
发帖 1,737
注册 2006-03-10 00:38
UID 51697
来自 成都
状态 离线
  呵呵,我使用的代码不是你的版本,说法出错了,我收回这个说法。
尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
19 发表于 2007-05-18 14:27 ·  中国 广东 电信
荣誉版主
★★★★
batch fan
积分 5,226
发帖 1,737
注册 2006-03-10 00:38
UID 51697
来自 成都
状态 离线
  不知不觉中,bjsh已经把所有的特殊字符的输出问题都解决完了,剩下的事情就是效率的提升和代码的精简/规范问题了。
尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
20 发表于 2007-05-18 14:29 ·  中国 广东 电信
荣誉版主
★★★★
batch fan
积分 5,226
发帖 1,737
注册 2006-03-10 00:38
UID 51697
来自 成都
状态 离线
Originally posted by dikex at 2007-5-18 14:13:
这个可否??紧限于输出

type test.txt>output.txt

  type方案仅限于整个文本的输出,而我想讨论的是对指定行内容里的所有特殊字符的原样输出,我的标题有点误导人了,这就改改。
尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
21 发表于 2007-05-18 14:44 ·  中国 浙江 杭州 华数宽带
银牌会员
★★★
积分 2,000
发帖 621
注册 2007-01-01 00:00
UID 75212
性别 男
状态 离线
重定向到文本中的代码

@echo off
if exist tmp.txt del tmp.txt
set var=
for /f "delims=" %%a in ('findstr /n .* test.txt') do (
set "var=%%a"
call set "var=%%var:"=%%"
call :change
)
goto :eof
:change
set "var=%var:^=^^%"
set "var=%var:>=^>%"
set "var=%var:<=^<%"
set "var=%var:&=^&%"
set "var=%var:|=^|%"
set "var=%var:*:=%"
if not defined var echo.>>tmp.txt & goto :eof
call set "var=%%var:="%%"
call echo.%%var%%>>tmp.txt

注释:
call set "var=%%var:"=%%"
中的:"=%%"里的"空格"不是空格是ctrl+BackSpace的特殊字符;

[ Last edited by bjsh on 2007-5-18 at 02:47 PM ]
22 发表于 2007-05-22 21:00 ·  中国 青海 西宁 电信
金牌会员
★★★★
积分 4,103
发帖 1,744
注册 2006-01-20 13:00
UID 49241
性别 男
来自 甘肃.临泽
状态 离线
我记得关于这个在无奈何签名的那个帖子中已经有一个很好的方案了吧!
23 发表于 2007-05-23 15:56 ·  中国 浙江 杭州 华数宽带
银牌会员
★★★
积分 2,000
发帖 621
注册 2007-01-01 00:00
UID 75212
性别 男
状态 离线
最新代码:
简练且效率高

@echo off
for /f "delims=" %%a in ('findstr /n .* test.txt') do (
set "var=%%a"
setlocal enabledelayedexpansion
set var=!var:*:=!
echo.!var!
endlocal
)


有兴趣的帮忙测试
本帖最近评分记录 (共 2 条) 点击查看详情
评分人分数时间
vkill +6 2007-05-24 13:50
cutebe +1 2009-10-17 13:38
24 发表于 2007-05-23 22:41 ·  中国 广东 电信
荣誉版主
★★★★
batch fan
积分 5,226
发帖 1,737
注册 2006-03-10 00:38
UID 51697
来自 成都
状态 离线
  这可能是最简洁高效的代码了,变量延迟大有文章可作啊。
尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
25 发表于 2007-05-23 22:56 ·  中国 浙江 杭州 华数宽带
银牌会员
★★★
积分 2,000
发帖 621
注册 2007-01-01 00:00
UID 75212
性别 男
状态 离线
简析环境变量和变量延迟特殊字符以及中介法的微妙关系

是写上面代码的后感..

[ Last edited by bjsh on 2007-11-14 at 12:11 AM ]
26 发表于 2007-10-05 05:00 ·  中国 广东 广州 天河区 电信
初级用户
积分 82
发帖 15
注册 2007-05-26 20:14
UID 89403
性别 男
状态 离线
不知道效果怎么样..
@echo off
for /f "eol= delims=" %%i in (a.txt) do (
set type=%%i
for /l %%j in (0,1,100) do (
setlocal EnableDelayedExpansion
if "!type:~%%j,1!"==" " (set/p= <nul)
if "!type:~%%j,1!"=="=" (set/p= <nul&set/p==<nul) else (
call set/p="%%type:~%%j,1%%"<nul)
endlocal)
echo.
)
pause>nul
27 发表于 2008-04-25 05:23 ·  中国 广东 深圳 罗湖区 电信
初级用户
积分 27
发帖 11
注册 2006-03-16 07:21
UID 52148
状态 离线
呵呵`不错`佩服``
28 发表于 2008-06-22 00:27 ·  中国 广东 清远 电信
高级用户
★★★
CMD感染者
积分 691
发帖 383
注册 2008-05-23 00:38
UID 119451
性别 男
状态 离线
受益非浅!
但还有一问题:怎样用P修改含特殊符号的文本,如:
将test.txt
ip 125.219.59.216

sv_contact "568ggstart@163.Com"
// 服务器构建者的联系邮箱

sv_send_resources 1
// 自动向客户端传送地图关联的 *.res文件里包括的资源文件

sv_maxrate 25000
// 服务器最大传输速率 <0-25000>


改为:
ip 59.32.211.105

sv_contact "568ggstart@163.Com"
// 服务器构建者的联系邮箱

sv_send_resources 1
// 自动向客户端传送地图关联的 *.res文件里包括的资源文件

sv_maxrate 25000
// 服务器最大传输速率 <0-25000>
29 发表于 2008-09-16 20:57 ·  中国 广东 广州 联通
初级用户
积分 22
发帖 10
注册 2008-09-15 03:00
UID 125673
性别 女
状态 离线
太高深了,光看不顶说不过去,顶一下又恐说我外行凑热闹。还是顶了吧
30 发表于 2008-10-19 17:25 ·  中国 江西 赣州 电信
新手上路
积分 13
发帖 15
注册 2008-10-19 15:37
UID 128763
性别 男
状态 离线
我们几位版主真是太有才了
论坛跳转: