[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
回复  523066680 我试了一下,把代码改成这样后可以变成我想要的效果,不知道这样写是不是最好的方法呢?
pZjVa0 发表于 2013-7-13 16:11



    施主醒目。

TOP

仅显示吗
  1. @echo off
  2. set /p text=请输入内容:
  3. for /f "delims=" %%i in ("%text%") do echo 你输入的内容是:%%~i
  4. pause
复制代码
1

评分人数

TOP

回复 17# terse


    测试有效。非常感谢

TOP

本帖最后由 wskwfkbdn 于 2013-7-15 23:11 编辑

@echo off
set /p text=请输入内容:
for /f "delims=" %%i in ("%text%") do echo %%~i
pause


基本上能处理较多较复杂带特殊字符,如有bug请帮忙改进;原创注明:

bug 1:引号问题
输入字符: "123456""  p自动关闭
输入字符: "123456"   显示 123456 ,因为引号被%%~i 去掉了,
请输入内容: ""123456""   显示结果为 :   "123456" ,特殊字符视情况而改。

TOP

回复 17# terse

TOP

回复 20# pZjVa0
对引号的情况还是敏感的

TOP

回复 19# wskwfkbdn


    让我想起以前讨论过的批处理密码验证 http://bbs.bathome.net/viewthread.php?tid=10980
    引用 %变量% 时如果要保证通用性,恐怕只有两种思路:
1、用变量延迟或者其他手段让变量在语法解释之后展开
2、用 "%变量:"=%" 或 "%变量:"=""%" 的方式引用变量中的字符串

TOP

发现我的帖子和17楼一样,今天才注意到,

TOP

标题

回复 22# CrLf
    特殊字符处理除了引号的bug,基本能显示和echo输出,回头想下解决方案,帖子我看了,有说到bat加密,特殊字符,那都是障眼法,对付非老手的可以OK

TOP

回复 22# CrLf


    再度回顾老问题,现在来解释以下,我测试过了可以不用转义而能兼容任意字符,
  但是唯一的一个bug就是字符行尾不能是1个引号,3、5、7,......以此类推p运行就会有问题,如是双个引号,4、6个都不会再for里面出错,并且成功显示容易特殊字符
  1. @echo off
  2. :AA
  3. cls
  4. set "jjdd=~!@#¥%……&*()《》<>{}[]_+-|\?/"
  5. set /p jjdd=请输入字符(包含任意特殊字符):
  6. for /f "delims=" %%a in ("%jjdd%") do echo. %%a
  7. pause&GOTO AA
复制代码
请测试:

TOP

回复 25# wskwfkbdn


    不光是单数引号会出错,双数引号也存在这种情况:
  1. for /f "delims=" %%a in ("&"&"&") do echo. %%a
复制代码

TOP

看来变量延迟应付了
  1. @echo off
  2. :AA
  3. cls
  4. set "jjdd=~!@#¥%……&*()《》<>{}[]_+-|\?/"
  5. set /p jjdd=请输入字符(包含任意特殊字符):
  6. cmd /v /c echo !jjdd!
  7. pause&GOTO AA
复制代码

TOP

回复 26# CrLf
    是滴,

TOP

返回列表