找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 78776|回复: 15

[文本处理] 批处理如何判断字符串中是否含有空格

[复制链接]
发表于 2016-7-22 23:27:29 | 显示全部楼层 |阅读模式
本帖最后由 pcl_test 于 2016-7-22 23:39 编辑

例如

set a="aaaaabbbbbbb ccccccccc"
echo %a% | findstr  /c:" " && echo ture || echo false

如果有空格输出ture,没有输出false


但是,使用findstr  /c:" " 得不多正确的结果,到底该怎么写呢?
谢谢指导。
发表于 2016-7-22 23:38:22 | 显示全部楼层
  1. @echo off
  2. set "a=aaaaabbbbbbb ccccccccc"
  3. if "%a%" neq "%a: =%" (echo;true) else echo;false
  4. pause
复制代码
 楼主| 发表于 2016-7-22 23:46:19 | 显示全部楼层
回复 2# pcl_test


    谢谢
发表于 2016-7-22 23:47:16 | 显示全部楼层
  1. @echo off
  2. set "a=aaaaabbbbbbbccccccccc"
  3. rem echo;%a%|findstr /c:" "&&echo;ture || echo;false
  4. echo;%a%|find " "&&echo;ture || echo;false
  5. pause
复制代码
 楼主| 发表于 2016-7-22 23:47:24 | 显示全部楼层
回复 2# pcl_test


    非常感谢版主,我自己学习一下。
 楼主| 发表于 2016-7-22 23:50:30 | 显示全部楼层
回复 4# pcl_test


    谢谢版主,原因我自己找的了
发表于 2016-7-23 00:13:40 | 显示全部楼层
  1. echo a b c|findstr /r /c:" "
复制代码
发表于 2016-7-23 08:41:27 | 显示全部楼层
  1. @echo off
  2. set "a=aaaaabbbbbbbccccccccc"
  3. set n=
  4. for /f "tokens=2" %%i in ("%a%") do (
  5.     set "n=%%i"
  6. )
  7. if "%n%" neq "" (
  8.     echo true
  9. ) else (
  10.     echo false
  11. )
  12. pause
复制代码
发表于 2016-7-23 15:25:40 | 显示全部楼层
回复 8# gawk

1%a%1这样好点吧
发表于 2016-7-23 15:37:07 | 显示全部楼层
  1. @echo off
  2. set "str= ab"
  3. >nul 2>&1 set /a #%str%#=1&&echo;false||echo;true
  4. pause
复制代码
发表于 2016-7-29 13:13:02 | 显示全部楼层
本帖最后由 pcl_test 于 2016-7-29 13:54 编辑

回复 10# pcl_test

是否能幫忙說明一下
>nul 2 >&1 為何能這樣使用,他的意義又是什麼?
以及
#%str%# 的 #號用意是什麼,當使用在 Set #Var#=123456 時那個#號的意義是什麼?
謝謝。

评分

参与人数 1PB -2 收起 理由
pcl_test -2 后续有其他问题的在原帖追问

查看全部评分

发表于 2016-7-29 14:01:16 | 显示全部楼层
本帖最后由 pcl_test 于 2016-7-29 14:11 编辑

回复 11# dreamer
此法是有局限性的

在cmd窗口分别执行以下命令,看到区别没
set /a a=1
set /a a b=1
set /a a=1 >nul
set /a a b=1 2>nul
原理就是利用set /a会判断算式的合法性
set "str= ab"
set /a #%str%#=1即为set /a # ab#=1
此处#的作用是为了可识别字符串前后的空格,而不是默认分隔符,如set /a              a=1

Set #Var#=123456此处#的仅是变量名中的一个字符
echo,%#Var#%得123456
发表于 2016-7-29 23:19:23 | 显示全部楼层
本帖最后由 dreamer 于 2016-7-29 23:26 编辑
pcl_test: 后续有其他问题的在原帖追问PB -2

了解抱歉

set /a a=1  理解 A=1
set /a a b=1 理解 遺失運算子
set /a a=1 >nul 理解 重導向至NUL
set /a a b=1 2>nul 理解錯誤時重導向至NUL
#%Var%# 吸收了,感謝

不能理解是這段
>nul 2 >&1
若只執行這部份是出現錯誤的,這部份若用白話來說應該如何解釋?
>nul 重導向至NUL(>前並無任何值,回應是語法錯誤)
2 >也是語法錯誤
還有&1並不是指令卻放&之後
為何加上set /a #%str%#=1卻能無誤的執行?
发表于 2016-7-29 23:30:16 | 显示全部楼层
回复 13# dreamer
set /a a=1 >nul 理解 重導向至NUL
set /a a b=1 2>nul 理解錯誤時重導向至NUL
那么>nul 2 >&1就是无论正确或错误,返回结果到导向nul,即屏蔽返回的信息
查看
http://www.bathome.net/viewthread.php?tid=2579
http://www.bathome.net/viewthread.php?tid=12553
发表于 2016-7-30 00:37:09 | 显示全部楼层
本帖最后由 pcl_test 于 2016-7-30 02:06 编辑

回复 14# pcl_test


    了解,感謝您
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 04:44 , Processed in 0.022677 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表