Board logo

标题: [新手练习]批处理变量的字节大小 [打印本页]

作者: defanive    时间: 2009-1-9 23:26     标题: [新手练习]批处理变量的字节大小

计算出输入变量的字节数,不是变量长度,而是字节数。英文半角等占1字节,中文全角等占2字节

目的:掌握 set /p 和 for 的用法

要求:等待用户输入,并计算出输入变量的字节数,显示出来。暂不考虑特殊字符过滤问题。

评分:代码可读性 1 分;
   首个新方法 7 分,第二个 6 分,依次类推,最少 2 分;
   一人可多种方法,新方法追加 3 分,已经出现过的方法追加 1 分。
   (请版主帮忙评分)

参考答案:(拖拽代码框即可呈现)

@echo off
set /p a=请输入:
echo b%a%b>a.txt
for /f %%a in ("a.txt") do set /a size=%%~za-4
echo %size%
del /q a.txt
pause>nul

作者: tireless    时间: 2009-1-10 00:37

  1. @echo off
  2. :bgn
  3. set /p str=字符串:
  4. for /f "skip=1 delims=:" %%a in ('^(echo.%str%^&echo.^)^|findstr /o .') do (
  5.   set /a Bytes=%%a-3
  6. )
  7. echo 字节数: %Bytes%
  8. echo. & goto bgn
复制代码

作者: tireless    时间: 2009-1-10 00:53     标题: 能处理特殊符号:

  1. @echo off
  2. :bgn
  3. set /p input=字符串:
  4. call set/p="%%input%%"<nul>%temp%\a.txt
  5. for %%a in (%temp%\a.txt) do echo 字节数: %%~za
  6. echo. & goto bgn
复制代码
后发现有些特殊字符不能处理,如 "<,可修改成:
  1. @echo off&setlocal enabledelayedexpansion
  2. :bgn
  3. set /p input=字符串:
  4. set/p="!input!"<nul>%temp%\a.txt
  5. for %%a in (%temp%\a.txt) do echo 字节数: %%~za
  6. echo. & goto bgn
复制代码

[ 本帖最后由 tireless 于 2009-1-16 15:12 编辑 ]
作者: defanive    时间: 2009-1-10 11:24

另一种过滤特殊字符的思路:用set的%PATH:str1=str2%替换功能把特殊字符替换成普通字符(例如字母),这样总大小还是不变,但可以正常echo >
作者: rat    时间: 2009-1-10 16:04

http://www.cn-dos.net/forum/viewthread.php?tid=45097
作者: myzwd    时间: 2009-2-28 18:47     标题: 回复 1楼 的帖子

  1. @echo off
  2. cls
  3. set size=0
  4. echo ╭︿︿︿╮
  5. echo {/ o o /}
  6. echo ( (oo) )
  7. echo ︶ ︶︶
  8. @echo off
  9. set /p var=input
  10. set var > var.txt
  11. for /f %%i in ("var.txt") do set /a "size=%%~zi-6"
  12. echo %size%
  13. set size=
  14. del var.txt
  15. pause
复制代码
看了楼主的答案,模仿了一个,但是问题出来了,为什么我这么写是 -6而不是-4.

[ 本帖最后由 myzwd 于 2009-2-28 18:51 编辑 ]
作者: Batcher    时间: 2009-2-28 19:04     标题: 回复 6楼 的帖子

把倒数第二行注释掉,就会发现你的变量长度和楼主的不同。
作者: zxd11097    时间: 2011-11-1 15:13

哎。新手题各位大神就别来凑热闹了。搞得小弟无法下叉。




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2