中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-08-05 03:05
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 关于findstr 和 "|" 连接符的问题 查看 1,009 回复 3
楼 主 关于findstr 和 "|" 连接符的问题 发表于 2007-06-19 23:27 ·  中国 广东 东莞 电信
初级用户
积分 107
发帖 48
注册 2006-11-30 12:06
19年会员
UID 72174
性别 男
状态 离线
如题:

我在编写一个这样的批处理文件进碰到一个这样的问题!

@echo off
setlocal enabledelayedexpansion
title design by ieutk
mode con: cols=78 lines=15
color 1a
set num=0

:input
cls&echo\&echo/
set name=
set /p name= 请输入你的名字:
if not defined name goto input
echo %name%|findstr "^*$">nul && goto st||msg /v /w %username% " 你输入的名字暂时不符合要求! ">nul
goto input

:st
:: 计算输入的字符长度
set name=%name:~0,58%
set /a num+=1
for /f "delims=" %%a in ("%num%") do (
if not "!name:~%%a,1!"=="" goto st
set chi=%%a
)
set num=0


这样子可以正确执行代码,但是问题来啦
echo %name%|findstr "^*$">nul && goto st||msg /v /w %username% "  你输入的名字暂时不符合要求!   ">nul

看上面这句代码, "|" 连接符和它前后的代码之间没有空格,但是我如果改成
echo %name% |findstr "^*$">nul && goto st||msg /v /w %username% "  你输入的名字暂时不符合要求!   ">nul

这样的话就会执行后面的代码出现预置的提示!
就是在 %name% 和 | 之间加一个空格和不加空格结果不一样,想知道这是为什么呢?THS
她希望我把粪土变黄金,我希望她视黄金如粪土!
2 发表于 2007-06-19 23:40 ·  中国 湖北 武汉 电信
版主
★★★★★
积分 11,386
发帖 4,938
注册 2006-07-23 17:10
20年会员
UID 59080
状态 离线
echo %name% |findstr
这个是把%name%的值加上一个空格传递给findstr,因为你的匹配字符集[a-zA-Z0-9]里面没有空格,所以不成功。


echo %name%|findstr
仅仅是把%name%的值传递给findstr,所以可以成功。
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
ieutk +2 2007-06-19 23:41
3 发表于 2007-06-19 23:40 ·  中国 广东 东莞 电信
初级用户
积分 107
发帖 48
注册 2006-11-30 12:06
19年会员
UID 72174
性别 男
状态 离线
大家帮我试试看有没有有问题,在我这是有问题!

我的系统是:
Microsoft Windows XP [版本 5.1.2600]
她希望我把粪土变黄金,我希望她视黄金如粪土!
4 发表于 2007-06-19 23:42 ·  中国 广东 东莞 电信
初级用户
积分 107
发帖 48
注册 2006-11-30 12:06
19年会员
UID 72174
性别 男
状态 离线
哦,谢谢版主,看来对 findstr 的正则表达式还欠提高!
她希望我把粪土变黄金,我希望她视黄金如粪土!
论坛跳转: